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

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

Google Cloud Pub/Subに関するセマンティック規約

ステータス: Development

Google Cloud Pub/Subに関するセマンティック規約は、メッセージングに関するセマンティック規約を拡張し、上書きします。

[!IMPORTANT]

この文書のv1.24.0 以前のバージョンを使っている既存のメッセージング計装は、次に従うべきです。

  • メッセージングセマンティック規約が安定版として宣言されるまで、デフォルトで発行するメッセージング規約のバージョンを変更してはなりません(SHOULD NOT)。 規約には、属性、メトリクス名、スパン名、Span kind、計測単位などが含まれますが、これらに限定されません。
  • 既存のメジャーバージョンにおいて、カテゴリー別の値をカンマ区切りで列挙するリストとして環境変数 OTEL_SEMCONV_STABILITY_OPT_IN を導入すべきです(SHOULD) (例: http、databases、messaging)。値の一覧は次のとおりです。
    • messaging - 新しい安定版のメッセージング規約を発行し、それまで計装が発行していた古い実験的なメッセージング規約の発行を停止します。
    • messaging/dup - 古い規約と安定版の規約の両方を発行し、円滑な移行を可能にします。
    • これらの値がいずれも指定されていない場合のデフォルトの動作は、その計装がそれまで発行していた古い実験的なメッセージング規約のバージョンをそのまま発行し続けることです。
    • 注記: 両方の値が指定されている場合、messaging/dupmessaging よりも優先されます。
  • 両方の規約セットを発行し始めてから少なくとも6か月間は、既存のメジャーバージョンを(少なくともセキュリティパッチの適用という形で)維持すべきです(SHOULD)。
  • 次のメジャーバージョンでは、この環境変数を削除すべきです(SHOULD)。
  • リストに messaging/dup が含まれる場合、スパン名やSpan kindなど「単一の」値を持つ概念については、新しい安定版の値を発行すべきです(SHOULD)。

Google Cloud Pub/Subスパン

Create span

Status: Development

Google Cloud Pub/Subへの発行のために作成されるメッセージを記述します。

「Create」スパンは常に単一のメッセージを指し、バッチ送信シナリオにおいてメッセージに一意な作成コンテキストを提供するために使用されます。「Create」スパンは、それにリンクするクライアントの「Send」スパン(messaging.send.client)と組み合わせてのみ使用されます。「Send」スパン自体が作成コンテキストとして機能する場合は、代わりにプロデューサーの「Send」スパン(messaging.send.producer)を使用し、「Create」スパンは省略してください。詳細はProducer spansを参照してください。

Span kindPRODUCER であるべきです(SHOULD)。

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

Attributes:

KeyStabilityRequirement LevelValue TypeDescriptionExample Values
messaging.operation.nameDevelopmentRequiredstringメッセージング操作のシステム固有の名前。[1]create
messaging.systemDevelopmentRequiredstringクライアント計装によって識別されるメッセージングシステム。[2]gcp_pubsub
error.typeStableConditionally Required メッセージング操作が失敗した場合に限る。string操作が終了したエラーのクラスを記述します。[3]NOT_FOUND; RESOURCE_EXHAUSTED; UNAVAILABLE
messaging.destination.nameDevelopmentConditionally Required [4]stringメッセージの宛先名。[5]MyTopic
messaging.destination.templateDevelopmentConditionally Required [6]stringメッセージング宛先名の低カーディナリティな表現。[7]/customers/{customerId}
messaging.gcp_pubsub.message.ordering_keyDevelopmentConditionally Required メッセージ種別に順序付けキーが設定されている場合。string与えられたメッセージの順序付けキー。この属性が存在しない場合、メッセージには順序付けキーがありません。ordering_key
messaging.operation.typeDevelopmentConditionally Required 該当する場合。stringメッセージング操作の種類を識別する文字列。[8]create
messaging.destination.partition.idDevelopmentRecommended 該当する場合。stringメッセージが送信される、または受信されるパーティションの識別子。messaging.destination.name 内で一意です。1
messaging.message.conversation_idDevelopmentRecommendedstringメッセージが属する会話を識別する会話ID(文字列として表現)。「Correlation ID」と呼ばれることもあります。MyConversationId
messaging.message.idDevelopmentRecommended スパンが単一メッセージに対する操作を記述する場合。stringメッセージングシステムがメッセージの識別子として使用する値(文字列として表現)。452a7c7c7c7048c2f887f61572b18fc2
server.addressStableRecommendedstring利用可能であればリバースDNSルックアップなしのサーバードメイン名。それ以外の場合はIPアドレスまたはUNIXドメインソケット名。[9]example.com; 10.1.2.80; /tmp/my.sock
server.portStableRecommendedintサーバーのポート番号。[10]80; 8080; 443
messaging.message.body.sizeDevelopmentOpt-Inintメッセージ本文のバイト数。単一メッセージ操作を記述するスパンにのみ適用されます。[11]1439
messaging.message.envelope.sizeDevelopmentOpt-Inintメッセージ本文とメタデータのバイト数。[12]2738

