この記事は英語の原文を日本語に翻訳したものです。原文: 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/dupmessaging よりも優先されます。
  • 両方の規約セットを発行し始めてから少なくとも6か月間は、既存のメジャーバージョンを(少なくともセキュリティパッチの適用という形で)維持すべきです(SHOULD)。
  • 次のメジャーバージョンでは、この環境変数を削除すべきです(SHOULD)。
  • messaging/dup がリストに含まれる場合、スパン名、スパン種別、および類似の「単一の」値を持つ概念については、新しい安定版の値を発行すべきです(SHOULD)。

RabbitMQスパン

“Send"スパン(プロデューサー)

Status: Development

RabbitMQに1つ以上のメッセージを発行するプロデューサーを表します。

別個の"Create"スパンが存在せず、“Send"スパンのコンテキストがメッセージの作成コンテキストとしてメッセージに注入される場合に、このスパンを使用します。詳細は Producer spansを参照してください。

Span kindPRODUCER にすべきです(SHOULD)。

Span statusエラーの記録の文書に従うべきです(SHOULD)。

Attributes:

KeyStabilityRequirement LevelValue TypeDescriptionExample Values
messaging.destination.nameDevelopmentRequiredstringメッセージの宛先名。[1]direct_logs:warning; logs; amq.default
messaging.operation.nameDevelopmentRequiredstringメッセージング操作のシステム固有の名前。send; publish
messaging.systemDevelopmentRequiredstringクライアント計装によって識別されるメッセージングシステム。[2]rabbitmq
error.typeStableConditionally Required メッセージング操作が失敗した場合に限る。string操作が終了したエラーのクラスを記述します。[3]amqp:decode-error; amqp:resource-limit-exceeded; connection-forced
messaging.batch.message_countDevelopmentConditionally Required [4]intバッチ操作の範囲内で送信、受信、または処理されたメッセージの数。[5]0; 1; 2
messaging.destination.anonymousDevelopmentConditionally Required [6]booleanメッセージの宛先が匿名(名前がない、または自動生成された名前を持つ)である場合に真になるブール値。
messaging.destination.templateDevelopmentConditionally Required [7]stringメッセージの宛先名の低カーディナリティな表現。[8]/customers/{customerId}
messaging.destination.temporaryDevelopmentConditionally Required [9]booleanメッセージの宛先が一時的であり、メッセージが処理された後には存在しなくなる可能性がある場合に真になるブール値。
messaging.operation.typeDevelopmentConditionally Required 該当する場合。stringメッセージング操作の種類を識別する文字列。[10]send
messaging.rabbitmq.destination.routing_keyDevelopmentConditionally Required 空でない場合。stringRabbitMQのメッセージルーティングキー。myKey
messaging.client.idDevelopmentRecommendedstringメッセージを消費または生成するクライアントの一意な識別子。client-5; myhost@8742@s8083jm
messaging.destination.partition.idDevelopmentRecommended 該当する場合。stringメッセージが送信または受信されるパーティションの識別子。messaging.destination.name の中で一意。1
messaging.message.conversation_idDevelopmentRecommendedstringメッセージのcorrelation IDプロパティ。MyConversationId
messaging.message.idDevelopmentRecommended スパンが単一のメッセージに対する操作を記述する場合。stringメッセージングシステムがメッセージの識別子として使用する値。文字列として表現される。452a7c7c7c7048c2f887f61572b18fc2
network.peer.addressStableRecommendedstring操作が実行されたメッセージング中継ノードのピアアドレス。[11]10.1.2.80; /tmp/my.sock
network.peer.portStableRecommended network.peer.address が設定されている場合に限る。int操作が実行されたメッセージング中継ノードのピアポート。65123
server.addressStableRecommendedstring利用可能であればリバースDNSルックアップなしのサーバードメイン名。それ以外の場合はIPアドレスまたはUNIXドメインソケット名。[12]example.com; 10.1.2.80; /tmp/my.sock
server.portStableRecommendedintサーバーのポート番号。[13]80; 8080; 443
messaging.message.body.sizeDevelopmentOpt-Inintメッセージ本文のバイト数。単一メッセージの操作を記述するスパンにのみ適用可能。[14]1439
messaging.message.envelope.sizeDevelopmentOpt-Inintメッセージ本文とメタデータのバイト数。[15]2738

