この記事は英語の原文を日本語に翻訳したものです。原文: https://opentelemetry.io/docs/specs/semconv/messaging/rabbitmq/
翻訳元: open-telemetry/semantic-conventions v1.44.0(コミット e10a930)
RabbitMQに関するセマンティック規約
ステータス: Development
RabbitMQに関するセマンティック規約は、メッセージングに関するセマンティック規約を拡張し、その一部を上書きします。
[!IMPORTANT]
この文書のv1.24.0 以前のバージョンを使っている既存のメッセージング計装は、次に従うべきです。
- メッセージングセマンティック規約が安定版として宣言されるまで、デフォルトで発行するメッセージング規約のバージョンを変更してはなりません(SHOULD NOT)。 規約には、属性、メトリクス名、スパン名、スパン種別、計測単位などが含まれますが、これらに限定されません。
- 既存のメジャーバージョンにおいて、カテゴリー別の値をカンマ区切りで列挙するリストとして環境変数
OTEL_SEMCONV_STABILITY_OPT_INを導入すべきです(SHOULD) (例: http、databases、messaging)。値の一覧は次のとおりです。
messaging- 新しい安定版のメッセージング規約を発行し、それまで計装が発行していた古い実験的なメッセージング規約の発行を停止します。messaging/dup- 古い規約と安定版の規約の両方を発行し、円滑な移行を可能にします。- これらの値がいずれも指定されていない場合のデフォルトの動作は、その計装がそれまで発行していた古い実験的なメッセージング規約のバージョンをそのまま発行し続けることです。
- 注記: 両方の値が指定されている場合、
messaging/dupはmessagingよりも優先されます。- 両方の規約セットを発行し始めてから少なくとも6か月間は、既存のメジャーバージョンを(少なくともセキュリティパッチの適用という形で)維持すべきです(SHOULD)。
- 次のメジャーバージョンでは、この環境変数を削除すべきです(SHOULD)。
messaging/dupがリストに含まれる場合、スパン名、スパン種別、および類似の「単一の」値を持つ概念については、新しい安定版の値を発行すべきです(SHOULD)。
RabbitMQスパン
“Send"スパン(プロデューサー)
Status:
RabbitMQに1つ以上のメッセージを発行するプロデューサーを表します。
別個の"Create"スパンが存在せず、“Send"スパンのコンテキストがメッセージの作成コンテキストとしてメッセージに注入される場合に、このスパンを使用します。詳細は Producer spansを参照してください。
Span kind は PRODUCER にすべきです(SHOULD)。
Span status はエラーの記録の文書に従うべきです(SHOULD)。
Attributes:
| Key | Stability | Requirement Level | Value Type | Description | Example Values |
|---|---|---|---|---|---|
messaging.destination.name | Required | string | メッセージの宛先名。[1] | direct_logs:warning; logs; amq.default | |
messaging.operation.name | Required | string | メッセージング操作のシステム固有の名前。 | send; publish | |
messaging.system | Required | string | クライアント計装によって識別されるメッセージングシステム。[2] | rabbitmq | |
error.type | Conditionally Required メッセージング操作が失敗した場合に限る。 | string | 操作が終了したエラーのクラスを記述します。[3] | amqp:decode-error; amqp:resource-limit-exceeded; connection-forced | |
messaging.batch.message_count | Conditionally Required [4] | int | バッチ操作の範囲内で送信、受信、または処理されたメッセージの数。[5] | 0; 1; 2 | |
messaging.destination.anonymous | Conditionally Required [6] | boolean | メッセージの宛先が匿名(名前がない、または自動生成された名前を持つ)である場合に真になるブール値。 | ||
messaging.destination.template | Conditionally Required [7] | string | メッセージの宛先名の低カーディナリティな表現。[8] | /customers/{customerId} | |
messaging.destination.temporary | Conditionally Required [9] | boolean | メッセージの宛先が一時的であり、メッセージが処理された後には存在しなくなる可能性がある場合に真になるブール値。 | ||
messaging.operation.type | Conditionally Required 該当する場合。 | string | メッセージング操作の種類を識別する文字列。[10] | send | |
messaging.rabbitmq.destination.routing_key | Conditionally Required 空でない場合。 | string | RabbitMQのメッセージルーティングキー。 | myKey | |
messaging.client.id | Recommended | string | メッセージを消費または生成するクライアントの一意な識別子。 | client-5; myhost@8742@s8083jm | |
messaging.destination.partition.id | Recommended 該当する場合。 | string | メッセージが送信または受信されるパーティションの識別子。messaging.destination.name の中で一意。 | 1 | |
messaging.message.conversation_id | Recommended | string | メッセージのcorrelation IDプロパティ。 | MyConversationId | |
messaging.message.id | Recommended スパンが単一のメッセージに対する操作を記述する場合。 | string | メッセージングシステムがメッセージの識別子として使用する値。文字列として表現される。 | 452a7c7c7c7048c2f887f61572b18fc2 | |
network.peer.address | Recommended | string | 操作が実行されたメッセージング中継ノードのピアアドレス。[11] | 10.1.2.80; /tmp/my.sock | |
network.peer.port | Recommended network.peer.address が設定されている場合に限る。 | int | 操作が実行されたメッセージング中継ノードのピアポート。 | 65123 | |
server.address | Recommended | string | 利用可能であればリバースDNSルックアップなしのサーバードメイン名。それ以外の場合はIPアドレスまたはUNIXドメインソケット名。[12] | example.com; 10.1.2.80; /tmp/my.sock | |
server.port | Recommended | int | サーバーのポート番号。[13] | 80; 8080; 443 | |
messaging.message.body.size | Opt-In | int | メッセージ本文のバイト数。単一メッセージの操作を記述するスパンにのみ適用可能。[14] | 1439 | |
messaging.message.envelope.size | Opt-In | int | メッセージ本文とメタデータのバイト数。[15] | 2738 |
[1] messaging.destination.name: RabbitMQの宛先は、exchangeとrouting keyによって定義されます。
両方の値が存在し空でない場合、{exchange}:{routing key} に設定すべきです(SHOULD)。
一方だけが利用可能な場合は、その値(例えば {exchange} や {routing key})だけを使用すべきです(SHOULD)。
それ以外の場合、デフォルトのexchangeが使用され、routing keyが指定されていないときは amq.default に設定すべきです(SHOULD)。
[2] messaging.system: "rabbitmq" に設定しなければなりません(MUST)。
[3] error.type: error.type は予測可能であるべきであり(SHOULD)、低カーディナリティであるべきです(SHOULD)。
error.type に型(例えば例外の型)を設定する場合、そのアーティファクト内でその型を識別する正規のクラス名を使用すべきです(SHOULD)。
記録されたエラー型が、失敗の分類にとって意味を持たないラッパーである場合、計装は代わりに内部のエラーの型を使用してもかまいません(MAY)。
例えばGoでは、%w を使って fmt.Errorf で作成されたエラーは、ラッパー型が失敗の分類に役立たない場合、ラップを解除してもかまいません(MAY)。
計装は、報告するエラーの一覧を文書化すべきです(SHOULD)。
1つの計装ライブラリ内での error.type のカーディナリティは低くあるべきですが(SHOULD)、複数の計装ライブラリやアプリケーションからのデータを集約するテレメトリーの利用者は、追加のフィルターが適用されないクエリ時には error.type が高カーディナリティになることを想定しておくべきです。
操作が正常に完了した場合、計装は error.type を設定するべきではありません(SHOULD NOT)。
特定のドメインが独自のエラー識別子の集合を定義している場合(HTTPやRPCのステータスコードなど)、次のようにすることが推奨されます(RECOMMENDED)。
- ドメイン固有の属性を使用する
- そのドメイン固有の集合内で定義されているかどうかにかかわらず、すべてのエラーを捉えるように
error.typeを設定する
[4] messaging.batch.message_count: スパンがメッセージのバッチに対する操作を記述する場合。
[5] messaging.batch.message_count: 計装は、単一のメッセージを扱うスパンに messaging.batch.message_count を設定するべきではありません(SHOULD NOT)。メッセージングクライアントライブラリが同じ操作についてバッチAPIと単一メッセージAPIの両方をサポートする場合、計装はバッチAPIには messaging.batch.message_count を使用すべきであり(SHOULD)、単一メッセージAPIには使用するべきではありません(SHOULD NOT)。
[6] messaging.destination.anonymous: 値が true の場合。指定がない場合、値は false であるとみなされます。
[7] messaging.destination.template: 利用可能な場合。宛先名の低カーディナリティが保証されない限り、計装は messaging.destination.name をテンプレートとして使用してはなりません(MUST NOT)。
[8] messaging.destination.template: 宛先名は、テンプレートから構築されることがあります。例えば、ユーザー名や製品IDを含む宛先名などです。この場合の宛先名自体は高カーディナリティですが、その基となるテンプレートは低カーディナリティであり、グルーピングや集計に効果的に利用できます。
[9] messaging.destination.temporary: 値が true の場合。指定がない場合、値は false であるとみなされます。
[10] messaging.operation.type: send に設定すべきです(SHOULD)。
[11] network.peer.address: 個々のメッセージングシステムに関するセマンティック規約は、network.peer.* 属性が適用可能かどうかを文書化すべきです(SHOULD)。
アプリケーションが個々の中継ノードと直接やり取りする場合、ネットワークピアアドレスとポートが重要になります。
メッセージング操作に(再試行などによる)複数のネットワーク呼び出しが含まれる場合、最後に接続したノードのアドレスを使用すべきです(SHOULD)。
[12] server.address: 利用可能であればリバースDNSルックアップなしのブローカーのサーバードメイン名。それ以外の場合はIPアドレスまたはUNIXドメインソケット名。
[13] server.port: クライアント側から観測し、かつ中継者を経由して通信している場合、server.port は、利用可能であれば、(プロキシなどの)中継者の背後にあるサーバーポートを表すべきです(SHOULD)。
[14] messaging.message.body.size: これは、圧縮後または圧縮前のいずれのボディサイズも指すことができます。両方のサイズが分かっている場合は、圧縮前のサイズを使用すべきです。
[15] messaging.message.envelope.size: これは、圧縮後または圧縮前のいずれのサイズも指すことができます。両方のサイズが分かっている場合は、圧縮前のサイズを使用すべきです。
次の属性は、サンプリング判断に重要となりうるため、(いずれかが提供される場合)スパン作成時点で提供すべきです(SHOULD)。
messaging.destination.namemessaging.destination.partition.idmessaging.destination.templatemessaging.operation.namemessaging.operation.typemessaging.systemserver.addressserver.port
error.type には、次のよく知られた値の一覧があります。いずれかが該当する場合はその値を使用しなければならず(MUST)、それ以外の場合は独自の値を使ってもかまいません(MAY)。
| Value | Description | Stability |
|---|---|---|
_OTHER | 計装がカスタム値を定義していない場合に使用されるフォールバックのエラー値。 |
messaging.operation.type には、次のよく知られた値の一覧があります。いずれかが該当する場合はその値を使用しなければならず(MUST)、それ以外の場合は独自の値を使ってもかまいません(MAY)。
| Value | Description | Stability |
|---|---|---|
create | メッセージが作成されます。“Create"スパンは常に単一のメッセージを指し、バッチ送信シナリオにおいてメッセージに一意な作成コンテキストを提供するために使用されます。 | |
process | 1つ以上のメッセージがコンシューマーによって処理されます。 | |
receive | 1つ以上のメッセージがコンシューマーによって要求されます。この操作はpullベースのシナリオを指し、コンシューマーがメッセージングSDKのメソッドを明示的に呼び出してメッセージを受信します。 | |
send | 1つ以上のメッセージが中継者への送信のために提供されます。単一のメッセージが送信される場合、“Send"スパンのコンテキストを作成コンテキストとして使用できるため、“Create"スパンを作成する必要はありません。 | |
settle | 1つ以上のメッセージが決着(settle)されます。 |
messaging.system には、次のよく知られた値の一覧があります。いずれかが該当する場合はその値を使用しなければならず(MUST)、それ以外の場合は独自の値を使ってもかまいません(MAY)。
| Value | Description | Stability |
|---|---|---|
activemq | Apache ActiveMQ | |
aws.sns | Amazon Simple Notification Service(SNS) | |
aws_sqs | Amazon Simple Queue Service(SQS) | |
eventgrid | Azure Event Grid | |
eventhubs | Azure Event Hubs | |
gcp_pubsub | Google Cloud Pub/Sub | |
jms | Java Message Service | |
kafka | Apache Kafka | |
pulsar | Apache Pulsar | |
rabbitmq | RabbitMQ | |
rocketmq | Apache RocketMQ | |
servicebus | Azure Service Bus |
“Receive"スパン
Status:
RabbitMQから1つ以上のメッセージを受信するコンシューマー(pullベース)を表します。
“Receive"スパンは、コンシューマーがメッセージングSDKのメソッドを明示的に呼び出してメッセージを受信するpullベースのシナリオについて作成されます。詳細は Consumer spansを参照してください。
Span kind は CLIENT にすべきです(SHOULD)。
Span status はエラーの記録の文書に従うべきです(SHOULD)。
Attributes:
| Key | Stability | Requirement Level | Value Type | Description | Example Values |
|---|---|---|---|---|---|
messaging.destination.name | Required | string | メッセージの宛先名。[1] | direct_logs:warning:my_queue; direct_logs:warning; logs | |
messaging.operation.name | Required | string | メッセージング操作のシステム固有の名前。 | receive; poll | |
messaging.system | Required | string | クライアント計装によって識別されるメッセージングシステム。[2] | rabbitmq | |
error.type | Conditionally Required メッセージング操作が失敗した場合に限る。 | string | 操作が終了したエラーのクラスを記述します。[3] | amqp:decode-error; amqp:resource-limit-exceeded; connection-forced | |
messaging.batch.message_count | Conditionally Required [4] | int | バッチ操作の範囲内で送信、受信、または処理されたメッセージの数。[5] | 0; 1; 2 | |
messaging.destination.anonymous | Conditionally Required [6] | boolean | メッセージの宛先が匿名(名前がない、または自動生成された名前を持つ)である場合に真になるブール値。 | ||
messaging.destination.template | Conditionally Required [7] | string | メッセージの宛先名の低カーディナリティな表現。[8] | /customers/{customerId} | |
messaging.destination.temporary | Conditionally Required [9] | boolean | メッセージの宛先が一時的であり、メッセージが処理された後には存在しなくなる可能性がある場合に真になるブール値。 | ||
messaging.operation.type | Conditionally Required 該当する場合。 | string | メッセージング操作の種類を識別する文字列。[10] | receive | |
messaging.rabbitmq.destination.routing_key | Conditionally Required 空でない場合。 | string | RabbitMQのメッセージルーティングキー。 | myKey | |
messaging.rabbitmq.message.delivery_tag | Conditionally Required 利用可能な場合。 | int | RabbitMQのメッセージ配送タグ。 | 123 | |
messaging.client.id | Recommended | string | メッセージを消費または生成するクライアントの一意な識別子。 | client-5; myhost@8742@s8083jm | |
messaging.destination.partition.id | Recommended 該当する場合。 | string | メッセージが送信または受信されるパーティションの識別子。messaging.destination.name の中で一意。 | 1 | |
messaging.message.conversation_id | Recommended | string | メッセージのcorrelation IDプロパティ。 | MyConversationId | |
messaging.message.id | Recommended スパンが単一のメッセージに対する操作を記述する場合。 | string | メッセージングシステムがメッセージの識別子として使用する値。文字列として表現される。 | 452a7c7c7c7048c2f887f61572b18fc2 | |
network.peer.address | Recommended | string | 操作が実行されたメッセージング中継ノードのピアアドレス。[11] | 10.1.2.80; /tmp/my.sock | |
network.peer.port | Recommended network.peer.address が設定されている場合に限る。 | int | 操作が実行されたメッセージング中継ノードのピアポート。 | 65123 | |
server.address | Recommended | string | 利用可能であればリバースDNSルックアップなしのサーバードメイン名。それ以外の場合はIPアドレスまたはUNIXドメインソケット名。[12] | example.com; 10.1.2.80; /tmp/my.sock | |
server.port | Recommended | int | サーバーのポート番号。[13] | 80; 8080; 443 | |
messaging.message.body.size | Opt-In | int | メッセージ本文のバイト数。単一メッセージの操作を記述するスパンにのみ適用可能。[14] | 1439 | |
messaging.message.envelope.size | Opt-In | int | メッセージ本文とメタデータのバイト数。[15] | 2738 |
[1] messaging.destination.name: RabbitMQの宛先は、exchange、routing key、queueによって定義されます。
すべての値が存在し空でない場合、{exchange}:{routing key}:{queue} に設定すべきです(SHOULD)。
(デフォルトのexchangeが使用されている場合など)いずれかの値が空の場合は省略すべきです(SHOULD)。
{routing key} と {queue} が等しい場合、そのいずれか一方だけ(例えば {exchange}:{routing key})を使用すべきです(SHOULD)。
[2] messaging.system: "rabbitmq" に設定しなければなりません(MUST)。
[3] error.type: error.type は予測可能であるべきであり(SHOULD)、低カーディナリティであるべきです(SHOULD)。
error.type に型(例えば例外の型)を設定する場合、そのアーティファクト内でその型を識別する正規のクラス名を使用すべきです(SHOULD)。
記録されたエラー型が、失敗の分類にとって意味を持たないラッパーである場合、計装は代わりに内部のエラーの型を使用してもかまいません(MAY)。
例えばGoでは、%w を使って fmt.Errorf で作成されたエラーは、ラッパー型が失敗の分類に役立たない場合、ラップを解除してもかまいません(MAY)。
計装は、報告するエラーの一覧を文書化すべきです(SHOULD)。
1つの計装ライブラリ内での error.type のカーディナリティは低くあるべきですが(SHOULD)、複数の計装ライブラリやアプリケーションからのデータを集約するテレメトリーの利用者は、追加のフィルターが適用されないクエリ時には error.type が高カーディナリティになることを想定しておくべきです。
操作が正常に完了した場合、計装は error.type を設定するべきではありません(SHOULD NOT)。
特定のドメインが独自のエラー識別子の集合を定義している場合(HTTPやRPCのステータスコードなど)、次のようにすることが推奨されます(RECOMMENDED)。
- ドメイン固有の属性を使用する
- そのドメイン固有の集合内で定義されているかどうかにかかわらず、すべてのエラーを捉えるように
error.typeを設定する
[4] messaging.batch.message_count: スパンがメッセージのバッチに対する操作を記述する場合。
[5] messaging.batch.message_count: 計装は、単一のメッセージを扱うスパンに messaging.batch.message_count を設定するべきではありません(SHOULD NOT)。メッセージングクライアントライブラリが同じ操作についてバッチAPIと単一メッセージAPIの両方をサポートする場合、計装はバッチAPIには messaging.batch.message_count を使用すべきであり(SHOULD)、単一メッセージAPIには使用するべきではありません(SHOULD NOT)。
[6] messaging.destination.anonymous: 値が true の場合。指定がない場合、値は false であるとみなされます。
[7] messaging.destination.template: 利用可能な場合。宛先名の低カーディナリティが保証されない限り、計装は messaging.destination.name をテンプレートとして使用してはなりません(MUST NOT)。
[8] messaging.destination.template: 宛先名は、テンプレートから構築されることがあります。例えば、ユーザー名や製品IDを含む宛先名などです。この場合の宛先名自体は高カーディナリティですが、その基となるテンプレートは低カーディナリティであり、グルーピングや集計に効果的に利用できます。
[9] messaging.destination.temporary: 値が true の場合。指定がない場合、値は false であるとみなされます。
[10] messaging.operation.type: receive に設定すべきです(SHOULD)。
[11] network.peer.address: 個々のメッセージングシステムに関するセマンティック規約は、network.peer.* 属性が適用可能かどうかを文書化すべきです(SHOULD)。
アプリケーションが個々の中継ノードと直接やり取りする場合、ネットワークピアアドレスとポートが重要になります。
メッセージング操作に(再試行などによる)複数のネットワーク呼び出しが含まれる場合、最後に接続したノードのアドレスを使用すべきです(SHOULD)。
[12] server.address: 利用可能であればリバースDNSルックアップなしのブローカーのサーバードメイン名。それ以外の場合はIPアドレスまたはUNIXドメインソケット名。
[13] server.port: クライアント側から観測し、かつ中継者を経由して通信している場合、server.port は、利用可能であれば、(プロキシなどの)中継者の背後にあるサーバーポートを表すべきです(SHOULD)。
[14] messaging.message.body.size: これは、圧縮後または圧縮前のいずれのボディサイズも指すことができます。両方のサイズが分かっている場合は、圧縮前のサイズを使用すべきです。
[15] messaging.message.envelope.size: これは、圧縮後または圧縮前のいずれのサイズも指すことができます。両方のサイズが分かっている場合は、圧縮前のサイズを使用すべきです。
次の属性は、サンプリング判断に重要となりうるため、(いずれかが提供される場合)スパン作成時点で提供すべきです(SHOULD)。
messaging.destination.namemessaging.destination.partition.idmessaging.destination.templatemessaging.operation.namemessaging.operation.typemessaging.systemserver.addressserver.port
error.type には、次のよく知られた値の一覧があります。いずれかが該当する場合はその値を使用しなければならず(MUST)、それ以外の場合は独自の値を使ってもかまいません(MAY)。
| Value | Description | Stability |
|---|---|---|
_OTHER | 計装がカスタム値を定義していない場合に使用されるフォールバックのエラー値。 |
messaging.operation.type には、次のよく知られた値の一覧があります。いずれかが該当する場合はその値を使用しなければならず(MUST)、それ以外の場合は独自の値を使ってもかまいません(MAY)。
| Value | Description | Stability |
|---|---|---|
create | メッセージが作成されます。“Create"スパンは常に単一のメッセージを指し、バッチ送信シナリオにおいてメッセージに一意な作成コンテキストを提供するために使用されます。 | |
process | 1つ以上のメッセージがコンシューマーによって処理されます。 | |
receive | 1つ以上のメッセージがコンシューマーによって要求されます。この操作はpullベースのシナリオを指し、コンシューマーがメッセージングSDKのメソッドを明示的に呼び出してメッセージを受信します。 | |
send | 1つ以上のメッセージが中継者への送信のために提供されます。単一のメッセージが送信される場合、“Send"スパンのコンテキストを作成コンテキストとして使用できるため、“Create"スパンを作成する必要はありません。 | |
settle | 1つ以上のメッセージが決着(settle)されます。 |
messaging.system には、次のよく知られた値の一覧があります。いずれかが該当する場合はその値を使用しなければならず(MUST)、それ以外の場合は独自の値を使ってもかまいません(MAY)。
| Value | Description | Stability |
|---|---|---|
activemq | Apache ActiveMQ | |
aws.sns | Amazon Simple Notification Service(SNS) | |
aws_sqs | Amazon Simple Queue Service(SQS) | |
eventgrid | Azure Event Grid | |
eventhubs | Azure Event Hubs | |
gcp_pubsub | Google Cloud Pub/Sub | |
jms | Java Message Service | |
kafka | Apache Kafka | |
pulsar | Apache Pulsar | |
rabbitmq | RabbitMQ | |
rocketmq | Apache RocketMQ | |
servicebus | Azure Service Bus |
“Process"スパン
Status:
RabbitMQから1つ以上のメッセージを処理するコンシューマー(push型)を表します。
“Process"スパンは、コールバックやハンドラーを通じてメッセージがアプリケーションに渡されるpushベースのシナリオについて作成されます。詳細は Consumer spansを参照してください。
単一メッセージのシナリオに限り、メッセージの作成コンテキストが親として使用される場合については、 Message creation context as parent of “Process” spanを参照してください。
Span kind は CONSUMER にすべきです(SHOULD)。
Span status はエラーの記録の文書に従うべきです(SHOULD)。
Attributes:
| Key | Stability | Requirement Level | Value Type | Description | Example Values |
|---|---|---|---|---|---|
messaging.destination.name | Required | string | メッセージの宛先名。[1] | direct_logs:warning:my_queue; direct_logs:warning; logs | |
messaging.operation.name | Required | string | メッセージング操作のシステム固有の名前。 | process; consume | |
messaging.system | Required | string | クライアント計装によって識別されるメッセージングシステム。[2] | rabbitmq | |
error.type | Conditionally Required メッセージング操作が失敗した場合に限る。 | string | 操作が終了したエラーのクラスを記述します。[3] | amqp:decode-error; amqp:resource-limit-exceeded; connection-forced | |
messaging.batch.message_count | Conditionally Required [4] | int | バッチ操作の範囲内で送信、受信、または処理されたメッセージの数。[5] | 0; 1; 2 | |
messaging.destination.anonymous | Conditionally Required [6] | boolean | メッセージの宛先が匿名(名前がない、または自動生成された名前を持つ)である場合に真になるブール値。 | ||
messaging.destination.template | Conditionally Required [7] | string | メッセージの宛先名の低カーディナリティな表現。[8] | /customers/{customerId} | |
messaging.destination.temporary | Conditionally Required [9] | boolean | メッセージの宛先が一時的であり、メッセージが処理された後には存在しなくなる可能性がある場合に真になるブール値。 | ||
messaging.operation.type | Conditionally Required 該当する場合。 | string | メッセージング操作の種類を識別する文字列。[10] | process | |
messaging.rabbitmq.destination.routing_key | Conditionally Required 空でない場合。 | string | RabbitMQのメッセージルーティングキー。 | myKey | |
messaging.rabbitmq.message.delivery_tag | Conditionally Required 利用可能な場合。 | int | RabbitMQのメッセージ配送タグ。 | 123 | |
messaging.client.id | Recommended | string | メッセージを消費または生成するクライアントの一意な識別子。 | client-5; myhost@8742@s8083jm | |
messaging.destination.partition.id | Recommended 該当する場合。 | string | メッセージが送信または受信されるパーティションの識別子。messaging.destination.name の中で一意。 | 1 | |
messaging.message.conversation_id | Recommended | string | メッセージのcorrelation IDプロパティ。 | MyConversationId | |
messaging.message.id | Recommended スパンが単一のメッセージに対する操作を記述する場合。 | string | メッセージングシステムがメッセージの識別子として使用する値。文字列として表現される。 | 452a7c7c7c7048c2f887f61572b18fc2 | |
server.address | Recommended | string | 利用可能であればリバースDNSルックアップなしのサーバードメイン名。それ以外の場合はIPアドレスまたはUNIXドメインソケット名。[11] | example.com; 10.1.2.80; /tmp/my.sock | |
server.port | Recommended | int | サーバーのポート番号。[12] | 80; 8080; 443 | |
messaging.message.body.size | Opt-In | int | メッセージ本文のバイト数。単一メッセージの操作を記述するスパンにのみ適用可能。[13] | 1439 | |
messaging.message.envelope.size | Opt-In | int | メッセージ本文とメタデータのバイト数。[14] | 2738 |
[1] messaging.destination.name: RabbitMQの宛先は、exchange、routing key、queueによって定義されます。
すべての値が存在し空でない場合、{exchange}:{routing key}:{queue} に設定すべきです(SHOULD)。
(デフォルトのexchangeが使用されている場合など)いずれかの値が空の場合は省略すべきです(SHOULD)。
{routing key} と {queue} が等しい場合、そのいずれか一方だけ(例えば {exchange}:{routing key})を使用すべきです(SHOULD)。
[2] messaging.system: "rabbitmq" に設定しなければなりません(MUST)。
[3] error.type: error.type は予測可能であるべきであり(SHOULD)、低カーディナリティであるべきです(SHOULD)。
error.type に型(例えば例外の型)を設定する場合、そのアーティファクト内でその型を識別する正規のクラス名を使用すべきです(SHOULD)。
記録されたエラー型が、失敗の分類にとって意味を持たないラッパーである場合、計装は代わりに内部のエラーの型を使用してもかまいません(MAY)。
例えばGoでは、%w を使って fmt.Errorf で作成されたエラーは、ラッパー型が失敗の分類に役立たない場合、ラップを解除してもかまいません(MAY)。
計装は、報告するエラーの一覧を文書化すべきです(SHOULD)。
1つの計装ライブラリ内での error.type のカーディナリティは低くあるべきですが(SHOULD)、複数の計装ライブラリやアプリケーションからのデータを集約するテレメトリーの利用者は、追加のフィルターが適用されないクエリ時には error.type が高カーディナリティになることを想定しておくべきです。
操作が正常に完了した場合、計装は error.type を設定するべきではありません(SHOULD NOT)。
特定のドメインが独自のエラー識別子の集合を定義している場合(HTTPやRPCのステータスコードなど)、次のようにすることが推奨されます(RECOMMENDED)。
- ドメイン固有の属性を使用する
- そのドメイン固有の集合内で定義されているかどうかにかかわらず、すべてのエラーを捉えるように
error.typeを設定する
[4] messaging.batch.message_count: スパンがメッセージのバッチに対する操作を記述する場合。
[5] messaging.batch.message_count: 計装は、単一のメッセージを扱うスパンに messaging.batch.message_count を設定するべきではありません(SHOULD NOT)。メッセージングクライアントライブラリが同じ操作についてバッチAPIと単一メッセージAPIの両方をサポートする場合、計装はバッチAPIには messaging.batch.message_count を使用すべきであり(SHOULD)、単一メッセージAPIには使用するべきではありません(SHOULD NOT)。
[6] messaging.destination.anonymous: 値が true の場合。指定がない場合、値は false であるとみなされます。
[7] messaging.destination.template: 利用可能な場合。宛先名の低カーディナリティが保証されない限り、計装は messaging.destination.name をテンプレートとして使用してはなりません(MUST NOT)。
[8] messaging.destination.template: 宛先名は、テンプレートから構築されることがあります。例えば、ユーザー名や製品IDを含む宛先名などです。この場合の宛先名自体は高カーディナリティですが、その基となるテンプレートは低カーディナリティであり、グルーピングや集計に効果的に利用できます。
[9] messaging.destination.temporary: 値が true の場合。指定がない場合、値は false であるとみなされます。
[10] messaging.operation.type: process に設定すべきです(SHOULD)。
[11] server.address: 利用可能であればリバースDNSルックアップなしのブローカーのサーバードメイン名。それ以外の場合はIPアドレスまたはUNIXドメインソケット名。
[12] server.port: クライアント側から観測し、かつ中継者を経由して通信している場合、server.port は、利用可能であれば、(プロキシなどの)中継者の背後にあるサーバーポートを表すべきです(SHOULD)。
[13] messaging.message.body.size: これは、圧縮後または圧縮前のいずれのボディサイズも指すことができます。両方のサイズが分かっている場合は、圧縮前のサイズを使用すべきです。
[14] messaging.message.envelope.size: これは、圧縮後または圧縮前のいずれのサイズも指すことができます。両方のサイズが分かっている場合は、圧縮前のサイズを使用すべきです。
次の属性は、サンプリング判断に重要となりうるため、(いずれかが提供される場合)スパン作成時点で提供すべきです(SHOULD)。
messaging.destination.namemessaging.destination.partition.idmessaging.destination.templatemessaging.operation.namemessaging.operation.typemessaging.systemserver.addressserver.port
error.type には、次のよく知られた値の一覧があります。いずれかが該当する場合はその値を使用しなければならず(MUST)、それ以外の場合は独自の値を使ってもかまいません(MAY)。
| Value | Description | Stability |
|---|---|---|
_OTHER | 計装がカスタム値を定義していない場合に使用されるフォールバックのエラー値。 |
messaging.operation.type には、次のよく知られた値の一覧があります。いずれかが該当する場合はその値を使用しなければならず(MUST)、それ以外の場合は独自の値を使ってもかまいません(MAY)。
| Value | Description | Stability |
|---|---|---|
create | メッセージが作成されます。“Create"スパンは常に単一のメッセージを指し、バッチ送信シナリオにおいてメッセージに一意な作成コンテキストを提供するために使用されます。 | |
process | 1つ以上のメッセージがコンシューマーによって処理されます。 | |
receive | 1つ以上のメッセージがコンシューマーによって要求されます。この操作はpullベースのシナリオを指し、コンシューマーがメッセージングSDKのメソッドを明示的に呼び出してメッセージを受信します。 | |
send | 1つ以上のメッセージが中継者への送信のために提供されます。単一のメッセージが送信される場合、“Send"スパンのコンテキストを作成コンテキストとして使用できるため、“Create"スパンを作成する必要はありません。 | |
settle | 1つ以上のメッセージが決着(settle)されます。 |
messaging.system には、次のよく知られた値の一覧があります。いずれかが該当する場合はその値を使用しなければならず(MUST)、それ以外の場合は独自の値を使ってもかまいません(MAY)。
| Value | Description | Stability |
|---|---|---|
activemq | Apache ActiveMQ | |
aws.sns | Amazon Simple Notification Service(SNS) | |
aws_sqs | Amazon Simple Queue Service(SQS) | |
eventgrid | Azure Event Grid | |
eventhubs | Azure Event Hubs | |
gcp_pubsub | Google Cloud Pub/Sub | |
jms | Java Message Service | |
kafka | Apache Kafka | |
pulsar | Apache Pulsar | |
rabbitmq | RabbitMQ | |
rocketmq | Apache RocketMQ | |
servicebus | Azure Service Bus |
“Settle"スパン
Status:
RabbitMQ上で1つ以上のメッセージを決着(ack/nack/reject)するコンシューマーを表します。
“Settle"スパンは、手動または自動でトリガーされるすべての決着操作について作成されます。詳細は Consumer spansを参照してください。
Span kind は CLIENT にすべきです(SHOULD)。
Span status はエラーの記録の文書に従うべきです(SHOULD)。
Attributes:
| Key | Stability | Requirement Level | Value Type | Description | Example Values |
|---|---|---|---|---|---|
messaging.destination.name | Required | string | メッセージの宛先名。[1] | direct_logs:warning:my_queue; direct_logs:warning; logs | |
messaging.operation.name | Required | string | メッセージング操作のシステム固有の名前。 | ack; nack; settle | |
messaging.system | Required | string | クライアント計装によって識別されるメッセージングシステム。[2] | rabbitmq | |
error.type | Conditionally Required メッセージング操作が失敗した場合に限る。 | string | 操作が終了したエラーのクラスを記述します。[3] | amqp:decode-error; amqp:resource-limit-exceeded; connection-forced | |
messaging.batch.message_count | Conditionally Required [4] | int | バッチ操作の範囲内で送信、受信、または処理されたメッセージの数。[5] | 0; 1; 2 | |
messaging.destination.template | Conditionally Required [6] | string | メッセージの宛先名の低カーディナリティな表現。[7] | /customers/{customerId} | |
messaging.operation.type | Conditionally Required 該当する場合。 | string | メッセージング操作の種類を識別する文字列。[8] | settle | |
messaging.rabbitmq.message.delivery_tag | Conditionally Required 利用可能な場合。 | int | RabbitMQのメッセージ配送タグ。 | 123 | |
messaging.client.id | Recommended | string | メッセージを消費または生成するクライアントの一意な識別子。 | client-5; myhost@8742@s8083jm | |
messaging.destination.partition.id | Recommended 該当する場合。 | string | メッセージが送信または受信されるパーティションの識別子。messaging.destination.name の中で一意。 | 1 | |
messaging.message.conversation_id | Recommended | string | メッセージのcorrelation IDプロパティ。 | MyConversationId | |
messaging.message.id | Recommended スパンが単一のメッセージに対する操作を記述する場合。 | string | メッセージングシステムがメッセージの識別子として使用する値。文字列として表現される。 | 452a7c7c7c7048c2f887f61572b18fc2 | |
network.peer.address | Recommended | string | 操作が実行されたメッセージング中継ノードのピアアドレス。[9] | 10.1.2.80; /tmp/my.sock | |
network.peer.port | Recommended network.peer.address が設定されている場合に限る。 | int | 操作が実行されたメッセージング中継ノードのピアポート。 | 65123 | |
server.address | Recommended | string | 利用可能であればリバースDNSルックアップなしのサーバードメイン名。それ以外の場合はIPアドレスまたはUNIXドメインソケット名。[10] | example.com; 10.1.2.80; /tmp/my.sock | |
server.port | Recommended | int | サーバーのポート番号。[11] | 80; 8080; 443 |
[1] messaging.destination.name: RabbitMQの宛先は、exchange、routing key、queueによって定義されます。
すべての値が存在し空でない場合、{exchange}:{routing key}:{queue} に設定すべきです(SHOULD)。
(デフォルトのexchangeが使用されている場合など)いずれかの値が空の場合は省略すべきです(SHOULD)。
{routing key} と {queue} が等しい場合、そのいずれか一方だけ(例えば {exchange}:{routing key})を使用すべきです(SHOULD)。
[2] messaging.system: "rabbitmq" に設定しなければなりません(MUST)。
[3] error.type: error.type は予測可能であるべきであり(SHOULD)、低カーディナリティであるべきです(SHOULD)。
error.type に型(例えば例外の型)を設定する場合、そのアーティファクト内でその型を識別する正規のクラス名を使用すべきです(SHOULD)。
記録されたエラー型が、失敗の分類にとって意味を持たないラッパーである場合、計装は代わりに内部のエラーの型を使用してもかまいません(MAY)。
例えばGoでは、%w を使って fmt.Errorf で作成されたエラーは、ラッパー型が失敗の分類に役立たない場合、ラップを解除してもかまいません(MAY)。
計装は、報告するエラーの一覧を文書化すべきです(SHOULD)。
1つの計装ライブラリ内での error.type のカーディナリティは低くあるべきですが(SHOULD)、複数の計装ライブラリやアプリケーションからのデータを集約するテレメトリーの利用者は、追加のフィルターが適用されないクエリ時には error.type が高カーディナリティになることを想定しておくべきです。
操作が正常に完了した場合、計装は error.type を設定するべきではありません(SHOULD NOT)。
特定のドメインが独自のエラー識別子の集合を定義している場合(HTTPやRPCのステータスコードなど)、次のようにすることが推奨されます(RECOMMENDED)。
- ドメイン固有の属性を使用する
- そのドメイン固有の集合内で定義されているかどうかにかかわらず、すべてのエラーを捉えるように
error.typeを設定する
[4] messaging.batch.message_count: スパンがメッセージのバッチに対する操作を記述する場合。
[5] messaging.batch.message_count: 計装は、単一のメッセージを扱うスパンに messaging.batch.message_count を設定するべきではありません(SHOULD NOT)。メッセージングクライアントライブラリが同じ操作についてバッチAPIと単一メッセージAPIの両方をサポートする場合、計装はバッチAPIには messaging.batch.message_count を使用すべきであり(SHOULD)、単一メッセージAPIには使用するべきではありません(SHOULD NOT)。
[6] messaging.destination.template: 利用可能な場合。宛先名の低カーディナリティが保証されない限り、計装は messaging.destination.name をテンプレートとして使用してはなりません(MUST NOT)。
[7] messaging.destination.template: 宛先名は、テンプレートから構築されることがあります。例えば、ユーザー名や製品IDを含む宛先名などです。この場合の宛先名自体は高カーディナリティですが、その基となるテンプレートは低カーディナリティであり、グルーピングや集計に効果的に利用できます。
[8] messaging.operation.type: settle に設定すべきです(SHOULD)。
[9] network.peer.address: 個々のメッセージングシステムに関するセマンティック規約は、network.peer.* 属性が適用可能かどうかを文書化すべきです(SHOULD)。
アプリケーションが個々の中継ノードと直接やり取りする場合、ネットワークピアアドレスとポートが重要になります。
メッセージング操作に(再試行などによる)複数のネットワーク呼び出しが含まれる場合、最後に接続したノードのアドレスを使用すべきです(SHOULD)。
[10] server.address: 利用可能であればリバースDNSルックアップなしのブローカーのサーバードメイン名。それ以外の場合はIPアドレスまたはUNIXドメインソケット名。
[11] server.port: クライアント側から観測し、かつ中継者を経由して通信している場合、server.port は、利用可能であれば、(プロキシなどの)中継者の背後にあるサーバーポートを表すべきです(SHOULD)。
次の属性は、サンプリング判断に重要となりうるため、(いずれかが提供される場合)スパン作成時点で提供すべきです(SHOULD)。
messaging.destination.namemessaging.destination.partition.idmessaging.destination.templatemessaging.operation.namemessaging.operation.typemessaging.systemserver.addressserver.port
error.type には、次のよく知られた値の一覧があります。いずれかが該当する場合はその値を使用しなければならず(MUST)、それ以外の場合は独自の値を使ってもかまいません(MAY)。
| Value | Description | Stability |
|---|---|---|
_OTHER | 計装がカスタム値を定義していない場合に使用されるフォールバックのエラー値。 |
messaging.operation.type には、次のよく知られた値の一覧があります。いずれかが該当する場合はその値を使用しなければならず(MUST)、それ以外の場合は独自の値を使ってもかまいません(MAY)。
| Value | Description | Stability |
|---|---|---|
create | メッセージが作成されます。“Create"スパンは常に単一のメッセージを指し、バッチ送信シナリオにおいてメッセージに一意な作成コンテキストを提供するために使用されます。 | |
process | 1つ以上のメッセージがコンシューマーによって処理されます。 | |
receive | 1つ以上のメッセージがコンシューマーによって要求されます。この操作はpullベースのシナリオを指し、コンシューマーがメッセージングSDKのメソッドを明示的に呼び出してメッセージを受信します。 | |
send | 1つ以上のメッセージが中継者への送信のために提供されます。単一のメッセージが送信される場合、“Send"スパンのコンテキストを作成コンテキストとして使用できるため、“Create"スパンを作成する必要はありません。 | |
settle | 1つ以上のメッセージが決着(settle)されます。 |
messaging.system には、次のよく知られた値の一覧があります。いずれかが該当する場合はその値を使用しなければならず(MUST)、それ以外の場合は独自の値を使ってもかまいません(MAY)。
| Value | Description | Stability |
|---|---|---|
activemq | Apache ActiveMQ | |
aws.sns | Amazon Simple Notification Service(SNS) | |
aws_sqs | Amazon Simple Queue Service(SQS) | |
eventgrid | Azure Event Grid | |
eventhubs | Azure Event Hubs | |
gcp_pubsub | Google Cloud Pub/Sub | |
jms | Java Message Service | |
kafka | Apache Kafka | |
pulsar | Apache Pulsar | |
rabbitmq | RabbitMQ | |
rocketmq | Apache RocketMQ | |
servicebus | Azure Service Bus |