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

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

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

ステータス: Development

AWS SNSに関するセマンティック規約は、このページで説明する規約に加えて、共通のAWS SDK属性を記述する一般的なAWS SDKに関するセマンティック規約を拡張します。

AWS SNSスパン

AWS SNSは、一般的なメッセージングスパンを特化させたものです。

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

Status: Development

このスパンは、Producerが1つ以上のメッセージをAmazon SNSに発行することを表します。

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

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

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

Attributes:

KeyStabilityRequirement LevelValue TypeDescriptionExample Values
messaging.operation.nameDevelopmentRequiredstringメッセージング操作のシステム固有の名前。send; publish
messaging.systemDevelopmentRequiredstringクライアント計装によって識別されたメッセージングシステム。[1]aws.sns
error.typeStableConditionally Required メッセージング操作が失敗した場合に限る。string操作が終了したエラーのクラスを記述します。[2]AuthorizationError; EndpointDisabled; Throttled
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
aws.request_idDevelopmentRecommendedstringレスポンスヘッダー x-amzn-requestidx-amzn-request-id、または x-amz-request-id として返されるAWSリクエストID。79b9da39-b7ae-508a-a6bc-864b2829c622; C9ER4AJX75574TDJ
aws.sns.topic.arnDevelopmentRecommendedstringAWS SNSトピックのARN。Amazon SNSのトピックは、通信チャネルとして機能する論理的なアクセスポイントです。arn:aws:sns:us-east-1:123456789012:mystack-mytopic-NZJ5JSMVGFIE
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操作が実行されたメッセージングIntermediaryノードのピアアドレス。[10]10.1.2.80; /tmp/my.sock
network.peer.portStableRecommended network.peer.address が設定されている場合に限る。int操作が実行されたメッセージングIntermediaryノードのピアポート。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: "aws.sns" に設定しなければなりません(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] network.peer.address: 個々のメッセージングシステムに関するセマンティック規約は、network.peer.* 属性が適用可能かどうかを文書化すべきです(SHOULD)。ネットワークピアのアドレスとポートは、アプリケーションが個々のIntermediaryノードと直接やり取りする場合に重要です。メッセージング操作に(再試行などによって)複数のネットワーク呼び出しが関与する場合、最後に接続したノードのアドレスを使用すべきです(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つ以上のメッセージがConsumerによって処理されます。Development
receive1つ以上のメッセージがConsumerによって要求されます。この操作はpullベースのシナリオを指し、Consumerがメッセージングの SDKのメソッドを明示的に呼び出してメッセージを受信します。Development
send1つ以上のメッセージがIntermediaryへの送信のために提供されます。単一のメッセージが送信される場合、“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