[1] messaging.destination.name: RabbitMQの宛先は、exchangerouting 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)。


error.type には、次のよく知られた値の一覧があります。いずれかが該当する場合はその値を使用しなければならず(MUST)、それ以外の場合は独自の値を使ってもかまいません(MAY)。

ValueDescriptionStability
_OTHER計装がカスタム値を定義していない場合に使用されるフォールバックのエラー値。Stable

messaging.operation.type には、次のよく知られた値の一覧があります。いずれかが該当する場合はその値を使用しなければならず(MUST)、それ以外の場合は独自の値を使ってもかまいません(MAY)。

ValueDescriptionStability
createメッセージが作成されます。“Create"スパンは常に単一のメッセージを指し、バッチ送信シナリオにおいてメッセージに一意な作成コンテキストを提供するために使用されます。Development
process1つ以上のメッセージがコンシューマーによって処理されます。Development
receive1つ以上のメッセージがコンシューマーによって要求されます。この操作はpullベースのシナリオを指し、コンシューマーがメッセージングSDKのメソッドを明示的に呼び出してメッセージを受信します。Development
send1つ以上のメッセージが中継者への送信のために提供されます。単一のメッセージが送信される場合、“Send"スパンのコンテキストを作成コンテキストとして使用できるため、“Create"スパンを作成する必要はありません。Development
settle1つ以上のメッセージが決着(settle)されます。Development

messaging.system には、次のよく知られた値の一覧があります。いずれかが該当する場合はその値を使用しなければならず(MUST)、それ以外の場合は独自の値を使ってもかまいません(MAY)。

ValueDescriptionStability
activemqApache ActiveMQDevelopment
aws.snsAmazon Simple Notification Service(SNS)Development
aws_sqsAmazon Simple Queue Service(SQS)Development
eventgridAzure Event GridDevelopment
eventhubsAzure Event HubsDevelopment
gcp_pubsubGoogle Cloud Pub/SubDevelopment
jmsJava Message ServiceDevelopment
kafkaApache KafkaDevelopment
pulsarApache PulsarDevelopment
rabbitmqRabbitMQDevelopment
rocketmqApache RocketMQDevelopment
servicebusAzure Service BusDevelopment

“Receive"スパン

Status: Development

RabbitMQから1つ以上のメッセージを受信するコンシューマー(pullベース)を表します。

“Receive"スパンは、コンシューマーがメッセージングSDKのメソッドを明示的に呼び出してメッセージを受信するpullベースのシナリオについて作成されます。詳細は Consumer spansを参照してください。

Span kindCLIENT にすべきです(SHOULD)。

Span statusエラーの記録の文書に従うべきです(SHOULD)。

Attributes:

