この記事は英語の原文を日本語に翻訳したものです。原文: https://opentelemetry.io/docs/specs/semconv/dotnet/dotnet-http-metrics/
翻訳元: open-telemetry/semantic-conventions v1.44.0(コミット e10a930)
.NETが発行するHTTPクライアント・サーバーメトリクスに関するセマンティック規約
ステータス: Stable
この記事では、.NETのコンポーネントとランタイムが発行するHTTPメトリクスに関するセマンティック規約を定義します。
HTTPクライアント
すべてのHTTPクライアントメトリクスは、System.Net.Http Meterによって報告されます。
メトリクス: http.client.request.duration
クライアントのリクエスト時間は、レスポンスヘッダーを受信するまでの時間を計測し、レスポンスボディの読み取り時間は含みません。
このメトリクスは、共通のhttp.client.request.durationの定義に従います。
注記:
- Meterの名前は
System.Net.Httpです。 - .NET 8.0で追加されたメトリクスです。
error.type属性が報告される場合、それにはHTTP Request errorsのいずれかをsnake_caseにしたもの、完全な例外型、または受信したステータスコードの文字列表現が含まれます。network.protocol.nameは報告されず、常にhttpに一致すると仮定すべきです(should)。server.portは、提供されたスキームのデフォルトポート(httpsの場合は443、httpの場合は80)と一致する場合は報告されません。url.schemeは常に報告されます。
メトリクス: http.client.open_connections
| Name | Instrument Type | Unit (UCUM) | Description |
|---|---|---|---|
http.client.open_connections | UpDownCounter | {connection} | クライアント上で現在アクティブまたはアイドル状態の、送信方向のHTTP接続数。[1] |
[1]: Meterの名前: System.Net.Http; 追加されたバージョン: .NET 8.0
| Attribute | Type | Description | Examples | Requirement Level |
|---|---|---|---|---|
http.connection.state | string | HTTP接続プール内のHTTP接続の状態。 | active; idle | Required |
network.peer.address | string | ソケット接続のリモートIPアドレス。 | 10.1.2.80 | Recommended |
network.protocol.version | string | 接続プール内の接続に関連する、ネゴシエーション済みのプロトコルバージョン。[1] | 1.1; 2; 3 | Recommended |
server.address | string | HTTPリクエストの送信先である「URIオリジン」のホスト識別子。[2] | example.com; 10.1.2.80; /tmp/my.sock | Required |
server.port | int | HTTPリクエストの送信先である「URIオリジン」のポート識別子。[3] | 80; 8080; 443 | Conditionally Required: [4] |
url.scheme | string | 使用されているプロトコルを識別するURIスキームの構成要素。 | http; https; ftp | Recommended |
[1]: HTTP 1.0と1.1のリクエストは、接続プール内で接続を共有し、いずれもバージョン1.1として報告されます。したがって、接続メトリクスで報告されるnetwork.protocol.versionの値は、HTTP 1.0リクエストのリクエストレベルのメトリクスやスパンで報告される値とは異なります。
[2]: HTTPクライアントリクエストが、たとえばhttp://x.x.x.x:8080のようにIPアドレスに対して明示的に行われる場合、server.addressはそのIPアドレスx.x.x.xであるべきです(SHOULD)。DNSルックアップは使用すべきではありません(SHOULD NOT)。
[3]: クライアント側から観測し、かつ中間サーバーを介して通信している場合、server.portは、(利用可能であれば)プロキシなどの中間サーバーの背後にあるサーバーのポートを表すべきです(SHOULD)。
[4]: デフォルト値(httpスキームの場合は80、httpsの場合は443)でない場合。
http.connection.stateは、次のいずれかでなければなりません。
| Value | Description |
|---|---|
active | active状態。 |
idle | idle状態。 |
メトリクス: http.client.connection.duration
このメトリクスは、[ 0.01, 0.02, 0.05, 0.1, 0.2, 0.5, 1, 2, 5, 10, 30, 60, 120, 300 ] のExplicitBucketBoundaries advisoryパラメータを指定すべきです(SHOULD)。
| Name | Instrument Type | Unit (UCUM) | Description |
|---|---|---|---|
http.client.connection.duration | Histogram | s | 正常に確立された送信方向のHTTP接続の持続時間。[1] |
[1]: Meterの名前: System.Net.Http; 追加されたバージョン: .NET 8.0
| Attribute | Type | Description | Examples | Requirement Level |
|---|---|---|---|---|
network.peer.address | string | ネットワーク接続のピアアドレス(IPアドレスまたはUNIXドメインソケット名)。 | 10.1.2.80; /tmp/my.sock | Recommended |
network.protocol.version | string | 接続プール内の接続に関連する、ネゴシエーション済みのプロトコルバージョン。[1] | 1.1; 2; 3 | Recommended |
server.address | string | HTTPリクエストの送信先である「URIオリジン」のホスト識別子。[2] | example.com; 10.1.2.80; /tmp/my.sock | Required |
server.port | int | HTTPリクエストの送信先である「URIオリジン」のポート識別子。[3] | 80; 8080; 443 | Conditionally Required: [4] |
url.scheme | string | 使用されているプロトコルを識別するURIスキームの構成要素。 | http; https; ftp | Recommended |
[1]: HTTP 1.0と1.1のリクエストは、接続プール内で接続を共有し、いずれもバージョン1.1として報告されます。したがって、接続メトリクスで報告されるnetwork.protocol.versionの値は、HTTP 1.0リクエストのリクエストレベルのメトリクスやスパンで報告される値とは異なります。
[2]: HTTPクライアントリクエストが、たとえばhttp://x.x.x.x:8080のようにIPアドレスに対して明示的に行われる場合、server.addressはそのIPアドレスx.x.x.xであるべきです(SHOULD)。DNSルックアップは使用すべきではありません(SHOULD NOT)。
[3]: クライアント側から観測し、かつ中間サーバーを介して通信している場合、server.portは、(利用可能であれば)プロキシなどの中間サーバーの背後にあるサーバーのポートを表すべきです(SHOULD)。
[4]: デフォルト値(httpスキームの場合は80、httpsの場合は443)でない場合。
メトリクス: http.client.request.time_in_queue
このメトリクスは、[ 0.005, 0.01, 0.025, 0.05, 0.075, 0.1, 0.25, 0.5, 0.75, 1, 2.5, 5, 7.5, 10 ] のExplicitBucketBoundaries advisoryパラメータを指定すべきです(SHOULD)。
| Name | Instrument Type | Unit (UCUM) | Description |
|---|---|---|---|
http.client.request.time_in_queue | Histogram | s | リクエストが、利用可能な接続を待ってキューに滞在した時間。[1] |
[1]: Meterの名前: System.Net.Http; 追加されたバージョン: .NET 8.0
| Attribute | Type | Description | Examples | Requirement Level |
|---|---|---|---|---|
http.request.method | string | HTTPリクエストのメソッド。[1] | GET; POST; HEAD | Recommended |
network.protocol.version | string | 接続プール内の接続に関連する、ネゴシエーション済みのプロトコルバージョン。[2] | 1.1; 2; 3 | Recommended |
server.address | string | HTTPリクエストの送信先である「URIオリジン」のホスト識別子。[3] | example.com; 10.1.2.80; /tmp/my.sock | Required |
server.port | int | HTTPリクエストの送信先である「URIオリジン」のポート識別子。[4] | 80; 8080; 443 | Conditionally Required: [5] |
url.scheme | string | 使用されているプロトコルを識別するURIスキームの構成要素。 | http; https; ftp | Recommended |
[1]: HTTPリクエストメソッドの値は、RFC9110に列挙されている「既知の」メソッドと、RFC5789で定義されているPATCHメソッドのいずれかです。
HTTPリクエストメソッドが不明な場合、http.request.method属性は_OTHERに設定されます。現時点では、既知のHTTPメソッドの一覧を上書きすることはできません。
[2]: HTTP 1.0と1.1のリクエストは、接続プール内で接続を共有し、いずれもバージョン1.1として報告されます。したがって、接続メトリクスで報告されるnetwork.protocol.versionの値は、HTTP 1.0リクエストのリクエストレベルのメトリクスやスパンで報告される値とは異なります。
[3]: HTTPクライアントリクエストが、たとえばhttp://x.x.x.x:8080のようにIPアドレスに対して明示的に行われる場合、server.addressはそのIPアドレスx.x.x.xであるべきです(SHOULD)。DNSルックアップは使用すべきではありません(SHOULD NOT)。
[4]: クライアント側から観測し、かつ中間サーバーを介して通信している場合、server.portは、(利用可能であれば)プロキシなどの中間サーバーの背後にあるサーバーのポートを表すべきです(SHOULD)。
[5]: デフォルト値(httpスキームの場合は80、httpsの場合は443)でない場合。
http.request.methodには、次のよく知られた値の一覧があります。これらのいずれかが該当する場合は、対応する値を使用しなければならず、そうでない場合は、独自の値を使用してもかまいません。
| Value | Description |
|---|---|
CONNECT | CONNECTメソッド。 |
DELETE | DELETEメソッド。 |
GET | GETメソッド。 |
HEAD | HEADメソッド。 |
OPTIONS | OPTIONSメソッド。 |
PATCH | PATCHメソッド。 |
POST | POSTメソッド。 |
PUT | PUTメソッド。 |
TRACE | TRACEメソッド。 |
_OTHER | 計装が事前に知らないHTTPメソッド。 |
メトリクス: http.client.active_requests
| Name | Instrument Type | Unit (UCUM) | Description |
|---|---|---|---|
http.client.active_requests | UpDownCounter | {request} | アクティブなHTTPリクエスト数。[1] |
[1]: Meterの名前: System.Net.Http; 追加されたバージョン: .NET 8.0
| Attribute | Type | Description | Examples | Requirement Level |
|---|---|---|---|---|
http.request.method | string | HTTPリクエストのメソッド。[1] | GET; POST; HEAD | Recommended |
server.address | string | HTTPリクエストの送信先である「URIオリジン」のホスト識別子。[2] | example.com; 10.1.2.80; /tmp/my.sock | Required |
server.port | int | HTTPリクエストの送信先である「URIオリジン」のポート識別子。[3] | 80; 8080; 443 | Conditionally Required: [4] |
url.scheme | string | 使用されているプロトコルを識別するURIスキームの構成要素。 | http; https; ftp | Recommended |
[1]: HTTPリクエストメソッドの値は、RFC9110に列挙されている「既知の」メソッドと、RFC5789で定義されているPATCHメソッドのいずれかです。
HTTPリクエストメソッドが不明な場合、http.request.method属性は_OTHERに設定されます。現時点では、既知のHTTPメソッドの一覧を上書きすることはできません。
[2]: HTTPクライアントリクエストが、たとえばhttp://x.x.x.x:8080のようにIPアドレスに対して明示的に行われる場合、server.addressはそのIPアドレスx.x.x.xであるべきです(SHOULD)。DNSルックアップは使用すべきではありません(SHOULD NOT)。
[3]: クライアント側から観測し、かつ中間サーバーを介して通信している場合、server.portは、(利用可能であれば)プロキシなどの中間サーバーの背後にあるサーバーのポートを表すべきです(SHOULD)。
[4]: デフォルト値(httpスキームの場合は80、httpsの場合は443)でない場合。
http.request.methodには、次のよく知られた値の一覧があります。これらのいずれかが該当する場合は、対応する値を使用しなければならず、そうでない場合は、独自の値を使用してもかまいません。
| Value | Description |
|---|---|
CONNECT | CONNECTメソッド。 |
DELETE | DELETEメソッド。 |
GET | GETメソッド。 |
HEAD | HEADメソッド。 |
OPTIONS | OPTIONSメソッド。 |
PATCH | PATCHメソッド。 |
POST | POSTメソッド。 |
PUT | PUTメソッド。 |
TRACE | TRACEメソッド。 |
_OTHER | 計装が事前に知らないHTTPメソッド。 |
HTTPサーバー
すべてのHTTPサーバーメトリクスは、Microsoft.AspNetCore.Hosting Meterによって報告されます。
メトリクス: http.server.request.duration
最後のバイトまでの時間を計測します。このメトリクスは、共通のhttp.server.request.durationの定義に従います。
注記:
Meterの名前は
Microsoft.AspNetCore.Hostingです。ASP.NET Core 8.0で追加されたメトリクスです。
opt-inの
server.address属性とserver.port属性は報告されません。追加の属性:
aspnetcore.request.is_unhandledブール値属性は、リクエストがアプリケーションのパイプラインによって処理されなかった場合に報告されます。それ以外の場合は省略されます。
メトリクス: http.server.active_requests
サーバー上で現在アクティブなHTTPリクエスト数を計測します。このメトリクスは、共通のhttp.server.active_requestsの定義に従います。
注記:
- Meterの名前は
Microsoft.AspNetCore.Hostingです。 - opt-inの
server.address属性とserver.port属性は報告されません。 - ASP.NET Core 8.0で追加されたメトリクスです。