この記事は英語の原文を日本語に翻訳したものです。原文: https://opentelemetry.io/docs/specs/semconv/http/http-metrics/
翻訳元: open-telemetry/semantic-conventions v1.44.0(コミット e10a930)
HTTPメトリクスに関するセマンティック規約
ステータス: Mixed
この節で説明する規約は、HTTP固有のものです。HTTP操作が発生すると、その操作についての洞察を提供するために、メトリクスイベントが生成され報告されます。メトリクスイベントにHTTP属性を追加することで、きめ細かいフィルタリングが可能になります。
免責事項: これらは初期のHTTPメトリクスInstrumentと属性であり、将来さらに追加される可能性があります。
[!IMPORTANT] この文書のv1.20.0 以前のバージョンを使っている既存のHTTP計装は、次に従うべきです。
- HTTPセマンティック規約が安定版として宣言されるまで、デフォルトで発行するHTTPまたはネットワーキング規約のバージョンを変更してはなりません(SHOULD NOT) (HTTPの安定化には、HTTP計装で併せて使われる、ネットワーキング規約の中核部分の安定化も含まれます)。 規約には、属性、メトリクス名、スパン名、計測単位などが含まれますが、これらに限定されません。
- 既存のメジャーバージョンにおいて、カテゴリー別の値をカンマ区切りで列挙するリストとして環境変数
OTEL_SEMCONV_STABILITY_OPT_INを導入すべきです(SHOULD) (例: http、databases、messaging)。値の一覧は次のとおりです。
http- 新しい安定版のHTTP・ネットワーキング規約を発行し、それまで計装が発行していた古い実験的なHTTP・ネットワーキング規約の発行を停止します。http/dup- 古い規約と安定版の規約の両方を発行し、円滑な移行を可能にします。- これらの値がいずれも指定されていない場合のデフォルトの動作は、その計装がそれまで発行していた古い実験的なHTTP・ネットワーキング規約のバージョンをそのまま発行し続けることです。
- 注記: 両方の値が指定されている場合、
http/dupはhttpよりも優先されます。- 両方の規約セットを発行し始めてから少なくとも6か月間は、既存のメジャーバージョンを(少なくともセキュリティパッチの適用という形で)維持すべきです(SHOULD)。
- 次のメジャーバージョンでは、この環境変数を削除すべきです(SHOULD)。
HTTPサーバー
メトリクス: http.server.request.duration
このメトリクスはRecommendedです。
このメトリクスがHTTPサーバースパンと合わせて報告される場合、メトリクスの値はHTTPサーバースパンの処理時間と同じにすべきです(SHOULD)。
このメトリクスは、[ 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 | Stability | Entity Associations |
|---|---|---|---|---|---|
http.server.request.duration | Histogram | s | HTTPサーバーリクエストの処理時間。 |
Attributes:
| Key | Stability | Requirement Level | Value Type | Description | Example Values |
|---|---|---|---|---|---|
http.request.method | Required | string | HTTPリクエストメソッド。[1] | GET; POST; HEAD | |
url.scheme | Required | string | 使用されたプロトコルを識別するURIスキームコンポーネント。[2] | http; https | |
error.type | Conditionally Required リクエストがエラーで終了した場合。 | string | 操作が終了したエラーのクラスを記述します。[3] | timeout; java.net.UnknownHostException; server_certificate_invalid; 500 | |
http.response.status_code | Conditionally Required 送受信された場合に限る。 | int | HTTPレスポンスステータスコード。 | 200 | |
http.route | Conditionally Required 利用可能な場合に限る | string | リクエストにマッチしたルートテンプレート。これは低カーディナリティでなければならず(MUST)、すべての静的パスセグメントを含め、動的パスセグメントはプレースホルダーで表現しなければなりません(MUST)。[4] | /users/:userID?; my-controller/my-action/{id?} | |
network.protocol.name | Conditionally Required [5] | string | OSIアプリケーション層またはそれに相当する非OSI層。[6] | http; spdy | |
network.protocol.version | Recommended | string | ネットワーク通信で使用されているプロトコルの実際のバージョン。[7] | 1.0; 1.1; 2; 3 | |
server.address | Opt-In | string | リクエストを受信したローカルHTTPサーバーの名前。[8] | example.com; 10.1.2.80; /tmp/my.sock | |
server.port | Opt-In | int | リクエストを受信したローカルHTTPサーバーのポート。[9] | 80; 8080; 443 | |
user_agent.synthetic.type | Opt-In | string | 合成トラフィックのカテゴリー(テストやボットなど)を指定します。[10] | bot; test |
[1] http.request.method: HTTPリクエストメソッドの値は、計装に「既知」であるべきです(SHOULD)。
デフォルトでは、この規約はRFC9110に列挙されているメソッド、RFC5789で定義されたPATCHメソッド、httpbis-safe-method-w-bodyで定義されたQUERYメソッドを「既知の」メソッドとして定義します。
HTTPリクエストメソッドが計装に既知でない場合、http.request.method 属性を _OTHER に設定しなければなりません(MUST)。
HTTP計装が有効なHTTPリクエストメソッドを _OTHER に変換してしまう可能性がある場合、既知のHTTPメソッドの一覧を上書きする方法を提供しなければなりません(MUST)。
この上書きが環境変数を介して行われる場合、その環境変数は OTEL_INSTRUMENTATION_HTTP_KNOWN_METHODS という名前でなければならず(MUST)、大文字小文字を区別する既知のHTTPメソッドをカンマ区切りのリストとしてサポートしなければなりません(MUST)。
この上書きが宣言的設定を介して行われる場合、
.instrumentation/development.general.http.client や .instrumentation/development.general.http.server の下にある known_methods プロパティ(最小要素数0の、大文字小文字を区別する文字列の配列)でその一覧を設定可能にしなければなりません(MUST)。
いずれの場合も、この一覧は既知のメソッドのデフォルトの完全な上書きでなければならず(MUST)、デフォルトに追加する既知のメソッドの一覧ではありません。
HTTPメソッド名は大文字小文字を区別し、http.request.method 属性の値は既知のHTTPメソッド名に正確に一致しなければなりません(MUST)。
HTTPメソッドを大文字小文字を区別しないものとして扱う特定のWebフレームワーク向けの計装は、正規化された等価な値を設定すべきです(SHOULD)。
そのようなトレーシング計装は、http.request.method_original にも元の値を設定しなければなりません(MUST)。
[2] url.scheme: 既知の場合(例えばForwarded#proto、X-Forwarded-Proto、または類似のヘッダーから)、元のクライアントリクエストのスキームです。それ以外の場合、直近のピアリクエストのスキームです。
[3] error.type: レスポンスステータスコードの送受信前にエラーでリクエストが失敗した場合、error.type は例外の型(該当する場合はその完全修飾クラス名)またはコンポーネント固有の低カーディナリティなエラー識別子に設定すべきです(SHOULD)。
レスポンスステータスコードが送受信され、かつそのステータスがHTTPスパンステータスの定義に従ってエラーを示す場合、error.type はステータスコード番号(文字列として表現)、(発生していれば)例外の型、またはコンポーネント固有のエラー識別子に設定すべきです(SHOULD)。
error.type の値は予測可能であるべきであり(SHOULD)、低カーディナリティであるべきです(SHOULD)。
計装は、報告するエラーの一覧を文書化すべきです(SHOULD)。
1つの計装ライブラリ内での error.type のカーディナリティは低くあるべきですが(SHOULD)、複数の計装ライブラリやアプリケーションからのデータを集約するテレメトリーの利用者は、追加のフィルターが適用されないクエリ時には error.type が高カーディナリティになることを想定しておくべきです。
リクエストが正常に完了した場合、計装は error.type を設定するべきではありません(SHOULD NOT)。
[4] http.route: HTTPサーバーフレームワークがこれをサポートしない場合、設定してはなりません(MUST NOT)。route属性は低カーディナリティであるべきであり、URIパスはそれに代わることができないためです。
アプリケーションルートがあれば、それを含めるべきです(SHOULD)(アプリケーションルートを参照)。
静的パスセグメントとは、固定された低カーディナリティな値を持つ、ルートテンプレートの一部です。
これには、/users/ のようなリテラル文字列や、{controller} や {action} のような、有限かつ事前定義された値の集合に制約されたプレースホルダーが含まれます。
動的パスセグメントとは、静的パスセグメントのような事前定義された一覧に制約されない、高カーディナリティになりうる値のプレースホルダーです。
計装は、対応するWebフレームワークが提供するルーティング情報を使用すべきです(SHOULD)。 最も精度の高いルーティング情報のソースを選択すべきであり(SHOULD)、カスタムのルートフォーマットをサポートしてもかまいません(MAY)。 計装は、使用しているフォーマットとルート文字列を取得するために使用しているAPIを文書化すべきです(SHOULD)。
[5] network.protocol.name: http ではなく、かつ network.protocol.version が設定されている場合。
[6] network.protocol.name: 値は小文字に正規化すべきです(SHOULD)。
[7] network.protocol.version: プロトコルバージョンが(例えばALPNを使って)ネゴシエーションされる場合、この属性はネゴシエーションされたバージョンに設定すべきです(SHOULD)。実際のプロトコルバージョンが不明な場合、この属性は設定するべきではありません(SHOULD NOT)。
[8] server.address: server.address と server.port 属性の設定を参照してください。
[!WARNING] この属性はHTTPヘッダーに基づいているため、オプトインすることで攻撃者がカーディナリティ制限を引き起こし、メトリクスの有用性を低下させる可能性があります。
[9] server.port: server.address と server.port 属性の設定を参照してください。
[!WARNING] この属性はHTTPヘッダーに基づいているため、オプトインすることで攻撃者がカーディナリティ制限を引き起こし、メトリクスの有用性を低下させる可能性があります。
[10] user_agent.synthetic.type: この属性は、user_agent.original 属性の内容から導出されてもかまいません(MAY)。この属性を設定するコンポーネントは、合成ボットトラフィックまたはテストトラフィックとみなすものを判断する責任を負います。この属性は自己識別のために設定することもできますし、合成リクエストの結果として生成されたと検知されたテレメトリーに設定することもできます。この属性は、正規のクライアントトラフィックとボットまたはテストによって生成された合成トラフィックを区別するのに役立ちます。
error.type には、次のよく知られた値の一覧があります。いずれかが該当する場合はその値を使用しなければならず(MUST)、それ以外の場合は独自の値を使ってもかまいません(MAY)。
| Value | Description | Stability |
|---|---|---|
_OTHER | 計装がカスタム値を定義していない場合に使用されるフォールバックのエラー値。 |
http.request.method には、次のよく知られた値の一覧があります。いずれかが該当する場合はその値を使用しなければならず(MUST)、それ以外の場合は独自の値を使ってもかまいません(MAY)。
| Value | Description | Stability |
|---|---|---|
_OTHER | 計装が事前に知らないHTTPメソッド。 | |
CONNECT | CONNECTメソッド。 | |
DELETE | DELETEメソッド。 | |
GET | GETメソッド。 | |
HEAD | HEADメソッド。 | |
OPTIONS | OPTIONSメソッド。 | |
PATCH | PATCHメソッド。 | |
POST | POSTメソッド。 | |
PUT | PUTメソッド。 | |
QUERY | QUERYメソッド。 | |
TRACE | TRACEメソッド。 |
user_agent.synthetic.type には、次のよく知られた値の一覧があります。いずれかが該当する場合はその値を使用しなければならず(MUST)、それ以外の場合は独自の値を使ってもかまいません(MAY)。
| Value | Description | Stability |
|---|---|---|
bot | ボットによるソース。 | |
test | テストによる合成ソース。 |
メトリクス: http.server.active_requests
このメトリクスはOpt-Inです。
| Name | Instrument Type | Unit (UCUM) | Description | Stability | Entity Associations |
|---|---|---|---|---|---|
http.server.active_requests | UpDownCounter | {request} | アクティブなHTTPサーバーリクエストの数。 |
Attributes:
| Key | Stability | Requirement Level | Value Type | Description | Example Values |
|---|---|---|---|---|---|
http.request.method | Required | string | HTTPリクエストメソッド。[1] | GET; POST; HEAD | |
url.scheme | Required | string | 使用されたプロトコルを識別するURIスキームコンポーネント。 | http; https | |
server.address | Opt-In | string | リクエストを受信したローカルHTTPサーバーの名前。[2] | example.com; 10.1.2.80; /tmp/my.sock | |
server.port | Opt-In | int | リクエストを受信したローカルHTTPサーバーのポート。[3] | 80; 8080; 443 |
[1] http.request.method: HTTPリクエストメソッドの値は、計装に「既知」であるべきです(SHOULD)。
デフォルトでは、この規約はRFC9110に列挙されているメソッド、RFC5789で定義されたPATCHメソッド、httpbis-safe-method-w-bodyで定義されたQUERYメソッドを「既知の」メソッドとして定義します。
HTTPリクエストメソッドが計装に既知でない場合、http.request.method 属性を _OTHER に設定しなければなりません(MUST)。
HTTP計装が有効なHTTPリクエストメソッドを _OTHER に変換してしまう可能性がある場合、既知のHTTPメソッドの一覧を上書きする方法を提供しなければなりません(MUST)。
この上書きが環境変数を介して行われる場合、その環境変数は OTEL_INSTRUMENTATION_HTTP_KNOWN_METHODS という名前でなければならず(MUST)、大文字小文字を区別する既知のHTTPメソッドをカンマ区切りのリストとしてサポートしなければなりません(MUST)。
この上書きが宣言的設定を介して行われる場合、
.instrumentation/development.general.http.client や .instrumentation/development.general.http.server の下にある known_methods プロパティ(最小要素数0の、大文字小文字を区別する文字列の配列)でその一覧を設定可能にしなければなりません(MUST)。
いずれの場合も、この一覧は既知のメソッドのデフォルトの完全な上書きでなければならず(MUST)、デフォルトに追加する既知のメソッドの一覧ではありません。
HTTPメソッド名は大文字小文字を区別し、http.request.method 属性の値は既知のHTTPメソッド名に正確に一致しなければなりません(MUST)。
HTTPメソッドを大文字小文字を区別しないものとして扱う特定のWebフレームワーク向けの計装は、正規化された等価な値を設定すべきです(SHOULD)。
そのようなトレーシング計装は、http.request.method_original にも元の値を設定しなければなりません(MUST)。
[2] server.address: server.address と server.port 属性の設定を参照してください。
[!WARNING] この属性はHTTPヘッダーに基づいているため、オプトインすることで攻撃者がカーディナリティ制限を引き起こし、メトリクスの有用性を低下させる可能性があります。
[3] server.port: server.address と server.port 属性の設定を参照してください。
[!WARNING] この属性はHTTPヘッダーに基づいているため、オプトインすることで攻撃者がカーディナリティ制限を引き起こし、メトリクスの有用性を低下させる可能性があります。
http.request.method には、次のよく知られた値の一覧があります。いずれかが該当する場合はその値を使用しなければならず(MUST)、それ以外の場合は独自の値を使ってもかまいません(MAY)。
| Value | Description | Stability |
|---|---|---|
_OTHER | 計装が事前に知らないHTTPメソッド。 | |
CONNECT | CONNECTメソッド。 | |
DELETE | DELETEメソッド。 | |
GET | GETメソッド。 | |
HEAD | HEADメソッド。 | |
OPTIONS | OPTIONSメソッド。 | |
PATCH | PATCHメソッド。 | |
POST | POSTメソッド。 | |
PUT | PUTメソッド。 | |
QUERY | QUERYメソッド。 | |
TRACE | TRACEメソッド。 |
メトリクス: http.server.request.body.size
このメトリクスはOpt-Inです。
| Name | Instrument Type | Unit (UCUM) | Description | Stability | Entity Associations |
|---|---|---|---|---|---|
http.server.request.body.size | Histogram | By | HTTPサーバーリクエストボディのサイズ。[1] |
[1]: リクエストのペイロードボディのバイト数。これはヘッダーを除いて転送されたバイト数であり、多くの場合(常にではありませんが)Content-Lengthヘッダーとして存在します。転送エンコーディングを使用するリクエストの場合、これは圧縮後のサイズであるべきです。
Attributes:
| Key | Stability | Requirement Level | Value Type | Description | Example Values |
|---|---|---|---|---|---|
http.request.method | Required | string | HTTPリクエストメソッド。[1] | GET; POST; HEAD | |
url.scheme | Required | string | 使用されたプロトコルを識別するURIスキームコンポーネント。[2] | http; https | |
error.type | Conditionally Required リクエストがエラーで終了した場合。 | string | 操作が終了したエラーのクラスを記述します。[3] | timeout; java.net.UnknownHostException; server_certificate_invalid; 500 | |
http.response.status_code | Conditionally Required 送受信された場合に限る。 | int | HTTPレスポンスステータスコード。 | 200 | |
http.route | Conditionally Required 利用可能な場合に限る | string | リクエストにマッチしたルートテンプレート。これは低カーディナリティでなければならず(MUST)、すべての静的パスセグメントを含め、動的パスセグメントはプレースホルダーで表現しなければなりません(MUST)。[4] | /users/:userID?; my-controller/my-action/{id?} | |
network.protocol.name | Conditionally Required [5] | string | OSIアプリケーション層またはそれに相当する非OSI層。[6] | http; spdy | |
network.protocol.version | Recommended | string | ネットワーク通信で使用されているプロトコルの実際のバージョン。[7] | 1.0; 1.1; 2; 3 | |
server.address | Opt-In | string | リクエストを受信したローカルHTTPサーバーの名前。[8] | example.com; 10.1.2.80; /tmp/my.sock | |
server.port | Opt-In | int | リクエストを受信したローカルHTTPサーバーのポート。[9] | 80; 8080; 443 | |
user_agent.synthetic.type | Opt-In | string | 合成トラフィックのカテゴリー(テストやボットなど)を指定します。[10] | bot; test |
[1] http.request.method: HTTPリクエストメソッドの値は、計装に「既知」であるべきです(SHOULD)。
デフォルトでは、この規約はRFC9110に列挙されているメソッド、RFC5789で定義されたPATCHメソッド、httpbis-safe-method-w-bodyで定義されたQUERYメソッドを「既知の」メソッドとして定義します。
HTTPリクエストメソッドが計装に既知でない場合、http.request.method 属性を _OTHER に設定しなければなりません(MUST)。
HTTP計装が有効なHTTPリクエストメソッドを _OTHER に変換してしまう可能性がある場合、既知のHTTPメソッドの一覧を上書きする方法を提供しなければなりません(MUST)。
この上書きが環境変数を介して行われる場合、その環境変数は OTEL_INSTRUMENTATION_HTTP_KNOWN_METHODS という名前でなければならず(MUST)、大文字小文字を区別する既知のHTTPメソッドをカンマ区切りのリストとしてサポートしなければなりません(MUST)。
この上書きが宣言的設定を介して行われる場合、
.instrumentation/development.general.http.client や .instrumentation/development.general.http.server の下にある known_methods プロパティ(最小要素数0の、大文字小文字を区別する文字列の配列)でその一覧を設定可能にしなければなりません(MUST)。
いずれの場合も、この一覧は既知のメソッドのデフォルトの完全な上書きでなければならず(MUST)、デフォルトに追加する既知のメソッドの一覧ではありません。
HTTPメソッド名は大文字小文字を区別し、http.request.method 属性の値は既知のHTTPメソッド名に正確に一致しなければなりません(MUST)。
HTTPメソッドを大文字小文字を区別しないものとして扱う特定のWebフレームワーク向けの計装は、正規化された等価な値を設定すべきです(SHOULD)。
そのようなトレーシング計装は、http.request.method_original にも元の値を設定しなければなりません(MUST)。
[2] url.scheme: 既知の場合(例えばForwarded#proto、X-Forwarded-Proto、または類似のヘッダーから)、元のクライアントリクエストのスキームです。それ以外の場合、直近のピアリクエストのスキームです。
[3] error.type: レスポンスステータスコードの送受信前にエラーでリクエストが失敗した場合、error.type は例外の型(該当する場合はその完全修飾クラス名)またはコンポーネント固有の低カーディナリティなエラー識別子に設定すべきです(SHOULD)。
レスポンスステータスコードが送受信され、かつそのステータスがHTTPスパンステータスの定義に従ってエラーを示す場合、error.type はステータスコード番号(文字列として表現)、(発生していれば)例外の型、またはコンポーネント固有のエラー識別子に設定すべきです(SHOULD)。
error.type の値は予測可能であるべきであり(SHOULD)、低カーディナリティであるべきです(SHOULD)。
計装は、報告するエラーの一覧を文書化すべきです(SHOULD)。
1つの計装ライブラリ内での error.type のカーディナリティは低くあるべきですが(SHOULD)、複数の計装ライブラリやアプリケーションからのデータを集約するテレメトリーの利用者は、追加のフィルターが適用されないクエリ時には error.type が高カーディナリティになることを想定しておくべきです。
リクエストが正常に完了した場合、計装は error.type を設定するべきではありません(SHOULD NOT)。
[4] http.route: HTTPサーバーフレームワークがこれをサポートしない場合、設定してはなりません(MUST NOT)。route属性は低カーディナリティであるべきであり、URIパスはそれに代わることができないためです。
アプリケーションルートがあれば、それを含めるべきです(SHOULD)(アプリケーションルートを参照)。
静的パスセグメントとは、固定された低カーディナリティな値を持つ、ルートテンプレートの一部です。
これには、/users/ のようなリテラル文字列や、{controller} や {action} のような、有限かつ事前定義された値の集合に制約されたプレースホルダーが含まれます。
動的パスセグメントとは、静的パスセグメントのような事前定義された一覧に制約されない、高カーディナリティになりうる値のプレースホルダーです。
計装は、対応するWebフレームワークが提供するルーティング情報を使用すべきです(SHOULD)。 最も精度の高いルーティング情報のソースを選択すべきであり(SHOULD)、カスタムのルートフォーマットをサポートしてもかまいません(MAY)。 計装は、使用しているフォーマットとルート文字列を取得するために使用しているAPIを文書化すべきです(SHOULD)。
[5] network.protocol.name: http ではなく、かつ network.protocol.version が設定されている場合。
[6] network.protocol.name: 値は小文字に正規化すべきです(SHOULD)。
[7] network.protocol.version: プロトコルバージョンが(例えばALPNを使って)ネゴシエーションされる場合、この属性はネゴシエーションされたバージョンに設定すべきです(SHOULD)。実際のプロトコルバージョンが不明な場合、この属性は設定するべきではありません(SHOULD NOT)。
[8] server.address: server.address と server.port 属性の設定を参照してください。
[!WARNING] この属性はHTTPヘッダーに基づいているため、オプトインすることで攻撃者がカーディナリティ制限を引き起こし、メトリクスの有用性を低下させる可能性があります。
[9] server.port: server.address と server.port 属性の設定を参照してください。
[!WARNING] この属性はHTTPヘッダーに基づいているため、オプトインすることで攻撃者がカーディナリティ制限を引き起こし、メトリクスの有用性を低下させる可能性があります。
[10] user_agent.synthetic.type: この属性は、user_agent.original 属性の内容から導出されてもかまいません(MAY)。この属性を設定するコンポーネントは、合成ボットトラフィックまたはテストトラフィックとみなすものを判断する責任を負います。この属性は自己識別のために設定することもできますし、合成リクエストの結果として生成されたと検知されたテレメトリーに設定することもできます。この属性は、正規のクライアントトラフィックとボットまたはテストによって生成された合成トラフィックを区別するのに役立ちます。
error.type には、次のよく知られた値の一覧があります。いずれかが該当する場合はその値を使用しなければならず(MUST)、それ以外の場合は独自の値を使ってもかまいません(MAY)。
| Value | Description | Stability |
|---|---|---|
_OTHER | 計装がカスタム値を定義していない場合に使用されるフォールバックのエラー値。 |
http.request.method には、次のよく知られた値の一覧があります。いずれかが該当する場合はその値を使用しなければならず(MUST)、それ以外の場合は独自の値を使ってもかまいません(MAY)。
| Value | Description | Stability |
|---|---|---|
_OTHER | 計装が事前に知らないHTTPメソッド。 | |
CONNECT | CONNECTメソッド。 | |
DELETE | DELETEメソッド。 | |
GET | GETメソッド。 | |
HEAD | HEADメソッド。 | |
OPTIONS | OPTIONSメソッド。 | |
PATCH | PATCHメソッド。 | |
POST | POSTメソッド。 | |
PUT | PUTメソッド。 | |
QUERY | QUERYメソッド。 | |
TRACE | TRACEメソッド。 |
user_agent.synthetic.type には、次のよく知られた値の一覧があります。いずれかが該当する場合はその値を使用しなければならず(MUST)、それ以外の場合は独自の値を使ってもかまいません(MAY)。
| Value | Description | Stability |
|---|---|---|
bot | ボットによるソース。 | |
test | テストによる合成ソース。 |
メトリクス: http.server.response.body.size
このメトリクスはOpt-Inです。
| Name | Instrument Type | Unit (UCUM) | Description | Stability | Entity Associations |
|---|---|---|---|---|---|
http.server.response.body.size | Histogram | By | HTTPサーバーレスポンスボディのサイズ。[1] |
[1]: レスポンスのペイロードボディのバイト数。これはヘッダーを除いて転送されたバイト数であり、多くの場合(常にではありませんが)Content-Lengthヘッダーとして存在します。転送エンコーディングを使用するリクエストの場合、これは圧縮後のサイズであるべきです。
Attributes:
| Key | Stability | Requirement Level | Value Type | Description | Example Values |
|---|---|---|---|---|---|
http.request.method | Required | string | HTTPリクエストメソッド。[1] | GET; POST; HEAD | |
url.scheme | Required | string | 使用されたプロトコルを識別するURIスキームコンポーネント。[2] | http; https | |
error.type | Conditionally Required リクエストがエラーで終了した場合。 | string | 操作が終了したエラーのクラスを記述します。[3] | timeout; java.net.UnknownHostException; server_certificate_invalid; 500 | |
http.response.status_code | Conditionally Required 送受信された場合に限る。 | int | HTTPレスポンスステータスコード。 | 200 | |
http.route | Conditionally Required 利用可能な場合に限る | string | リクエストにマッチしたルートテンプレート。これは低カーディナリティでなければならず(MUST)、すべての静的パスセグメントを含め、動的パスセグメントはプレースホルダーで表現しなければなりません(MUST)。[4] | /users/:userID?; my-controller/my-action/{id?} | |
network.protocol.name | Conditionally Required [5] | string | OSIアプリケーション層またはそれに相当する非OSI層。[6] | http; spdy | |
network.protocol.version | Recommended | string | ネットワーク通信で使用されているプロトコルの実際のバージョン。[7] | 1.0; 1.1; 2; 3 | |
server.address | Opt-In | string | リクエストを受信したローカルHTTPサーバーの名前。[8] | example.com; 10.1.2.80; /tmp/my.sock | |
server.port | Opt-In | int | リクエストを受信したローカルHTTPサーバーのポート。[9] | 80; 8080; 443 | |
user_agent.synthetic.type | Opt-In | string | 合成トラフィックのカテゴリー(テストやボットなど)を指定します。[10] | bot; test |
[1] http.request.method: HTTPリクエストメソッドの値は、計装に「既知」であるべきです(SHOULD)。
デフォルトでは、この規約はRFC9110に列挙されているメソッド、RFC5789で定義されたPATCHメソッド、httpbis-safe-method-w-bodyで定義されたQUERYメソッドを「既知の」メソッドとして定義します。
HTTPリクエストメソッドが計装に既知でない場合、http.request.method 属性を _OTHER に設定しなければなりません(MUST)。
HTTP計装が有効なHTTPリクエストメソッドを _OTHER に変換してしまう可能性がある場合、既知のHTTPメソッドの一覧を上書きする方法を提供しなければなりません(MUST)。
この上書きが環境変数を介して行われる場合、その環境変数は OTEL_INSTRUMENTATION_HTTP_KNOWN_METHODS という名前でなければならず(MUST)、大文字小文字を区別する既知のHTTPメソッドをカンマ区切りのリストとしてサポートしなければなりません(MUST)。
この上書きが宣言的設定を介して行われる場合、
.instrumentation/development.general.http.client や .instrumentation/development.general.http.server の下にある known_methods プロパティ(最小要素数0の、大文字小文字を区別する文字列の配列)でその一覧を設定可能にしなければなりません(MUST)。
いずれの場合も、この一覧は既知のメソッドのデフォルトの完全な上書きでなければならず(MUST)、デフォルトに追加する既知のメソッドの一覧ではありません。
HTTPメソッド名は大文字小文字を区別し、http.request.method 属性の値は既知のHTTPメソッド名に正確に一致しなければなりません(MUST)。
HTTPメソッドを大文字小文字を区別しないものとして扱う特定のWebフレームワーク向けの計装は、正規化された等価な値を設定すべきです(SHOULD)。
そのようなトレーシング計装は、http.request.method_original にも元の値を設定しなければなりません(MUST)。
[2] url.scheme: 既知の場合(例えばForwarded#proto、X-Forwarded-Proto、または類似のヘッダーから)、元のクライアントリクエストのスキームです。それ以外の場合、直近のピアリクエストのスキームです。
[3] error.type: レスポンスステータスコードの送受信前にエラーでリクエストが失敗した場合、error.type は例外の型(該当する場合はその完全修飾クラス名)またはコンポーネント固有の低カーディナリティなエラー識別子に設定すべきです(SHOULD)。
レスポンスステータスコードが送受信され、かつそのステータスがHTTPスパンステータスの定義に従ってエラーを示す場合、error.type はステータスコード番号(文字列として表現)、(発生していれば)例外の型、またはコンポーネント固有のエラー識別子に設定すべきです(SHOULD)。
error.type の値は予測可能であるべきであり(SHOULD)、低カーディナリティであるべきです(SHOULD)。
計装は、報告するエラーの一覧を文書化すべきです(SHOULD)。
1つの計装ライブラリ内での error.type のカーディナリティは低くあるべきですが(SHOULD)、複数の計装ライブラリやアプリケーションからのデータを集約するテレメトリーの利用者は、追加のフィルターが適用されないクエリ時には error.type が高カーディナリティになることを想定しておくべきです。
リクエストが正常に完了した場合、計装は error.type を設定するべきではありません(SHOULD NOT)。
[4] http.route: HTTPサーバーフレームワークがこれをサポートしない場合、設定してはなりません(MUST NOT)。route属性は低カーディナリティであるべきであり、URIパスはそれに代わることができないためです。
アプリケーションルートがあれば、それを含めるべきです(SHOULD)(アプリケーションルートを参照)。
静的パスセグメントとは、固定された低カーディナリティな値を持つ、ルートテンプレートの一部です。
これには、/users/ のようなリテラル文字列や、{controller} や {action} のような、有限かつ事前定義された値の集合に制約されたプレースホルダーが含まれます。
動的パスセグメントとは、静的パスセグメントのような事前定義された一覧に制約されない、高カーディナリティになりうる値のプレースホルダーです。
計装は、対応するWebフレームワークが提供するルーティング情報を使用すべきです(SHOULD)。 最も精度の高いルーティング情報のソースを選択すべきであり(SHOULD)、カスタムのルートフォーマットをサポートしてもかまいません(MAY)。 計装は、使用しているフォーマットとルート文字列を取得するために使用しているAPIを文書化すべきです(SHOULD)。
[5] network.protocol.name: http ではなく、かつ network.protocol.version が設定されている場合。
[6] network.protocol.name: 値は小文字に正規化すべきです(SHOULD)。
[7] network.protocol.version: プロトコルバージョンが(例えばALPNを使って)ネゴシエーションされる場合、この属性はネゴシエーションされたバージョンに設定すべきです(SHOULD)。実際のプロトコルバージョンが不明な場合、この属性は設定するべきではありません(SHOULD NOT)。
[8] server.address: server.address と server.port 属性の設定を参照してください。
[!WARNING] この属性はHTTPヘッダーに基づいているため、オプトインすることで攻撃者がカーディナリティ制限を引き起こし、メトリクスの有用性を低下させる可能性があります。
[9] server.port: server.address と server.port 属性の設定を参照してください。
[!WARNING] この属性はHTTPヘッダーに基づいているため、オプトインすることで攻撃者がカーディナリティ制限を引き起こし、メトリクスの有用性を低下させる可能性があります。
[10] user_agent.synthetic.type: この属性は、user_agent.original 属性の内容から導出されてもかまいません(MAY)。この属性を設定するコンポーネントは、合成ボットトラフィックまたはテストトラフィックとみなすものを判断する責任を負います。この属性は自己識別のために設定することもできますし、合成リクエストの結果として生成されたと検知されたテレメトリーに設定することもできます。この属性は、正規のクライアントトラフィックとボットまたはテストによって生成された合成トラフィックを区別するのに役立ちます。
error.type には、次のよく知られた値の一覧があります。いずれかが該当する場合はその値を使用しなければならず(MUST)、それ以外の場合は独自の値を使ってもかまいません(MAY)。
| Value | Description | Stability |
|---|---|---|
_OTHER | 計装がカスタム値を定義していない場合に使用されるフォールバックのエラー値。 |
http.request.method には、次のよく知られた値の一覧があります。いずれかが該当する場合はその値を使用しなければならず(MUST)、それ以外の場合は独自の値を使ってもかまいません(MAY)。
| Value | Description | Stability |
|---|---|---|
_OTHER | 計装が事前に知らないHTTPメソッド。 | |
CONNECT | CONNECTメソッド。 | |
DELETE | DELETEメソッド。 | |
GET | GETメソッド。 | |
HEAD | HEADメソッド。 | |
OPTIONS | OPTIONSメソッド。 | |
PATCH | PATCHメソッド。 | |
POST | POSTメソッド。 | |
PUT | PUTメソッド。 | |
QUERY | QUERYメソッド。 | |
TRACE | TRACEメソッド。 |
user_agent.synthetic.type には、次のよく知られた値の一覧があります。いずれかが該当する場合はその値を使用しなければならず(MUST)、それ以外の場合は独自の値を使ってもかまいません(MAY)。
| Value | Description | Stability |
|---|---|---|
bot | ボットによるソース。 | |
test | テストによる合成ソース。 |
HTTPクライアント
メトリクス: http.client.request.duration
このメトリクスはRecommendedです。
このメトリクスがHTTPクライアントスパンと合わせて報告される場合、メトリクスの値はHTTPクライアントスパンの処理時間と同じにすべきです(SHOULD)。
このメトリクスは、[ 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 | Stability | Entity Associations |
|---|---|---|---|---|---|
http.client.request.duration | Histogram | s | HTTPクライアントリクエストの処理時間。 |
Attributes:
| Key | Stability | Requirement Level | Value Type | Description | Example Values |
|---|---|---|---|---|---|
http.request.method | Required | string | HTTPリクエストメソッド。[1] | GET; POST; HEAD | |
server.address | Required | string | 利用可能であればリバースDNSルックアップなしのサーバードメイン名。それ以外の場合はIPアドレスまたはUNIXドメインソケット名。[2] | example.com; 10.1.2.80; /tmp/my.sock | |
server.port | Required | int | サーバーのポート番号。[3] | 80; 8080; 443 | |
error.type | Conditionally Required リクエストがエラーで終了した場合。 | string | 操作が終了したエラーのクラスを記述します。[4] | timeout; java.net.UnknownHostException; server_certificate_invalid; 500 | |
http.response.status_code | Conditionally Required 送受信された場合に限る。 | int | HTTPレスポンスステータスコード。 | 200 | |
network.protocol.name | Conditionally Required [5] | string | OSIアプリケーション層またはそれに相当する非OSI層。[6] | http; spdy | |
network.protocol.version | Recommended | string | ネットワーク通信で使用されているプロトコルの実際のバージョン。[7] | 1.0; 1.1; 2; 3 | |
url.scheme | Opt-In | string | 使用されたプロトコルを識別するURIスキームコンポーネント。 | http; https | |
url.template | Opt-In | string | 絶対パス参照の低カーディナリティなテンプレート。[8] | /users/{id}; /users/:id; /users?id={id} |
[1] http.request.method: HTTPリクエストメソッドの値は、計装に「既知」であるべきです(SHOULD)。
デフォルトでは、この規約はRFC9110に列挙されているメソッド、RFC5789で定義されたPATCHメソッド、httpbis-safe-method-w-bodyで定義されたQUERYメソッドを「既知の」メソッドとして定義します。
HTTPリクエストメソッドが計装に既知でない場合、http.request.method 属性を _OTHER に設定しなければなりません(MUST)。
HTTP計装が有効なHTTPリクエストメソッドを _OTHER に変換してしまう可能性がある場合、既知のHTTPメソッドの一覧を上書きする方法を提供しなければなりません(MUST)。
この上書きが環境変数を介して行われる場合、その環境変数は OTEL_INSTRUMENTATION_HTTP_KNOWN_METHODS という名前でなければならず(MUST)、大文字小文字を区別する既知のHTTPメソッドをカンマ区切りのリストとしてサポートしなければなりません(MUST)。
この上書きが宣言的設定を介して行われる場合、
.instrumentation/development.general.http.client や .instrumentation/development.general.http.server の下にある known_methods プロパティ(最小要素数0の、大文字小文字を区別する文字列の配列)でその一覧を設定可能にしなければなりません(MUST)。
いずれの場合も、この一覧は既知のメソッドのデフォルトの完全な上書きでなければならず(MUST)、デフォルトに追加する既知のメソッドの一覧ではありません。
HTTPメソッド名は大文字小文字を区別し、http.request.method 属性の値は既知のHTTPメソッド名に正確に一致しなければなりません(MUST)。
HTTPメソッドを大文字小文字を区別しないものとして扱う特定のWebフレームワーク向けの計装は、正規化された等価な値を設定すべきです(SHOULD)。
そのようなトレーシング計装は、http.request.method_original にも元の値を設定しなければなりません(MUST)。
[2] server.address: HTTP/1.1において、リクエストターゲットがabsolute-formで渡される場合、server.address はリクエストターゲットのホストコンポーネントと一致すべきです(SHOULD)。
その他のすべての場合、server.address はHTTP/1.1における Host ヘッダーのホストコンポーネント、またはHTTP/2およびHTTP/3における :authority 疑似ヘッダーと一致すべきです(SHOULD)。
[3] server.port: HTTP/1.1において、リクエストターゲットがabsolute-formで渡される場合、server.port はリクエストターゲットのポートコンポーネントと一致すべきです(SHOULD)。
その他のすべての場合、server.port はHTTP/1.1における Host ヘッダーのポートコンポーネント、またはHTTP/2およびHTTP/3における :authority 疑似ヘッダーと一致すべきです(SHOULD)。
[4] error.type: レスポンスステータスコードの送受信前にエラーでリクエストが失敗した場合、error.type は例外の型(該当する場合はその完全修飾クラス名)またはコンポーネント固有の低カーディナリティなエラー識別子に設定すべきです(SHOULD)。
レスポンスステータスコードが送受信され、かつそのステータスがHTTPスパンステータスの定義に従ってエラーを示す場合、error.type はステータスコード番号(文字列として表現)、(発生していれば)例外の型、またはコンポーネント固有のエラー識別子に設定すべきです(SHOULD)。
error.type の値は予測可能であるべきであり(SHOULD)、低カーディナリティであるべきです(SHOULD)。
計装は、報告するエラーの一覧を文書化すべきです(SHOULD)。
1つの計装ライブラリ内での error.type のカーディナリティは低くあるべきですが(SHOULD)、複数の計装ライブラリやアプリケーションからのデータを集約するテレメトリーの利用者は、追加のフィルターが適用されないクエリ時には error.type が高カーディナリティになることを想定しておくべきです。
リクエストが正常に完了した場合、計装は error.type を設定するべきではありません(SHOULD NOT)。
[5] network.protocol.name: http ではなく、かつ network.protocol.version が設定されている場合。
[6] network.protocol.name: 値は小文字に正規化すべきです(SHOULD)。
[7] network.protocol.version: プロトコルバージョンが(例えばALPNを使って)ネゴシエーションされる場合、この属性はネゴシエーションされたバージョンに設定すべきです(SHOULD)。実際のプロトコルバージョンが不明な場合、この属性は設定するべきではありません(SHOULD NOT)。
[8] url.template: url.template は低カーディナリティでなければなりません(MUST)。通常HTTPクライアントでは利用できませんが、アプリケーションや専用のHTTP計装が知っている場合があります。
error.type には、次のよく知られた値の一覧があります。いずれかが該当する場合はその値を使用しなければならず(MUST)、それ以外の場合は独自の値を使ってもかまいません(MAY)。
| Value | Description | Stability |
|---|---|---|
_OTHER | 計装がカスタム値を定義していない場合に使用されるフォールバックのエラー値。 |
http.request.method には、次のよく知られた値の一覧があります。いずれかが該当する場合はその値を使用しなければならず(MUST)、それ以外の場合は独自の値を使ってもかまいません(MAY)。
| Value | Description | Stability |
|---|---|---|
_OTHER | 計装が事前に知らないHTTPメソッド。 | |
CONNECT | CONNECTメソッド。 | |
DELETE | DELETEメソッド。 | |
GET | GETメソッド。 | |
HEAD | HEADメソッド。 | |
OPTIONS | OPTIONSメソッド。 | |
PATCH | PATCHメソッド。 | |
POST | POSTメソッド。 | |
PUT | PUTメソッド。 | |
QUERY | QUERYメソッド。 | |
TRACE | TRACEメソッド。 |
メトリクス: http.client.request.body.size
このメトリクスはOpt-Inです。
| Name | Instrument Type | Unit (UCUM) | Description | Stability | Entity Associations |
|---|---|---|---|---|---|
http.client.request.body.size | Histogram | By | HTTPクライアントリクエストボディのサイズ。[1] |
[1]: リクエストのペイロードボディのバイト数。これはヘッダーを除いて転送されたバイト数であり、多くの場合(常にではありませんが)Content-Lengthヘッダーとして存在します。転送エンコーディングを使用するリクエストの場合、これは圧縮後のサイズであるべきです。
Attributes:
| Key | Stability | Requirement Level | Value Type | Description | Example Values |
|---|---|---|---|---|---|
http.request.method | Required | string | HTTPリクエストメソッド。[1] | GET; POST; HEAD | |
server.address | Required | string | 利用可能であればリバースDNSルックアップなしのサーバードメイン名。それ以外の場合はIPアドレスまたはUNIXドメインソケット名。[2] | example.com; 10.1.2.80; /tmp/my.sock | |
server.port | Required | int | サーバーのポート番号。[3] | 80; 8080; 443 | |
error.type | Conditionally Required リクエストがエラーで終了した場合。 | string | 操作が終了したエラーのクラスを記述します。[4] | timeout; java.net.UnknownHostException; server_certificate_invalid; 500 | |
http.response.status_code | Conditionally Required 送受信された場合に限る。 | int | HTTPレスポンスステータスコード。 | 200 | |
network.protocol.name | Conditionally Required [5] | string | OSIアプリケーション層またはそれに相当する非OSI層。[6] | http; spdy | |
url.template | Conditionally Required 利用可能な場合。 | string | 絶対パス参照の低カーディナリティなテンプレート。[7] | /users/{id}; /users/:id; /users?id={id} | |
network.protocol.version | Recommended | string | ネットワーク通信で使用されているプロトコルの実際のバージョン。[8] | 1.0; 1.1; 2; 3 | |
url.scheme | Opt-In | string | 使用されたプロトコルを識別するURIスキームコンポーネント。 | http; https |
[1] http.request.method: HTTPリクエストメソッドの値は、計装に「既知」であるべきです(SHOULD)。
デフォルトでは、この規約はRFC9110に列挙されているメソッド、RFC5789で定義されたPATCHメソッド、httpbis-safe-method-w-bodyで定義されたQUERYメソッドを「既知の」メソッドとして定義します。
HTTPリクエストメソッドが計装に既知でない場合、http.request.method 属性を _OTHER に設定しなければなりません(MUST)。
HTTP計装が有効なHTTPリクエストメソッドを _OTHER に変換してしまう可能性がある場合、既知のHTTPメソッドの一覧を上書きする方法を提供しなければなりません(MUST)。
この上書きが環境変数を介して行われる場合、その環境変数は OTEL_INSTRUMENTATION_HTTP_KNOWN_METHODS という名前でなければならず(MUST)、大文字小文字を区別する既知のHTTPメソッドをカンマ区切りのリストとしてサポートしなければなりません(MUST)。
この上書きが宣言的設定を介して行われる場合、
.instrumentation/development.general.http.client や .instrumentation/development.general.http.server の下にある known_methods プロパティ(最小要素数0の、大文字小文字を区別する文字列の配列)でその一覧を設定可能にしなければなりません(MUST)。
いずれの場合も、この一覧は既知のメソッドのデフォルトの完全な上書きでなければならず(MUST)、デフォルトに追加する既知のメソッドの一覧ではありません。
HTTPメソッド名は大文字小文字を区別し、http.request.method 属性の値は既知のHTTPメソッド名に正確に一致しなければなりません(MUST)。
HTTPメソッドを大文字小文字を区別しないものとして扱う特定のWebフレームワーク向けの計装は、正規化された等価な値を設定すべきです(SHOULD)。
そのようなトレーシング計装は、http.request.method_original にも元の値を設定しなければなりません(MUST)。
[2] server.address: HTTP/1.1において、リクエストターゲットがabsolute-formで渡される場合、server.address はリクエストターゲットのホストコンポーネントと一致すべきです(SHOULD)。
その他のすべての場合、server.address はHTTP/1.1における Host ヘッダーのホストコンポーネント、またはHTTP/2およびHTTP/3における :authority 疑似ヘッダーと一致すべきです(SHOULD)。
[3] server.port: HTTP/1.1において、リクエストターゲットがabsolute-formで渡される場合、server.port はリクエストターゲットのポートコンポーネントと一致すべきです(SHOULD)。
その他のすべての場合、server.port はHTTP/1.1における Host ヘッダーのポートコンポーネント、またはHTTP/2およびHTTP/3における :authority 疑似ヘッダーと一致すべきです(SHOULD)。
[4] error.type: レスポンスステータスコードの送受信前にエラーでリクエストが失敗した場合、error.type は例外の型(該当する場合はその完全修飾クラス名)またはコンポーネント固有の低カーディナリティなエラー識別子に設定すべきです(SHOULD)。
レスポンスステータスコードが送受信され、かつそのステータスがHTTPスパンステータスの定義に従ってエラーを示す場合、error.type はステータスコード番号(文字列として表現)、(発生していれば)例外の型、またはコンポーネント固有のエラー識別子に設定すべきです(SHOULD)。
error.type の値は予測可能であるべきであり(SHOULD)、低カーディナリティであるべきです(SHOULD)。
計装は、報告するエラーの一覧を文書化すべきです(SHOULD)。
1つの計装ライブラリ内での error.type のカーディナリティは低くあるべきですが(SHOULD)、複数の計装ライブラリやアプリケーションからのデータを集約するテレメトリーの利用者は、追加のフィルターが適用されないクエリ時には error.type が高カーディナリティになることを想定しておくべきです。
リクエストが正常に完了した場合、計装は error.type を設定するべきではありません(SHOULD NOT)。
[5] network.protocol.name: http ではなく、かつ network.protocol.version が設定されている場合。
[6] network.protocol.name: 値は小文字に正規化すべきです(SHOULD)。
[7] url.template: url.template は低カーディナリティでなければなりません(MUST)。通常HTTPクライアントでは利用できませんが、アプリケーションや専用のHTTP計装が知っている場合があります。
[8] network.protocol.version: プロトコルバージョンが(例えばALPNを使って)ネゴシエーションされる場合、この属性はネゴシエーションされたバージョンに設定すべきです(SHOULD)。実際のプロトコルバージョンが不明な場合、この属性は設定するべきではありません(SHOULD NOT)。
error.type には、次のよく知られた値の一覧があります。いずれかが該当する場合はその値を使用しなければならず(MUST)、それ以外の場合は独自の値を使ってもかまいません(MAY)。
| Value | Description | Stability |
|---|---|---|
_OTHER | 計装がカスタム値を定義していない場合に使用されるフォールバックのエラー値。 |
http.request.method には、次のよく知られた値の一覧があります。いずれかが該当する場合はその値を使用しなければならず(MUST)、それ以外の場合は独自の値を使ってもかまいません(MAY)。
| Value | Description | Stability |
|---|---|---|
_OTHER | 計装が事前に知らないHTTPメソッド。 | |
CONNECT | CONNECTメソッド。 | |
DELETE | DELETEメソッド。 | |
GET | GETメソッド。 | |
HEAD | HEADメソッド。 | |
OPTIONS | OPTIONSメソッド。 | |
PATCH | PATCHメソッド。 | |
POST | POSTメソッド。 | |
PUT | PUTメソッド。 | |
QUERY | QUERYメソッド。 | |
TRACE | TRACEメソッド。 |
メトリクス: http.client.response.body.size
このメトリクスはOpt-Inです。
| Name | Instrument Type | Unit (UCUM) | Description | Stability | Entity Associations |
|---|---|---|---|---|---|
http.client.response.body.size | Histogram | By | HTTPクライアントレスポンスボディのサイズ。[1] |
[1]: レスポンスのペイロードボディのバイト数。これはヘッダーを除いて転送されたバイト数であり、多くの場合(常にではありませんが)Content-Lengthヘッダーとして存在します。転送エンコーディングを使用するリクエストの場合、これは圧縮後のサイズであるべきです。
Attributes:
| Key | Stability | Requirement Level | Value Type | Description | Example Values |
|---|---|---|---|---|---|
http.request.method | Required | string | HTTPリクエストメソッド。[1] | GET; POST; HEAD | |
server.address | Required | string | 利用可能であればリバースDNSルックアップなしのサーバードメイン名。それ以外の場合はIPアドレスまたはUNIXドメインソケット名。[2] | example.com; 10.1.2.80; /tmp/my.sock | |
server.port | Required | int | サーバーのポート番号。[3] | 80; 8080; 443 | |
error.type | Conditionally Required リクエストがエラーで終了した場合。 | string | 操作が終了したエラーのクラスを記述します。[4] | timeout; java.net.UnknownHostException; server_certificate_invalid; 500 | |
http.response.status_code | Conditionally Required 送受信された場合に限る。 | int | HTTPレスポンスステータスコード。 | 200 | |
network.protocol.name | Conditionally Required [5] | string | OSIアプリケーション層またはそれに相当する非OSI層。[6] | http; spdy | |
url.template | Conditionally Required 利用可能な場合。 | string | 絶対パス参照の低カーディナリティなテンプレート。[7] | /users/{id}; /users/:id; /users?id={id} | |
network.protocol.version | Recommended | string | ネットワーク通信で使用されているプロトコルの実際のバージョン。[8] | 1.0; 1.1; 2; 3 | |
url.scheme | Opt-In | string | 使用されたプロトコルを識別するURIスキームコンポーネント。 | http; https |
[1] http.request.method: HTTPリクエストメソッドの値は、計装に「既知」であるべきです(SHOULD)。
デフォルトでは、この規約はRFC9110に列挙されているメソッド、RFC5789で定義されたPATCHメソッド、httpbis-safe-method-w-bodyで定義されたQUERYメソッドを「既知の」メソッドとして定義します。
HTTPリクエストメソッドが計装に既知でない場合、http.request.method 属性を _OTHER に設定しなければなりません(MUST)。
HTTP計装が有効なHTTPリクエストメソッドを _OTHER に変換してしまう可能性がある場合、既知のHTTPメソッドの一覧を上書きする方法を提供しなければなりません(MUST)。
この上書きが環境変数を介して行われる場合、その環境変数は OTEL_INSTRUMENTATION_HTTP_KNOWN_METHODS という名前でなければならず(MUST)、大文字小文字を区別する既知のHTTPメソッドをカンマ区切りのリストとしてサポートしなければなりません(MUST)。
この上書きが宣言的設定を介して行われる場合、
.instrumentation/development.general.http.client や .instrumentation/development.general.http.server の下にある known_methods プロパティ(最小要素数0の、大文字小文字を区別する文字列の配列)でその一覧を設定可能にしなければなりません(MUST)。
いずれの場合も、この一覧は既知のメソッドのデフォルトの完全な上書きでなければならず(MUST)、デフォルトに追加する既知のメソッドの一覧ではありません。
HTTPメソッド名は大文字小文字を区別し、http.request.method 属性の値は既知のHTTPメソッド名に正確に一致しなければなりません(MUST)。
HTTPメソッドを大文字小文字を区別しないものとして扱う特定のWebフレームワーク向けの計装は、正規化された等価な値を設定すべきです(SHOULD)。
そのようなトレーシング計装は、http.request.method_original にも元の値を設定しなければなりません(MUST)。
[2] server.address: HTTP/1.1において、リクエストターゲットがabsolute-formで渡される場合、server.address はリクエストターゲットのホストコンポーネントと一致すべきです(SHOULD)。
その他のすべての場合、server.address はHTTP/1.1における Host ヘッダーのホストコンポーネント、またはHTTP/2およびHTTP/3における :authority 疑似ヘッダーと一致すべきです(SHOULD)。
[3] server.port: HTTP/1.1において、リクエストターゲットがabsolute-formで渡される場合、server.port はリクエストターゲットのポートコンポーネントと一致すべきです(SHOULD)。
その他のすべての場合、server.port はHTTP/1.1における Host ヘッダーのポートコンポーネント、またはHTTP/2およびHTTP/3における :authority 疑似ヘッダーと一致すべきです(SHOULD)。
[4] error.type: レスポンスステータスコードの送受信前にエラーでリクエストが失敗した場合、error.type は例外の型(該当する場合はその完全修飾クラス名)またはコンポーネント固有の低カーディナリティなエラー識別子に設定すべきです(SHOULD)。
レスポンスステータスコードが送受信され、かつそのステータスがHTTPスパンステータスの定義に従ってエラーを示す場合、error.type はステータスコード番号(文字列として表現)、(発生していれば)例外の型、またはコンポーネント固有のエラー識別子に設定すべきです(SHOULD)。
error.type の値は予測可能であるべきであり(SHOULD)、低カーディナリティであるべきです(SHOULD)。
計装は、報告するエラーの一覧を文書化すべきです(SHOULD)。
1つの計装ライブラリ内での error.type のカーディナリティは低くあるべきですが(SHOULD)、複数の計装ライブラリやアプリケーションからのデータを集約するテレメトリーの利用者は、追加のフィルターが適用されないクエリ時には error.type が高カーディナリティになることを想定しておくべきです。
リクエストが正常に完了した場合、計装は error.type を設定するべきではありません(SHOULD NOT)。
[5] network.protocol.name: http ではなく、かつ network.protocol.version が設定されている場合。
[6] network.protocol.name: 値は小文字に正規化すべきです(SHOULD)。
[7] url.template: url.template は低カーディナリティでなければなりません(MUST)。通常HTTPクライアントでは利用できませんが、アプリケーションや専用のHTTP計装が知っている場合があります。
[8] network.protocol.version: プロトコルバージョンが(例えばALPNを使って)ネゴシエーションされる場合、この属性はネゴシエーションされたバージョンに設定すべきです(SHOULD)。実際のプロトコルバージョンが不明な場合、この属性は設定するべきではありません(SHOULD NOT)。
error.type には、次のよく知られた値の一覧があります。いずれかが該当する場合はその値を使用しなければならず(MUST)、それ以外の場合は独自の値を使ってもかまいません(MAY)。
| Value | Description | Stability |
|---|---|---|
_OTHER | 計装がカスタム値を定義していない場合に使用されるフォールバックのエラー値。 |
http.request.method には、次のよく知られた値の一覧があります。いずれかが該当する場合はその値を使用しなければならず(MUST)、それ以外の場合は独自の値を使ってもかまいません(MAY)。
| Value | Description | Stability |
|---|---|---|
_OTHER | 計装が事前に知らないHTTPメソッド。 | |
CONNECT | CONNECTメソッド。 | |
DELETE | DELETEメソッド。 | |
GET | GETメソッド。 | |
HEAD | HEADメソッド。 | |
OPTIONS | OPTIONSメソッド。 | |
PATCH | PATCHメソッド。 | |
POST | POSTメソッド。 | |
PUT | PUTメソッド。 | |
QUERY | QUERYメソッド。 | |
TRACE | TRACEメソッド。 |
メトリクス: http.client.open_connections
このメトリクスはOpt-Inです。
| Name | Instrument Type | Unit (UCUM) | Description | Stability | Entity Associations |
|---|---|---|---|---|---|
http.client.open_connections | UpDownCounter | {connection} | クライアント上で現在アクティブまたはアイドル状態にある、送信方向のHTTP接続の数。 |
Attributes:
| Key | Stability | Requirement Level | Value Type | Description | Example Values |
|---|---|---|---|---|---|
http.connection.state | Required | string | HTTP接続プールにおけるHTTP接続の状態。 | active; idle | |
server.address | Required | string | 利用可能であればリバースDNSルックアップなしのサーバードメイン名。それ以外の場合はIPアドレスまたはUNIXドメインソケット名。[1] | example.com; 10.1.2.80; /tmp/my.sock | |
server.port | Required | int | サーバーのポート番号。[2] | 80; 8080; 443 | |
network.protocol.version | Recommended | string | ネットワーク通信で使用されているプロトコルの実際のバージョン。[3] | 1.1; 2 | |
network.peer.address | Opt-In | string | ネットワーク接続のピアアドレス。IPアドレスまたはUNIXドメインソケット名。 | 10.1.2.80; /tmp/my.sock | |
url.scheme | Opt-In | string | 使用されたプロトコルを識別するURIスキームコンポーネント。 | http; https |
[1] server.address: クライアント側から観測し、かつ中継者を経由して通信している場合、server.address は、利用可能であれば、プロキシなどの中継者の背後にあるサーバーアドレスを表すべきです(SHOULD)。
[2] server.port: クライアント側から観測し、かつ中継者を経由して通信している場合、server.port は、利用可能であれば、プロキシなどの中継者の背後にあるサーバーポートを表すべきです(SHOULD)。
[3] network.protocol.version: プロトコルバージョンが(例えばALPNを使って)ネゴシエーションされる場合、この属性はネゴシエーションされたバージョンに設定すべきです(SHOULD)。実際のプロトコルバージョンが不明な場合、この属性は設定するべきではありません(SHOULD NOT)。
http.connection.state には、次のよく知られた値の一覧があります。いずれかが該当する場合はその値を使用しなければならず(MUST)、それ以外の場合は独自の値を使ってもかまいません(MAY)。
| Value | Description | Stability |
|---|---|---|
active | アクティブ状態。 | |
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)。
このメトリクスはOpt-Inです。
| Name | Instrument Type | Unit (UCUM) | Description | Stability | Entity Associations |
|---|---|---|---|---|---|
http.client.connection.duration | Histogram | s | 正常に確立された送信方向のHTTP接続の継続時間。 |
Attributes:
| Key | Stability | Requirement Level | Value Type | Description | Example Values |
|---|---|---|---|---|---|
server.address | Required | string | 利用可能であればリバースDNSルックアップなしのサーバードメイン名。それ以外の場合はIPアドレスまたはUNIXドメインソケット名。[1] | example.com; 10.1.2.80; /tmp/my.sock | |
server.port | Required | int | サーバーのポート番号。[2] | 80; 8080; 443 | |
network.protocol.version | Recommended | string | ネットワーク通信で使用されているプロトコルの実際のバージョン。[3] | 1.1; 2 | |
network.peer.address | Opt-In | string | ネットワーク接続のピアアドレス。IPアドレスまたはUNIXドメインソケット名。 | 10.1.2.80; /tmp/my.sock | |
url.scheme | Opt-In | string | 使用されたプロトコルを識別するURIスキームコンポーネント。 | http; https |
[1] server.address: クライアント側から観測し、かつ中継者を経由して通信している場合、server.address は、利用可能であれば、プロキシなどの中継者の背後にあるサーバーアドレスを表すべきです(SHOULD)。
[2] server.port: クライアント側から観測し、かつ中継者を経由して通信している場合、server.port は、利用可能であれば、プロキシなどの中継者の背後にあるサーバーポートを表すべきです(SHOULD)。
[3] network.protocol.version: プロトコルバージョンが(例えばALPNを使って)ネゴシエーションされる場合、この属性はネゴシエーションされたバージョンに設定すべきです(SHOULD)。実際のプロトコルバージョンが不明な場合、この属性は設定するべきではありません(SHOULD NOT)。
メトリクス: http.client.active_requests
ステータス: Development
このメトリクスはOpt-Inです。
| Name | Instrument Type | Unit (UCUM) | Description | Stability | Entity Associations |
|---|---|---|---|---|---|
http.client.active_requests | UpDownCounter | {request} | アクティブなHTTPリクエストの数。 |
Attributes:
| Key | Stability | Requirement Level | Value Type | Description | Example Values |
|---|---|---|---|---|---|
server.address | Required | string | 利用可能であればリバースDNSルックアップなしのサーバードメイン名。それ以外の場合はIPアドレスまたはUNIXドメインソケット名。[1] | example.com; 10.1.2.80; /tmp/my.sock | |
server.port | Required | int | サーバーのポート番号。[2] | 80; 8080; 443 | |
url.template | Conditionally Required 利用可能な場合。 | string | 絶対パス参照の低カーディナリティなテンプレート。[3] | /users/{id}; /users/:id; /users?id={id} | |
http.request.method | Recommended | string | HTTPリクエストメソッド。[4] | GET; POST; HEAD | |
url.scheme | Opt-In | string | 使用されたプロトコルを識別するURIスキームコンポーネント。 | http; https |
[1] server.address: HTTP/1.1において、リクエストターゲットがabsolute-formで渡される場合、server.address はリクエストターゲットのホストコンポーネントと一致すべきです(SHOULD)。
その他のすべての場合、server.address はHTTP/1.1における Host ヘッダーのホストコンポーネント、またはHTTP/2およびHTTP/3における :authority 疑似ヘッダーと一致すべきです(SHOULD)。
[2] server.port: HTTP/1.1において、リクエストターゲットがabsolute-formで渡される場合、server.port はリクエストターゲットのポートコンポーネントと一致すべきです(SHOULD)。
その他のすべての場合、server.port はHTTP/1.1における Host ヘッダーのポートコンポーネント、またはHTTP/2およびHTTP/3における :authority 疑似ヘッダーと一致すべきです(SHOULD)。
[3] url.template: url.template は低カーディナリティでなければなりません(MUST)。通常HTTPクライアントでは利用できませんが、アプリケーションや専用のHTTP計装が知っている場合があります。
[4] http.request.method: HTTPリクエストメソッドの値は、計装に「既知」であるべきです(SHOULD)。
デフォルトでは、この規約はRFC9110に列挙されているメソッド、RFC5789で定義されたPATCHメソッド、httpbis-safe-method-w-bodyで定義されたQUERYメソッドを「既知の」メソッドとして定義します。
HTTPリクエストメソッドが計装に既知でない場合、http.request.method 属性を _OTHER に設定しなければなりません(MUST)。
HTTP計装が有効なHTTPリクエストメソッドを _OTHER に変換してしまう可能性がある場合、既知のHTTPメソッドの一覧を上書きする方法を提供しなければなりません(MUST)。
この上書きが環境変数を介して行われる場合、その環境変数は OTEL_INSTRUMENTATION_HTTP_KNOWN_METHODS という名前でなければならず(MUST)、大文字小文字を区別する既知のHTTPメソッドをカンマ区切りのリストとしてサポートしなければなりません(MUST)。
この上書きが宣言的設定を介して行われる場合、
.instrumentation/development.general.http.client や .instrumentation/development.general.http.server の下にある known_methods プロパティ(最小要素数0の、大文字小文字を区別する文字列の配列)でその一覧を設定可能にしなければなりません(MUST)。
いずれの場合も、この一覧は既知のメソッドのデフォルトの完全な上書きでなければならず(MUST)、デフォルトに追加する既知のメソッドの一覧ではありません。
HTTPメソッド名は大文字小文字を区別し、http.request.method 属性の値は既知のHTTPメソッド名に正確に一致しなければなりません(MUST)。
HTTPメソッドを大文字小文字を区別しないものとして扱う特定のWebフレームワーク向けの計装は、正規化された等価な値を設定すべきです(SHOULD)。
そのようなトレーシング計装は、http.request.method_original にも元の値を設定しなければなりません(MUST)。
http.request.method には、次のよく知られた値の一覧があります。いずれかが該当する場合はその値を使用しなければならず(MUST)、それ以外の場合は独自の値を使ってもかまいません(MAY)。
| Value | Description | Stability |
|---|---|---|
_OTHER | 計装が事前に知らないHTTPメソッド。 | |
CONNECT | CONNECTメソッド。 | |
DELETE | DELETEメソッド。 | |
GET | GETメソッド。 | |
HEAD | HEADメソッド。 | |
OPTIONS | OPTIONSメソッド。 | |
PATCH | PATCHメソッド。 | |
POST | POSTメソッド。 | |
PUT | PUTメソッド。 | |
QUERY | QUERYメソッド。 | |
TRACE | TRACEメソッド。 |