KeyStabilityRequirement LevelValue TypeDescriptionExample Values
messaging.destination.nameDevelopmentRequiredstringメッセージの宛先名。[1]direct_logs:warning:my_queue; direct_logs:warning; logs
messaging.operation.nameDevelopmentRequiredstringメッセージング操作のシステム固有の名前。receive; poll
messaging.systemDevelopmentRequiredstringクライアント計装によって識別されるメッセージングシステム。[2]rabbitmq
error.typeStableConditionally Required メッセージング操作が失敗した場合に限る。string操作が終了したエラーのクラスを記述します。[3]amqp:decode-error; amqp:resource-limit-exceeded; connection-forced
messaging.batch.message_countDevelopmentConditionally Required [4]intバッチ操作の範囲内で送信、受信、または処理されたメッセージの数。[5]0; 1; 2
messaging.destination.anonymousDevelopmentConditionally Required [6]booleanメッセージの宛先が匿名(名前がない、または自動生成された名前を持つ)である場合に真になるブール値。
messaging.destination.templateDevelopmentConditionally Required [7]stringメッセージの宛先名の低カーディナリティな表現。[8]/customers/{customerId}
messaging.destination.temporaryDevelopmentConditionally Required [9]booleanメッセージの宛先が一時的であり、メッセージが処理された後には存在しなくなる可能性がある場合に真になるブール値。
messaging.operation.typeDevelopmentConditionally Required 該当する場合。stringメッセージング操作の種類を識別する文字列。[10]receive
messaging.rabbitmq.destination.routing_keyDevelopmentConditionally Required 空でない場合。stringRabbitMQのメッセージルーティングキー。myKey
messaging.rabbitmq.message.delivery_tagDevelopmentConditionally Required 利用可能な場合。intRabbitMQのメッセージ配送タグ。123
messaging.client.idDevelopmentRecommendedstringメッセージを消費または生成するクライアントの一意な識別子。client-5; myhost@8742@s8083jm
messaging.destination.partition.idDevelopmentRecommended 該当する場合。stringメッセージが送信または受信されるパーティションの識別子。messaging.destination.name の中で一意。1
messaging.message.conversation_idDevelopmentRecommendedstringメッセージのcorrelation IDプロパティ。MyConversationId
messaging.message.idDevelopmentRecommended スパンが単一のメッセージに対する操作を記述する場合。stringメッセージングシステムがメッセージの識別子として使用する値。文字列として表現される。452a7c7c7c7048c2f887f61572b18fc2
network.peer.addressStableRecommendedstring操作が実行されたメッセージング中継ノードのピアアドレス。[11]10.1.2.80; /tmp/my.sock
network.peer.portStableRecommended network.peer.address が設定されている場合に限る。int操作が実行されたメッセージング中継ノードのピアポート。65123
server.addressStableRecommendedstring利用可能であればリバースDNSルックアップなしのサーバードメイン名。それ以外の場合はIPアドレスまたはUNIXドメインソケット名。[12]example.com; 10.1.2.80; /tmp/my.sock
server.portStableRecommendedintサーバーのポート番号。[13]80; 8080; 443
messaging.message.body.sizeDevelopmentOpt-Inintメッセージ本文のバイト数。単一メッセージの操作を記述するスパンにのみ適用可能。[14]1439
messaging.message.envelope.sizeDevelopmentOpt-Inintメッセージ本文とメタデータのバイト数。[15]2738

[1] messaging.destination.name: RabbitMQの宛先は、exchangerouting keyqueueによって定義されます。

すべての値が存在し空でない場合、{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)。


error.type には、次のよく知られた値の一覧があります。いずれかが該当する場合はその値を使用しなければならず(MUST)、それ以外の場合は独自の値を使ってもかまいません(MAY)。

ValueDescriptionStability
_OTHER計装がカスタム値を定義していない場合に使用されるフォールバックのエラー値。Stable

messaging.operation.type には、次のよく知られた値の一覧があります。いずれかが該当する場合はその値を使用しなければならず(MUST)、それ以外の場合は独自の値を使ってもかまいません(MAY)。

ValueDescriptionStability
createメッセージが作成されます。“Create"スパンは常に単一のメッセージを指し、バッチ送信シナリオにおいてメッセージに一意な作成コンテキストを提供するために使用されます。Development
process1つ以上のメッセージがコンシューマーによって処理されます。Development
receive1つ以上のメッセージがコンシューマーによって要求されます。この操作はpullベースのシナリオを指し、コンシューマーがメッセージングSDKのメソッドを明示的に呼び出してメッセージを受信します。Development
send1つ以上のメッセージが中継者への送信のために提供されます。単一のメッセージが送信される場合、“Send"スパンのコンテキストを作成コンテキストとして使用できるため、“Create"スパンを作成する必要はありません。Development
settle1つ以上のメッセージが決着(settle)されます。Development

messaging.system には、次のよく知られた値の一覧があります。いずれかが該当する場合はその値を使用しなければならず(MUST)、それ以外の場合は独自の値を使ってもかまいません(MAY)。

