この記事は英語の原文を日本語に翻訳したものです。原文: 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の場合は443httpの場合は80)と一致する場合は報告されません。
  • url.schemeは常に報告されます。

メトリクス: http.client.open_connections

NameInstrument TypeUnit (UCUM)Description
http.client.open_connectionsUpDownCounter{connection}クライアント上で現在アクティブまたはアイドル状態の、送信方向のHTTP接続数。[1]

[1]: Meterの名前: System.Net.Http; 追加されたバージョン: .NET 8.0

AttributeTypeDescriptionExamplesRequirement Level
http.connection.statestringHTTP接続プール内のHTTP接続の状態。active; idleRequired
network.peer.addressstringソケット接続のリモートIPアドレス。10.1.2.80Recommended
network.protocol.versionstring接続プール内の接続に関連する、ネゴシエーション済みのプロトコルバージョン。[1]1.1; 2; 3Recommended
server.addressstringHTTPリクエストの送信先である「URIオリジン」のホスト識別子。[2]example.com; 10.1.2.80; /tmp/my.sockRequired
server.portintHTTPリクエストの送信先である「URIオリジン」のポート識別子。[3]80; 8080; 443Conditionally Required: [4]
url.schemestring使用されているプロトコルを識別するURIスキームの構成要素。http; https; ftpRecommended

[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スキームの場合は80httpsの場合は443)でない場合。

http.connection.stateは、次のいずれかでなければなりません。

ValueDescription
activeactive状態。
idleidle状態。

メトリクス: 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)。

NameInstrument TypeUnit (UCUM)Description
http.client.connection.durationHistograms正常に確立された送信方向のHTTP接続の持続時間。[1]

[1]: Meterの名前: System.Net.Http; 追加されたバージョン: .NET 8.0

AttributeTypeDescriptionExamplesRequirement Level
network.peer.addressstringネットワーク接続のピアアドレス(IPアドレスまたはUNIXドメインソケット名)。10.1.2.80; /tmp/my.sockRecommended
network.protocol.versionstring接続プール内の接続に関連する、ネゴシエーション済みのプロトコルバージョン。[1]1.1; 2; 3Recommended
server.addressstringHTTPリクエストの送信先である「URIオリジン」のホスト識別子。[2]example.com; 10.1.2.80; /tmp/my.sockRequired
server.portintHTTPリクエストの送信先である「URIオリジン」のポート識別子。[3]80; 8080; 443Conditionally Required: [4]
url.schemestring使用されているプロトコルを識別するURIスキームの構成要素。http; https; ftpRecommended

[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スキームの場合は80httpsの場合は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)。

NameInstrument TypeUnit (UCUM)Description
http.client.request.time_in_queueHistogramsリクエストが、利用可能な接続を待ってキューに滞在した時間。[1]

[1]: Meterの名前: System.Net.Http; 追加されたバージョン: .NET 8.0

AttributeTypeDescriptionExamplesRequirement Level
http.request.methodstringHTTPリクエストのメソッド。[1]GET; POST; HEADRecommended
network.protocol.versionstring接続プール内の接続に関連する、ネゴシエーション済みのプロトコルバージョン。[2]1.1; 2; 3Recommended
server.addressstringHTTPリクエストの送信先である「URIオリジン」のホスト識別子。[3]example.com; 10.1.2.80; /tmp/my.sockRequired
server.portintHTTPリクエストの送信先である「URIオリジン」のポート識別子。[4]80; 8080; 443Conditionally Required: [5]
url.schemestring使用されているプロトコルを識別するURIスキームの構成要素。http; https; ftpRecommended

[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スキームの場合は80httpsの場合は443)でない場合。

http.request.methodには、次のよく知られた値の一覧があります。これらのいずれかが該当する場合は、対応する値を使用しなければならず、そうでない場合は、独自の値を使用してもかまいません。

ValueDescription
CONNECTCONNECTメソッド。
DELETEDELETEメソッド。
GETGETメソッド。
HEADHEADメソッド。
OPTIONSOPTIONSメソッド。
PATCHPATCHメソッド。
POSTPOSTメソッド。
PUTPUTメソッド。
TRACETRACEメソッド。
_OTHER計装が事前に知らないHTTPメソッド。

メトリクス: http.client.active_requests

NameInstrument TypeUnit (UCUM)Description
http.client.active_requestsUpDownCounter{request}アクティブなHTTPリクエスト数。[1]

[1]: Meterの名前: System.Net.Http; 追加されたバージョン: .NET 8.0

AttributeTypeDescriptionExamplesRequirement Level
http.request.methodstringHTTPリクエストのメソッド。[1]GET; POST; HEADRecommended
server.addressstringHTTPリクエストの送信先である「URIオリジン」のホスト識別子。[2]example.com; 10.1.2.80; /tmp/my.sockRequired
server.portintHTTPリクエストの送信先である「URIオリジン」のポート識別子。[3]80; 8080; 443Conditionally Required: [4]
url.schemestring使用されているプロトコルを識別するURIスキームの構成要素。http; https; ftpRecommended

[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スキームの場合は80httpsの場合は443)でない場合。

http.request.methodには、次のよく知られた値の一覧があります。これらのいずれかが該当する場合は、対応する値を使用しなければならず、そうでない場合は、独自の値を使用してもかまいません。

ValueDescription
CONNECTCONNECTメソッド。
DELETEDELETEメソッド。
GETGETメソッド。
HEADHEADメソッド。
OPTIONSOPTIONSメソッド。
PATCHPATCHメソッド。
POSTPOSTメソッド。
PUTPUTメソッド。
TRACETRACEメソッド。
_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で追加されたメトリクスです。