[1] messaging.operation.name: create に設定すべきです(SHOULD)。

[2] messaging.system: "gcp_pubsub" に設定しなければなりません(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.destination.name: スパンが単一メッセージに対する操作を記述する場合、またはその値がバッチ内のすべてのメッセージに当てはまる場合。

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

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

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

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

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

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

[11] messaging.message.body.size: これは圧縮後または圧縮前のいずれの本文サイズも指す場合があります。両方のサイズが分かっている場合、圧縮前のサイズを使用すべきです(SHOULD)。

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

次の属性は、サンプリング判断に重要となりうるため、(いずれかが提供される場合)スパン作成時点で提供すべきです(SHOULD)。


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

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

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

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

Send span (producer)

Status: Development

Producerが1つ以上のメッセージをGoogle Cloud Pub/Subに発行することを記述します。

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

Span kindPRODUCER であるべきです(SHOULD)。

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

Attributes:

KeyStabilityRequirement LevelValue TypeDescriptionExample Values
messaging.operation.nameDevelopmentRequiredstringメッセージング操作のシステム固有の名前。[1]send
messaging.systemDevelopmentRequiredstringクライアント計装によって識別されるメッセージングシステム。[2]gcp_pubsub
error.typeStableConditionally Required メッセージング操作が失敗した場合に限る。string操作が終了したエラーのクラスを記述します。[3]NOT_FOUND; RESOURCE_EXHAUSTED; UNAVAILABLE
messaging.batch.message_countDevelopmentConditionally Required [4]intバッチ操作のスコープ内で送信、受信、または処理されたメッセージの数。[5]0; 1; 2
messaging.destination.nameDevelopmentConditionally Required [6]stringメッセージの宛先名。[7]MyTopic
messaging.destination.templateDevelopmentConditionally Required [8]stringメッセージング宛先名の低カーディナリティな表現。[9]/customers/{customerId}
messaging.gcp_pubsub.message.ordering_keyDevelopmentConditionally Required メッセージ種別に順序付けキーが設定されている場合。string与えられたメッセージの順序付けキー。この属性が存在しない場合、メッセージには順序付けキーがありません。ordering_key
messaging.operation.typeDevelopmentConditionally Required 該当する場合。stringメッセージング操作の種類を識別する文字列。[10]send
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
network.peer.addressStableRecommended このメッセージングシステムに該当する場合。string操作が実行されたメッセージング中継ノードのピアアドレス。[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.operation.name: send に設定すべきです(SHOULD)。

[2] messaging.system: "gcp_pubsub" に設定しなければなりません(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.name: スパンが単一メッセージに対する操作を記述する場合、またはその値がバッチ内のすべてのメッセージに当てはまる場合。

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

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

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

[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: これは圧縮後または圧縮前のいずれの本文サイズも指す場合があります。両方のサイズが分かっている場合、圧縮前のサイズを使用すべきです(SHOULD)。

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

次の属性は、サンプリング判断に重要となりうるため、(いずれかが提供される場合)スパン作成時点で提供すべきです(SHOULD)。


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

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

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

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

Send span (client)

Status: Development

Producerが1つ以上のメッセージをGoogle Cloud Pub/Subに発行することを記述します。

メッセージに対して「Create」スパン(またはカスタムの作成コンテキスト)が既に存在する場合に、このスパンを使用します。「Send」スパンは転送操作のみを記述し、メッセージに注入された作成コンテキストにリンクします。詳細はProducer spansを参照してください。

Span kindCLIENT であるべきです(SHOULD)。

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

Attributes:

KeyStabilityRequirement LevelValue TypeDescriptionExample Values
messaging.operation.nameDevelopmentRequiredstringメッセージング操作のシステム固有の名前。[1]send
messaging.systemDevelopmentRequiredstringクライアント計装によって識別されるメッセージングシステム。[2]gcp_pubsub
error.typeStableConditionally Required メッセージング操作が失敗した場合に限る。string操作が終了したエラーのクラスを記述します。[3]NOT_FOUND; RESOURCE_EXHAUSTED; UNAVAILABLE
messaging.batch.message_countDevelopmentConditionally Required [4]intバッチ操作のスコープ内で送信、受信、または処理されたメッセージの数。[5]0; 1; 2
messaging.destination.nameDevelopmentConditionally Required [6]stringメッセージの宛先名。[7]MyTopic
messaging.destination.templateDevelopmentConditionally Required [8]stringメッセージング宛先名の低カーディナリティな表現。[9]/customers/{customerId}
messaging.gcp_pubsub.message.ordering_keyDevelopmentConditionally Required メッセージ種別に順序付けキーが設定されている場合。string与えられたメッセージの順序付けキー。この属性が存在しない場合、メッセージには順序付けキーがありません。ordering_key
messaging.operation.typeDevelopmentConditionally Required 該当する場合。stringメッセージング操作の種類を識別する文字列。[10]send
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
network.peer.addressStableRecommended このメッセージングシステムに該当する場合。string操作が実行されたメッセージング中継ノードのピアアドレス。[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.operation.name: send に設定すべきです(SHOULD)。

[2] messaging.system: "gcp_pubsub" に設定しなければなりません(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.name: スパンが単一メッセージに対する操作を記述する場合、またはその値がバッチ内のすべてのメッセージに当てはまる場合。

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

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

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

[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: これは圧縮後または圧縮前のいずれの本文サイズも指す場合があります。両方のサイズが分かっている場合、圧縮前のサイズを使用すべきです(SHOULD)。

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

次の属性は、サンプリング判断に重要となりうるため、(いずれかが提供される場合)スパン作成時点で提供すべきです(SHOULD)。


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

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

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

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

Status: Development

Consumerが1つ以上のメッセージをGoogle Cloud Pub/Subから受信すること(pullベース)を記述します。

「Receive」スパンはpullベースのシナリオで作成されます。この場合、Consumerはメッセージを受信するためにメッセージングSDKのメソッドを明示的に呼び出します。詳細はConsumer spansを参照してください。

Span kindCLIENT であるべきです(SHOULD)。

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

Attributes:

KeyStabilityRequirement LevelValue TypeDescriptionExample Values
messaging.operation.nameDevelopmentRequiredstringメッセージング操作のシステム固有の名前。[1]receive
messaging.systemDevelopmentRequiredstringクライアント計装によって識別されるメッセージングシステム。[2]gcp_pubsub
error.typeStableConditionally Required メッセージング操作が失敗した場合に限る。string操作が終了したエラーのクラスを記述します。[3]NOT_FOUND; RESOURCE_EXHAUSTED; UNAVAILABLE
messaging.batch.message_countDevelopmentConditionally Required [4]intバッチ操作のスコープ内で送信、受信、または処理されたメッセージの数。[5]0; 1; 2
messaging.destination.nameDevelopmentConditionally Required [6]stringメッセージの宛先名。[7]MyTopic
messaging.destination.subscription.nameDevelopmentConditionally Required 該当する場合。stringGoogle Pub/Subのサブスクリプション名subscription-a
messaging.destination.templateDevelopmentConditionally Required [8]stringメッセージング宛先名の低カーディナリティな表現。[9]/customers/{customerId}
messaging.operation.typeDevelopmentConditionally Required 該当する場合。stringメッセージング操作の種類を識別する文字列。[10]receive
messaging.client.idDevelopmentRecommendedstringメッセージを消費または生成するクライアントの一意な識別子。client-5; myhost@8742@s8083jm
messaging.destination.partition.idDevelopmentRecommended 該当する場合。stringメッセージが送信される、または受信されるパーティションの識別子。messaging.destination.name 内で一意です。1
messaging.gcp_pubsub.message.ack_idDevelopmentRecommendedstring与えられたメッセージのack ID。ack_id
messaging.gcp_pubsub.message.delivery_attemptDevelopmentRecommendedint与えられたメッセージの配送試行回数。2
messaging.message.conversation_idDevelopmentRecommendedstringメッセージが属する会話を識別する会話ID(文字列として表現)。「Correlation ID」と呼ばれることもあります。MyConversationId
messaging.message.idDevelopmentRecommended スパンが単一メッセージに対する操作を記述する場合。stringメッセージングシステムがメッセージの識別子として使用する値(文字列として表現)。452a7c7c7c7048c2f887f61572b18fc2
network.peer.addressStableRecommended このメッセージングシステムに該当する場合。string操作が実行されたメッセージング中継ノードのピアアドレス。[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.operation.name: receive に設定すべきです(SHOULD)。

[2] messaging.system: "gcp_pubsub" に設定しなければなりません(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.name: スパンが単一メッセージに対する操作を記述する場合、またはその値がバッチ内のすべてのメッセージに当てはまる場合。

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

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

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

[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: これは圧縮後または圧縮前のいずれの本文サイズも指す場合があります。両方のサイズが分かっている場合、圧縮前のサイズを使用すべきです(SHOULD)。

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

次の属性は、サンプリング判断に重要となりうるため、(いずれかが提供される場合)スパン作成時点で提供すべきです(SHOULD)。


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

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

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

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

Status: Development

Consumerが1つ以上のメッセージをGoogle Cloud Pub/Subから処理すること(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.operation.nameDevelopmentRequiredstringメッセージング操作のシステム固有の名前。[1]subscribe
messaging.systemDevelopmentRequiredstringクライアント計装によって識別されるメッセージングシステム。[2]gcp_pubsub
error.typeStableConditionally Required メッセージング操作が失敗した場合に限る。string操作が終了したエラーのクラスを記述します。[3]NOT_FOUND; RESOURCE_EXHAUSTED; UNAVAILABLE
messaging.batch.message_countDevelopmentConditionally Required [4]intバッチ操作のスコープ内で送信、受信、または処理されたメッセージの数。[5]0; 1; 2
messaging.destination.nameDevelopmentConditionally Required [6]stringメッセージの宛先名。[7]MyTopic
messaging.destination.subscription.nameDevelopmentConditionally Required 該当する場合。stringGoogle Pub/Subのサブスクリプション名subscription-a
messaging.destination.templateDevelopmentConditionally Required [8]stringメッセージング宛先名の低カーディナリティな表現。[9]/customers/{customerId}
messaging.operation.typeDevelopmentConditionally Required 該当する場合。stringメッセージング操作の種類を識別する文字列。[10]process
messaging.client.idDevelopmentRecommendedstringメッセージを消費または生成するクライアントの一意な識別子。client-5; myhost@8742@s8083jm
messaging.destination.partition.idDevelopmentRecommended 該当する場合。stringメッセージが送信される、または受信されるパーティションの識別子。messaging.destination.name 内で一意です。1
messaging.gcp_pubsub.message.ack_idDevelopmentRecommendedstring与えられたメッセージのack ID。ack_id
messaging.gcp_pubsub.message.delivery_attemptDevelopmentRecommendedint与えられたメッセージの配送試行回数。2
messaging.message.conversation_idDevelopmentRecommendedstringメッセージが属する会話を識別する会話ID(文字列として表現)。「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.operation.name: subscribe に設定すべきです(SHOULD)。これはメッセージが受信された後から、確認応答(ack)、否定応答(nack)、または期限切れになるまでの時間を表します。

[2] messaging.system: "gcp_pubsub" に設定しなければなりません(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.name: スパンが単一メッセージに対する操作を記述する場合、またはその値がバッチ内のすべてのメッセージに当てはまる場合。

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

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

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

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

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

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

[13] messaging.message.body.size: これは圧縮後または圧縮前のいずれの本文サイズも指す場合があります。両方のサイズが分かっている場合、圧縮前のサイズを使用すべきです(SHOULD)。

[14] messaging.message.envelope.size: これは圧縮後または圧縮前のいずれのサイズも指す場合があります。両方のサイズが分かっている場合、圧縮前のサイズを使用すべきです(SHOULD)。

次の属性は、サンプリング判断に重要となりうるため、(いずれかが提供される場合)スパン作成時点で提供すべきです(SHOULD)。


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

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

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

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

Status: Development

Google Cloud Pub/Subの1つ以上のメッセージを決済(ack/nack/modack)することを記述します。

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

Span kindCLIENT であるべきです(SHOULD)。

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

Attributes:

KeyStabilityRequirement LevelValue TypeDescriptionExample Values
messaging.operation.nameDevelopmentRequiredstringメッセージング操作のシステム固有の名前。[1]ack; nack; modack
messaging.systemDevelopmentRequiredstringクライアント計装によって識別されるメッセージングシステム。[2]gcp_pubsub
error.typeStableConditionally Required メッセージング操作が失敗した場合に限る。string操作が終了したエラーのクラスを記述します。[3]NOT_FOUND; RESOURCE_EXHAUSTED; UNAVAILABLE
messaging.batch.message_countDevelopmentConditionally Required [4]intバッチ操作のスコープ内で送信、受信、または処理されたメッセージの数。[5]0; 1; 2
messaging.destination.nameDevelopmentConditionally Required [6]stringメッセージの宛先名。[7]MyTopic
messaging.destination.subscription.nameDevelopmentConditionally Required 該当する場合。stringGoogle Pub/Subのサブスクリプション名subscription-a
messaging.destination.templateDevelopmentConditionally Required [8]stringメッセージング宛先名の低カーディナリティな表現。[9]/customers/{customerId}
messaging.operation.typeDevelopmentConditionally Required 該当する場合。stringメッセージング操作の種類を識別する文字列。[10]settle
messaging.client.idDevelopmentRecommendedstringメッセージを消費または生成するクライアントの一意な識別子。client-5; myhost@8742@s8083jm
messaging.destination.partition.idDevelopmentRecommended 該当する場合。stringメッセージが送信される、または受信されるパーティションの識別子。messaging.destination.name 内で一意です。1
messaging.gcp_pubsub.message.ack_deadlineDevelopmentRecommendedintack期限変更リクエストに設定されたack期限(秒)。10
messaging.gcp_pubsub.message.ack_idDevelopmentRecommendedstring与えられたメッセージのack ID。ack_id
messaging.gcp_pubsub.message.delivery_attemptDevelopmentRecommendedint与えられたメッセージの配送試行回数。2
messaging.message.conversation_idDevelopmentRecommendedstringメッセージが属する会話を識別する会話ID(文字列として表現)。「Correlation ID」と呼ばれることもあります。MyConversationId
messaging.message.idDevelopmentRecommended スパンが単一メッセージに対する操作を記述する場合。stringメッセージングシステムがメッセージの識別子として使用する値(文字列として表現)。452a7c7c7c7048c2f887f61572b18fc2
network.peer.addressStableRecommended このメッセージングシステムに該当する場合。string操作が実行されたメッセージング中継ノードのピアアドレス。[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

[1] messaging.operation.name: Google Cloud Pub/Subの決済に対しては、次のよく知られた値の一覧があります。 いずれかが該当する場合はその値を使用しなければならず(MUST)、それ以外の場合は独自の値を使ってもかまいません(MAY)。

  • メッセージを確認応答(ack)または否定応答(nack)する場合は acknack
  • 単一メッセージまたはメッセージのバッチのリースを延長する場合は modack

[2] messaging.system: "gcp_pubsub" に設定しなければなりません(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.name: スパンが単一メッセージに対する操作を記述する場合、またはその値がバッチ内のすべてのメッセージに当てはまる場合。

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

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

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

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

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

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

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

次の属性は、サンプリング判断に重要となりうるため、(いずれかが提供される場合)スパン作成時点で提供すべきです(SHOULD)。


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

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

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

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

非同期バッチ発行の例

トピックTに対して2件のメッセージをバッチで非同期に発行するプロセスPの例です。

flowchart LR;
  subgraph PRODUCER
  direction LR
  CA[Span Create A]
  CB[Span Create B]
  P[Span Send A B]
  end
  CA-. link .-P;
  CB-. link .-P;

  classDef producer fill:green
  class P,CA,CB producer
  classDef normal fill:green
  class PA,PB,D1 normal
  linkStyle 0,1 color:green,stroke:green
フィールドまたは属性Producer Span Create AProducer Span Create BProducer Span Send A B
Span namecreate Tcreate Tsend T
リンクSpan Create A, Span Create B
SpanKindPRODUCERPRODUCERCLIENT
ステータスOkOkOk
messaging.batch.message_count2
messaging.destination.name"T""T""T"
messaging.operation.name"create""create""send"
messaging.operation.type"create""create""send"
messaging.message.id"a1""a2"
messaging.message.envelope.size11
messaging.system"gcp_pubsub""gcp_pubsub""gcp_pubsub"

単発pullの例

flowchart TD;
  subgraph CONSUMER
  direction LR
  R1[Receive A]
  SM1[Ack A]
  EM1[Modack A]
  end
  subgraph PRODUCER
  direction LR
  CM1[Create A]
  PM1[Send]
  end
  %% Link 0
  CM1-. link .-PM1;
  %% Link 1
  CM1-. link .-R1;
  %% Link 2
  R1-. link .-SM1;
  %% Link 3
  R1-. link .-EM1;

  %% Style the node and corresponding link
  %% Producer links and nodes
  classDef producer fill:green
  class PM1,CM1 producer
  linkStyle 0 color:green,stroke:green

  %% Consumer links and nodes
  classDef consumer fill:#49fcdc
  class R1 consumer
  linkStyle 1 color:#49fcdc,stroke:#49fcdc

  classDef ack fill:#577eb5
  class SM1 ack
  linkStyle 2 color:#577eb5,stroke:#577eb5

  classDef modack fill:#0560f2
  class EM1 modack
  linkStyle 3 color:#0560f2,stroke:#0560f2
フィールドまたは属性Producer Span Create AProducer Span SendConsumer Span Receive AConsumer Span Modack AConsumer Span Ack A
Span namecreate Tsend Treceive Smodack Sack S
リンクSpan Create ASpan Create ASpan Receive ASpan Receive A
SpanKindPRODUCERCLIENTCLIENTCLIENTCLIENT
ステータスOkOkOkOkOk
messaging.destination.name"T""T""S""S""S"
messaging.system"gcp_pubsub""gcp_pubsub""gcp_pubsub""gcp_pubsub""gcp_pubsub"
messaging.operation.name"create""send""receive""modack""ack"
messaging.operation.type"create""send""receive""settle"
messaging.message.id"a1""a1"
messaging.message.envelope.size111
messaging.gcp_pubsub.message.ack_id"ack_id1""ack_id1"
messaging.gcp_pubsub.message.delivery_attempt0
messaging.gcp_pubsub.message.ack_deadline0