ValueDescriptionStability
activemqApache ActiveMQDevelopment
aws.snsAmazon Simple Notification Service(SNS)Development
aws_sqsAmazon Simple Queue Service(SQS)Development
eventgridAzure Event GridDevelopment
eventhubsAzure Event HubsDevelopment
gcp_pubsubGoogle Cloud Pub/SubDevelopment
jmsJava Message ServiceDevelopment
kafkaApache KafkaDevelopment
pulsarApache PulsarDevelopment
rabbitmqRabbitMQDevelopment
rocketmqApache RocketMQDevelopment
servicebusAzure Service BusDevelopment

“Process"スパン

Status: Development

RabbitMQから1つ以上のメッセージを処理するコンシューマー(push型)を表します。

“Process"スパンは、コールバックやハンドラーを通じてメッセージがアプリケーションに渡されるpushベースのシナリオについて作成されます。詳細は Consumer spansを参照してください。

単一メッセージのシナリオに限り、メッセージの作成コンテキストが親として使用される場合については、 Message creation context as parent of “Process” spanを参照してください。

Span kindCONSUMER にすべきです(SHOULD)。

Span statusエラーの記録の文書に従うべきです(SHOULD)。

Attributes:

KeyStabilityRequirement LevelValue TypeDescriptionExample Values
messaging.destination.nameDevelopmentRequiredstringメッセージの宛先名。[1]direct_logs:warning:my_queue; direct_logs:warning; logs
messaging.operation.nameDevelopmentRequiredstringメッセージング操作のシステム固有の名前。process; consume
messaging.systemDevelopmentRequiredstringクライアント計装によって識別されるメッセージングシステム。[2]rabbitmq
error.typeStableConditionally Required メッセージング操作が失敗した場合に限る。string操作が終了したエラーのクラスを記述します。[3]amqp:decode-error; amqp:resource-limit-exceeded; connection-forced
messaging.batch.message_countDevelopmentConditionally Required [4]intバッチ操作の範囲内で送信、受信、または処理されたメッセージの数。[5]0; 1; 2
messaging.destination.anonymousDevelopmentConditionally Required [6]booleanメッセージの宛先が匿名(名前がない、または自動生成された名前を持つ)である場合に真になるブール値。
messaging.destination.templateDevelopmentConditionally Required [7]stringメッセージの宛先名の低カーディナリティな表現。[8]/customers/{customerId}
messaging.destination.temporaryDevelopmentConditionally Required [9]booleanメッセージの宛先が一時的であり、メッセージが処理された後には存在しなくなる可能性がある場合に真になるブール値。
messaging.operation.typeDevelopmentConditionally Required 該当する場合。stringメッセージング操作の種類を識別する文字列。[10]process
messaging.rabbitmq.destination.routing_keyDevelopmentConditionally Required 空でない場合。stringRabbitMQのメッセージルーティングキー。myKey
messaging.rabbitmq.message.delivery_tagDevelopmentConditionally Required 利用可能な場合。intRabbitMQのメッセージ配送タグ。123
messaging.client.idDevelopmentRecommendedstringメッセージを消費または生成するクライアントの一意な識別子。client-5; myhost@8742@s8083jm
messaging.destination.partition.idDevelopmentRecommended 該当する場合。stringメッセージが送信または受信されるパーティションの識別子。messaging.destination.name の中で一意。1
messaging.message.conversation_idDevelopmentRecommendedstringメッセージのcorrelation IDプロパティ。MyConversationId
messaging.message.idDevelopmentRecommended スパンが単一のメッセージに対する操作を記述する場合。stringメッセージングシステムがメッセージの識別子として使用する値。文字列として表現される。452a7c7c7c7048c2f887f61572b18fc2
server.addressStableRecommendedstring利用可能であればリバースDNSルックアップなしのサーバードメイン名。それ以外の場合はIPアドレスまたはUNIXドメインソケット名。[11]example.com; 10.1.2.80; /tmp/my.sock
server.portStableRecommendedintサーバーのポート番号。[12]80; 8080; 443
messaging.message.body.sizeDevelopmentOpt-Inintメッセージ本文のバイト数。単一メッセージの操作を記述するスパンにのみ適用可能。[13]1439
messaging.message.envelope.sizeDevelopmentOpt-Inintメッセージ本文とメタデータのバイト数。[14]2738

