この記事は英語の原文を日本語に翻訳したものです。原文: https://opentelemetry.io/docs/specs/semconv/messaging/rocketmq/

翻訳元: open-telemetry/semantic-conventions v1.44.0(コミット e10a930

RocketMQに関するセマンティック規約

ステータス: Development

Apache RocketMQに関するセマンティック規約は、メッセージングに関するセマンティック規約を拡張し、その一部を上書きします。

[!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)。

Apache RocketMQスパン

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

Status: Development

Apache RocketMQに1つ以上のメッセージを送信するプロデューサーを表します。

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

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

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

Attributes:

KeyStabilityRequirement LevelValue TypeDescriptionExample Values
messaging.operation.nameDevelopmentRequiredstringメッセージング操作のシステム固有の名前。send; publish
messaging.rocketmq.namespaceDevelopmentRequiredstringRocketMQリソースの名前空間。異なる名前空間のリソースは個別に扱われます。myNamespace
messaging.systemDevelopmentRequiredstringクライアント計装によって識別されるメッセージングシステム。[1]rocketmq
error.typeStableConditionally Required メッセージング操作が失敗した場合に限る。string操作が終了したエラーのクラスを記述します。[2]TOPIC_NOT_EXIST; SERVICE_NOT_AVAILABLE; SYSTEM_BUSY
messaging.batch.message_countDevelopmentConditionally Required [3]intバッチ操作の範囲内で送信、受信、または処理されたメッセージの数。[4]0; 1; 2
messaging.destination.nameDevelopmentConditionally Required [5]stringメッセージの宛先名。[6]MyTopic
messaging.destination.templateDevelopmentConditionally Required [7]stringメッセージの宛先名の低カーディナリティな表現。[8]/customers/{customerId}
messaging.operation.typeDevelopmentConditionally Required 該当する場合。stringメッセージング操作の種類を識別する文字列。[9]send
messaging.rocketmq.message.delay_time_levelDevelopmentConditionally Required [10]int遅延メッセージの遅延時間レベル。メッセージの遅延時間を決定します。3
messaging.rocketmq.message.delivery_timestampDevelopmentConditionally Required [11]int遅延メッセージがコンシューマーに配送されることが期待されるタイムスタンプ(ミリ秒)。1665987217045
messaging.rocketmq.message.groupDevelopmentConditionally Required メッセージ種別がFIFOの場合。stringFIFOメッセージにとって必須。同じメッセージグループに属するメッセージは、同じコンシューマーグループ内で常に1つずつ順番に処理されます。myMessageGroup
messaging.client.idDevelopmentRecommendedstringメッセージを消費または生成するクライアントの一意な識別子。client-5; myhost@8742@s8083jm
messaging.destination.partition.idDevelopmentRecommended 該当する場合。stringメッセージが送信または受信されるパーティションの識別子。messaging.destination.name の中で一意。1
messaging.message.conversation_idDevelopmentRecommendedstringメッセージが属する会話を識別する会話ID。文字列として表現される。「correlation ID」と呼ばれることもある。MyConversationId
messaging.message.idDevelopmentRecommended スパンが単一のメッセージに対する操作を記述する場合。stringメッセージングシステムがメッセージの識別子として使用する値。文字列として表現される。452a7c7c7c7048c2f887f61572b18fc2
messaging.rocketmq.message.keysDevelopmentRecommendedstring[]メッセージのキー。メッセージIDとは別にメッセージを識別する手段。["keyA", "keyB"]
messaging.rocketmq.message.tagDevelopmentRecommendedstringトピックとは別のメッセージの二次分類子。tagA
messaging.rocketmq.message.typeDevelopmentRecommendedstringメッセージの種別。normal; fifo; delay
network.peer.addressStableRecommended このメッセージングシステムに該当する場合。string操作が実行されたメッセージング中継ノードのピアアドレス。[12]10.1.2.80; /tmp/my.sock
network.peer.portStableRecommended network.peer.address が設定されている場合に限る。int操作が実行されたメッセージング中継ノードのピアポート。65123
server.addressStableRecommendedstring利用可能であればリバースDNSルックアップなしのサーバードメイン名。それ以外の場合はIPアドレスまたはUNIXドメインソケット名。[13]example.com; 10.1.2.80; /tmp/my.sock
server.portStableRecommendedintサーバーのポート番号。[14]80; 8080; 443
messaging.message.body.sizeDevelopmentOpt-Inintメッセージ本文のバイト数。単一メッセージの操作を記述するスパンにのみ適用可能。[15]1439
messaging.message.envelope.sizeDevelopmentOpt-Inintメッセージ本文とメタデータのバイト数。[16]2738

[1] messaging.system: "rocketmq" に設定しなければなりません(MUST)。

[2] 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 を設定する

[3] messaging.batch.message_count: スパンがメッセージのバッチに対する操作を記述する場合。

[4] messaging.batch.message_count: 計装は、単一のメッセージを扱うスパンに messaging.batch.message_count を設定するべきではありません(SHOULD NOT)。メッセージングクライアントライブラリが同じ操作についてバッチAPIと単一メッセージAPIの両方をサポートする場合、計装はバッチAPIには messaging.batch.message_count を使用すべきであり(SHOULD)、単一メッセージAPIには使用するべきではありません(SHOULD NOT)。

[5] messaging.destination.name: スパンが単一のメッセージに対する操作を記述する場合、またはその値がバッチ内のすべてのメッセージに当てはまる場合。

[6] messaging.destination.name: ブローカー内の特定のキュー、トピック、その他のエンティティを一意に識別すべきです(SHOULD)。ブローカーにそのような概念がない場合は、ブローカー自体を一意に識別すべきです(SHOULD)。

[7] messaging.destination.template: 利用可能な場合。宛先名の低カーディナリティが保証されない限り、計装は messaging.destination.name をテンプレートとして使用してはなりません(MUST NOT)。

[8] messaging.destination.template: 宛先名は、テンプレートから構築されることがあります。例えば、ユーザー名や製品IDを含む宛先名などです。この場合の宛先名自体は高カーディナリティですが、その基となるテンプレートは低カーディナリティであり、グルーピングや集計に効果的に利用できます。

[9] messaging.operation.type: send に設定すべきです(SHOULD)。

[10] messaging.rocketmq.message.delay_time_level: メッセージ種別が遅延であり、配送タイムスタンプが指定されていない場合。

[11] messaging.rocketmq.message.delivery_timestamp: メッセージ種別が遅延であり、遅延時間レベルが指定されていない場合。

[12] network.peer.address: 個々のメッセージングシステムに関するセマンティック規約は、network.peer.* 属性が適用可能かどうかを文書化すべきです(SHOULD)。 アプリケーションが個々の中継ノードと直接やり取りする場合、ネットワークピアアドレスとポートが重要になります。 メッセージング操作に(再試行などによる)複数のネットワーク呼び出しが含まれる場合、最後に接続したノードのアドレスを使用すべきです(SHOULD)。

[13] server.address: 利用可能であればリバースDNSルックアップなしのブローカーのサーバードメイン名。それ以外の場合はIPアドレスまたはUNIXドメインソケット名。

[14] server.port: クライアント側から観測し、かつ中継者を経由して通信している場合、server.port は、利用可能であれば、(プロキシなどの)中継者の背後にあるサーバーポートを表すべきです(SHOULD)。

[15] messaging.message.body.size: これは、圧縮後または圧縮前のいずれのボディサイズも指すことができます。両方のサイズが分かっている場合は、圧縮前のサイズを使用すべきです。

[16] 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.rocketmq.message.type には、次のよく知られた値の一覧があります。いずれかが該当する場合はその値を使用しなければならず(MUST)、それ以外の場合は独自の値を使ってもかまいません(MAY)。

ValueDescriptionStability
delay遅延メッセージDevelopment
fifoFIFOメッセージDevelopment
normal通常メッセージDevelopment
transactionトランザクションメッセージ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

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

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

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

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

Attributes:

KeyStabilityRequirement LevelValue TypeDescriptionExample Values
messaging.consumer.group.nameDevelopmentRequiredstringRocketMQのコンシューマーグループ名my-group; indexer
messaging.operation.nameDevelopmentRequiredstringメッセージング操作のシステム固有の名前。receive; poll
messaging.rocketmq.namespaceDevelopmentRequiredstringRocketMQリソースの名前空間。異なる名前空間のリソースは個別に扱われます。myNamespace
messaging.systemDevelopmentRequiredstringクライアント計装によって識別されるメッセージングシステム。[1]rocketmq
error.typeStableConditionally Required メッセージング操作が失敗した場合に限る。string操作が終了したエラーのクラスを記述します。[2]TOPIC_NOT_EXIST; SERVICE_NOT_AVAILABLE; SYSTEM_BUSY
messaging.batch.message_countDevelopmentConditionally Required [3]intバッチ操作の範囲内で送信、受信、または処理されたメッセージの数。[4]0; 1; 2
messaging.destination.nameDevelopmentConditionally Required [5]stringメッセージの宛先名。[6]MyTopic
messaging.destination.templateDevelopmentConditionally Required [7]stringメッセージの宛先名の低カーディナリティな表現。[8]/customers/{customerId}
messaging.operation.typeDevelopmentConditionally Required 該当する場合。stringメッセージング操作の種類を識別する文字列。[9]receive
messaging.rocketmq.message.groupDevelopmentConditionally Required メッセージ種別がFIFOの場合。stringFIFOメッセージにとって必須。同じメッセージグループに属するメッセージは、同じコンシューマーグループ内で常に1つずつ順番に処理されます。myMessageGroup
messaging.client.idDevelopmentRecommendedstringメッセージを消費または生成するクライアントの一意な識別子。client-5; myhost@8742@s8083jm
messaging.destination.partition.idDevelopmentRecommended 該当する場合。stringメッセージが送信または受信されるパーティションの識別子。messaging.destination.name の中で一意。1
messaging.message.conversation_idDevelopmentRecommendedstringメッセージが属する会話を識別する会話ID。文字列として表現される。「correlation ID」と呼ばれることもある。MyConversationId
messaging.message.idDevelopmentRecommended スパンが単一のメッセージに対する操作を記述する場合。stringメッセージングシステムがメッセージの識別子として使用する値。文字列として表現される。452a7c7c7c7048c2f887f61572b18fc2
messaging.rocketmq.consumption_modelDevelopmentRecommendedstringメッセージ消費のモデル。コンシューマースパンにのみ適用されます。clustering; broadcasting
messaging.rocketmq.message.keysDevelopmentRecommendedstring[]メッセージのキー。メッセージIDとは別にメッセージを識別する手段。["keyA", "keyB"]
messaging.rocketmq.message.tagDevelopmentRecommendedstringトピックとは別のメッセージの二次分類子。tagA
messaging.rocketmq.message.typeDevelopmentRecommendedstringメッセージの種別。normal; fifo; delay
network.peer.addressStableRecommended このメッセージングシステムに該当する場合。string操作が実行されたメッセージング中継ノードのピアアドレス。[10]10.1.2.80; /tmp/my.sock
network.peer.portStableRecommended network.peer.address が設定されている場合に限る。int操作が実行されたメッセージング中継ノードのピアポート。65123
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.system: "rocketmq" に設定しなければなりません(MUST)。

[2] 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 を設定する

[3] messaging.batch.message_count: スパンがメッセージのバッチに対する操作を記述する場合。

[4] messaging.batch.message_count: 計装は、単一のメッセージを扱うスパンに messaging.batch.message_count を設定するべきではありません(SHOULD NOT)。メッセージングクライアントライブラリが同じ操作についてバッチAPIと単一メッセージAPIの両方をサポートする場合、計装はバッチAPIには messaging.batch.message_count を使用すべきであり(SHOULD)、単一メッセージAPIには使用するべきではありません(SHOULD NOT)。

[5] messaging.destination.name: スパンが単一のメッセージに対する操作を記述する場合、またはその値がバッチ内のすべてのメッセージに当てはまる場合。

[6] messaging.destination.name: ブローカー内の特定のキュー、トピック、その他のエンティティを一意に識別すべきです(SHOULD)。ブローカーにそのような概念がない場合は、ブローカー自体を一意に識別すべきです(SHOULD)。

[7] messaging.destination.template: 利用可能な場合。宛先名の低カーディナリティが保証されない限り、計装は messaging.destination.name をテンプレートとして使用してはなりません(MUST NOT)。

[8] messaging.destination.template: 宛先名は、テンプレートから構築されることがあります。例えば、ユーザー名や製品IDを含む宛先名などです。この場合の宛先名自体は高カーディナリティですが、その基となるテンプレートは低カーディナリティであり、グルーピングや集計に効果的に利用できます。

[9] messaging.operation.type: receive に設定すべきです(SHOULD)。

[10] network.peer.address: 個々のメッセージングシステムに関するセマンティック規約は、network.peer.* 属性が適用可能かどうかを文書化すべきです(SHOULD)。 アプリケーションが個々の中継ノードと直接やり取りする場合、ネットワークピアアドレスとポートが重要になります。 メッセージング操作に(再試行などによる)複数のネットワーク呼び出しが含まれる場合、最後に接続したノードのアドレスを使用すべきです(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.rocketmq.consumption_model には、次のよく知られた値の一覧があります。いずれかが該当する場合はその値を使用しなければならず(MUST)、それ以外の場合は独自の値を使ってもかまいません(MAY)。

ValueDescriptionStability
broadcastingブロードキャスト型の消費モデルDevelopment
clusteringクラスタリング型の消費モデルDevelopment

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

ValueDescriptionStability
delay遅延メッセージDevelopment
fifoFIFOメッセージDevelopment
normal通常メッセージDevelopment
transactionトランザクションメッセージ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

Apache RocketMQから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.consumer.group.nameDevelopmentRequiredstringRocketMQのコンシューマーグループ名my-group; indexer
messaging.operation.nameDevelopmentRequiredstringメッセージング操作のシステム固有の名前。process; consume
messaging.rocketmq.namespaceDevelopmentRequiredstringRocketMQリソースの名前空間。異なる名前空間のリソースは個別に扱われます。myNamespace
messaging.systemDevelopmentRequiredstringクライアント計装によって識別されるメッセージングシステム。[1]rocketmq
error.typeStableConditionally Required メッセージング操作が失敗した場合に限る。string操作が終了したエラーのクラスを記述します。[2]TOPIC_NOT_EXIST; SERVICE_NOT_AVAILABLE; SYSTEM_BUSY
messaging.batch.message_countDevelopmentConditionally Required [3]intバッチ操作の範囲内で送信、受信、または処理されたメッセージの数。[4]0; 1; 2
messaging.destination.nameDevelopmentConditionally Required [5]stringメッセージの宛先名。[6]MyTopic
messaging.destination.templateDevelopmentConditionally Required [7]stringメッセージの宛先名の低カーディナリティな表現。[8]/customers/{customerId}
messaging.operation.typeDevelopmentConditionally Required 該当する場合。stringメッセージング操作の種類を識別する文字列。[9]process
messaging.rocketmq.message.groupDevelopmentConditionally Required メッセージ種別がFIFOの場合。stringFIFOメッセージにとって必須。同じメッセージグループに属するメッセージは、同じコンシューマーグループ内で常に1つずつ順番に処理されます。myMessageGroup
messaging.client.idDevelopmentRecommendedstringメッセージを消費または生成するクライアントの一意な識別子。client-5; myhost@8742@s8083jm
messaging.destination.partition.idDevelopmentRecommended 該当する場合。stringメッセージが送信または受信されるパーティションの識別子。messaging.destination.name の中で一意。1
messaging.message.conversation_idDevelopmentRecommendedstringメッセージが属する会話を識別する会話ID。文字列として表現される。「correlation ID」と呼ばれることもある。MyConversationId
messaging.message.idDevelopmentRecommended スパンが単一のメッセージに対する操作を記述する場合。stringメッセージングシステムがメッセージの識別子として使用する値。文字列として表現される。452a7c7c7c7048c2f887f61572b18fc2
messaging.rocketmq.consumption_modelDevelopmentRecommendedstringメッセージ消費のモデル。コンシューマースパンにのみ適用されます。clustering; broadcasting
messaging.rocketmq.message.keysDevelopmentRecommendedstring[]メッセージのキー。メッセージIDとは別にメッセージを識別する手段。["keyA", "keyB"]
messaging.rocketmq.message.tagDevelopmentRecommendedstringトピックとは別のメッセージの二次分類子。tagA
messaging.rocketmq.message.typeDevelopmentRecommendedstringメッセージの種別。normal; fifo; delay
server.addressStableRecommendedstring利用可能であればリバースDNSルックアップなしのサーバードメイン名。それ以外の場合はIPアドレスまたはUNIXドメインソケット名。[10]example.com; 10.1.2.80; /tmp/my.sock
server.portStableRecommendedintサーバーのポート番号。[11]80; 8080; 443
messaging.message.body.sizeDevelopmentOpt-Inintメッセージ本文のバイト数。単一メッセージの操作を記述するスパンにのみ適用可能。[12]1439
messaging.message.envelope.sizeDevelopmentOpt-Inintメッセージ本文とメタデータのバイト数。[13]2738

[1] messaging.system: "rocketmq" に設定しなければなりません(MUST)。

[2] 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 を設定する

[3] messaging.batch.message_count: スパンがメッセージのバッチに対する操作を記述する場合。

[4] messaging.batch.message_count: 計装は、単一のメッセージを扱うスパンに messaging.batch.message_count を設定するべきではありません(SHOULD NOT)。メッセージングクライアントライブラリが同じ操作についてバッチAPIと単一メッセージAPIの両方をサポートする場合、計装はバッチAPIには messaging.batch.message_count を使用すべきであり(SHOULD)、単一メッセージAPIには使用するべきではありません(SHOULD NOT)。

[5] messaging.destination.name: スパンが単一のメッセージに対する操作を記述する場合、またはその値がバッチ内のすべてのメッセージに当てはまる場合。

[6] messaging.destination.name: ブローカー内の特定のキュー、トピック、その他のエンティティを一意に識別すべきです(SHOULD)。ブローカーにそのような概念がない場合は、ブローカー自体を一意に識別すべきです(SHOULD)。

[7] messaging.destination.template: 利用可能な場合。宛先名の低カーディナリティが保証されない限り、計装は messaging.destination.name をテンプレートとして使用してはなりません(MUST NOT)。

[8] messaging.destination.template: 宛先名は、テンプレートから構築されることがあります。例えば、ユーザー名や製品IDを含む宛先名などです。この場合の宛先名自体は高カーディナリティですが、その基となるテンプレートは低カーディナリティであり、グルーピングや集計に効果的に利用できます。

[9] messaging.operation.type: process に設定すべきです(SHOULD)。

[10] server.address: 利用可能であればリバースDNSルックアップなしのブローカーのサーバードメイン名。それ以外の場合はIPアドレスまたはUNIXドメインソケット名。

[11] server.port: クライアント側から観測し、かつ中継者を経由して通信している場合、server.port は、利用可能であれば、(プロキシなどの)中継者の背後にあるサーバーポートを表すべきです(SHOULD)。

[12] messaging.message.body.size: これは、圧縮後または圧縮前のいずれのボディサイズも指すことができます。両方のサイズが分かっている場合は、圧縮前のサイズを使用すべきです。

[13] 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.rocketmq.consumption_model には、次のよく知られた値の一覧があります。いずれかが該当する場合はその値を使用しなければならず(MUST)、それ以外の場合は独自の値を使ってもかまいません(MAY)。

ValueDescriptionStability
broadcastingブロードキャスト型の消費モデルDevelopment
clusteringクラスタリング型の消費モデルDevelopment

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

ValueDescriptionStability
delay遅延メッセージDevelopment
fifoFIFOメッセージDevelopment
normal通常メッセージDevelopment
transactionトランザクションメッセージ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

messaging.client.id は、Apache RocketMQ SDKによって自動生成されるクライアントIDに設定すべきです(SHOULD)。