[1] messaging.destination.name: RabbitMQの宛先は、exchangerouting keyqueueによって定義されます。

すべての値が存在し空でない場合、{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)。


error.type には、次のよく知られた値の一覧があります。いずれかが該当する場合はその値を使用しなければならず(MUST)、それ以外の場合は独自の値を使ってもかまいません(MAY)。

ValueDescriptionStability
_OTHER計装がカスタム値を定義していない場合に使用されるフォールバックのエラー値。Stable

messaging.operation.type には、次のよく知られた値の一覧があります。いずれかが該当する場合はその値を使用しなければならず(MUST)、それ以外の場合は独自の値を使ってもかまいません(MAY)。

ValueDescriptionStability
createメッセージが作成されます。“Create"スパンは常に単一のメッセージを指し、バッチ送信シナリオにおいてメッセージに一意な作成コンテキストを提供するために使用されます。Development
process1つ以上のメッセージがコンシューマーによって処理されます。Development
receive1つ以上のメッセージがコンシューマーによって要求されます。この操作はpullベースのシナリオを指し、コンシューマーがメッセージングSDKのメソッドを明示的に呼び出してメッセージを受信します。Development
send1つ以上のメッセージが中継者への送信のために提供されます。単一のメッセージが送信される場合、“Send"スパンのコンテキストを作成コンテキストとして使用できるため、“Create"スパンを作成する必要はありません。Development
settle1つ以上のメッセージが決着(settle)されます。Development

messaging.system には、次のよく知られた値の一覧があります。いずれかが該当する場合はその値を使用しなければならず(MUST)、それ以外の場合は独自の値を使ってもかまいません(MAY)。

ValueDescriptionStability
activemqApache ActiveMQDevelopment
aws.snsAmazon Simple Notification Service(SNS)Development
aws_sqsAmazon Simple Queue Service(SQS)Development
eventgridAzure Event GridDevelopment
eventhubsAzure Event HubsDevelopment
gcp_pubsubGoogle Cloud Pub/SubDevelopment
jmsJava Message ServiceDevelopment
kafkaApache KafkaDevelopment
pulsarApache PulsarDevelopment
rabbitmqRabbitMQDevelopment
rocketmqApache RocketMQDevelopment
servicebusAzure Service BusDevelopment

“Settle"スパン

Status: Development

RabbitMQ上で1つ以上のメッセージを決着(ack/nack/reject)するコンシューマーを表します。

“Settle"スパンは、手動または自動でトリガーされるすべての決着操作について作成されます。詳細は Consumer spansを参照してください。

Span kindCLIENT にすべきです(SHOULD)。

Span statusエラーの記録の文書に従うべきです(SHOULD)。

Attributes:

KeyStabilityRequirement LevelValue TypeDescriptionExample Values
messaging.destination.nameDevelopmentRequiredstringメッセージの宛先名。[1]direct_logs:warning:my_queue; direct_logs:warning; logs
messaging.operation.nameDevelopmentRequiredstringメッセージング操作のシステム固有の名前。ack; nack; settle
messaging.systemDevelopmentRequiredstringクライアント計装によって識別されるメッセージングシステム。[2]rabbitmq
error.typeStableConditionally Required メッセージング操作が失敗した場合に限る。string操作が終了したエラーのクラスを記述します。[3]amqp:decode-error; amqp:resource-limit-exceeded; connection-forced
messaging.batch.message_countDevelopmentConditionally Required [4]intバッチ操作の範囲内で送信、受信、または処理されたメッセージの数。[5]0; 1; 2
messaging.destination.templateDevelopmentConditionally Required [6]stringメッセージの宛先名の低カーディナリティな表現。[7]/customers/{customerId}
messaging.operation.typeDevelopmentConditionally Required 該当する場合。stringメッセージング操作の種類を識別する文字列。[8]settle
messaging.rabbitmq.message.delivery_tagDevelopmentConditionally Required 利用可能な場合。intRabbitMQのメッセージ配送タグ。123
messaging.client.idDevelopmentRecommendedstringメッセージを消費または生成するクライアントの一意な識別子。client-5; myhost@8742@s8083jm
messaging.destination.partition.idDevelopmentRecommended 該当する場合。stringメッセージが送信または受信されるパーティションの識別子。messaging.destination.name の中で一意。1
messaging.message.conversation_idDevelopmentRecommendedstringメッセージのcorrelation IDプロパティ。MyConversationId
messaging.message.idDevelopmentRecommended スパンが単一のメッセージに対する操作を記述する場合。stringメッセージングシステムがメッセージの識別子として使用する値。文字列として表現される。452a7c7c7c7048c2f887f61572b18fc2
network.peer.addressStableRecommendedstring操作が実行されたメッセージング中継ノードのピアアドレス。[9]10.1.2.80; /tmp/my.sock
network.peer.portStableRecommended network.peer.address が設定されている場合に限る。int操作が実行されたメッセージング中継ノードのピアポート。65123
server.addressStableRecommendedstring利用可能であればリバースDNSルックアップなしのサーバードメイン名。それ以外の場合はIPアドレスまたはUNIXドメインソケット名。[10]example.com; 10.1.2.80; /tmp/my.sock
server.portStableRecommendedintサーバーのポート番号。[11]80; 8080; 443

[1] messaging.destination.name: RabbitMQの宛先は、exchangerouting keyqueueによって定義されます。

すべての値が存在し空でない場合、{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)。


error.type には、次のよく知られた値の一覧があります。いずれかが該当する場合はその値を使用しなければならず(MUST)、それ以外の場合は独自の値を使ってもかまいません(MAY)。

ValueDescriptionStability
_OTHER計装がカスタム値を定義していない場合に使用されるフォールバックのエラー値。Stable

messaging.operation.type には、次のよく知られた値の一覧があります。いずれかが該当する場合はその値を使用しなければならず(MUST)、それ以外の場合は独自の値を使ってもかまいません(MAY)。

ValueDescriptionStability
createメッセージが作成されます。“Create"スパンは常に単一のメッセージを指し、バッチ送信シナリオにおいてメッセージに一意な作成コンテキストを提供するために使用されます。Development
process1つ以上のメッセージがコンシューマーによって処理されます。Development
receive1つ以上のメッセージがコンシューマーによって要求されます。この操作はpullベースのシナリオを指し、コンシューマーがメッセージングSDKのメソッドを明示的に呼び出してメッセージを受信します。Development
send1つ以上のメッセージが中継者への送信のために提供されます。単一のメッセージが送信される場合、“Send"スパンのコンテキストを作成コンテキストとして使用できるため、“Create"スパンを作成する必要はありません。Development
settle1つ以上のメッセージが決着(settle)されます。Development

messaging.system には、次のよく知られた値の一覧があります。いずれかが該当する場合はその値を使用しなければならず(MUST)、それ以外の場合は独自の値を使ってもかまいません(MAY)。

ValueDescriptionStability
activemqApache ActiveMQDevelopment
aws.snsAmazon Simple Notification Service(SNS)Development
aws_sqsAmazon Simple Queue Service(SQS)Development
eventgridAzure Event GridDevelopment
eventhubsAzure Event HubsDevelopment
gcp_pubsubGoogle Cloud Pub/SubDevelopment
jmsJava Message ServiceDevelopment
kafkaApache KafkaDevelopment
pulsarApache PulsarDevelopment
rabbitmqRabbitMQDevelopment
rocketmqApache RocketMQDevelopment
servicebusAzure Service BusDevelopment