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

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

メッセージングクライアントメトリクスに関するセマンティック規約

ステータス: Development

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

共通メトリクス

メトリクス: messaging.client.operation.duration

このメトリクスがメッセージングスパンと併せて報告される場合、メトリクスの値は対応するスパンの期間と同じにすべきです(SHOULD)。

このメトリクスは推奨です。

このメトリクスは、ExplicitBucketBoundaries advisoryパラメータ[ 0.005, 0.01, 0.025, 0.05, 0.075, 0.1, 0.25, 0.5, 0.75, 1, 2.5, 5, 7.5, 10 ] を指定すべきです(SHOULD)。

NameInstrument TypeUnit (UCUM)DescriptionStabilityEntity Associations
messaging.client.operation.durationHistogramsProducerまたはconsumerクライアントによって開始されたメッセージング操作の期間。[1]Development

[1]: このメトリクスは、処理の期間を報告するために使用するべきではありません(SHOULD NOT)。処理の期間は messaging.process.duration メトリクスで報告されます。

Attributes:

KeyStabilityRequirement LevelValue TypeDescriptionExample Values
messaging.operation.nameDevelopmentRequiredstringメッセージング操作のシステム固有の名前。send; receive; ack
messaging.systemDevelopmentRequiredstringクライアント計装によって識別されたメッセージングシステム。[1]activemq; aws.sns; aws_sqs
error.typeStableConditionally Required メッセージング操作が失敗した場合に限る。string操作が終了したエラーのクラスを記述します。[2]amqp:decode-error; KAFKA_STORAGE_ERROR; channel-error
messaging.consumer.group.nameDevelopmentConditionally Required 適用可能な場合。stringconsumerが関連付けられているconsumerグループの名前。[3]my-group; indexer
messaging.destination.nameDevelopmentConditionally Required [4]stringメッセージの宛先名[5]MyQueue; MyTopic
messaging.destination.subscription.nameDevelopmentConditionally Required 適用可能な場合。stringメッセージが消費される宛先サブスクリプションの名前。[6]subscription-a
messaging.destination.templateDevelopmentConditionally Required 利用可能な場合。stringメッセージング宛先名の低カーディナリティな表現[7]/customers/{customerId}
messaging.operation.typeDevelopmentConditionally Required 適用可能な場合。stringメッセージング操作の種別を識別する文字列。[8]create; send; receive
server.addressStableConditionally Required 利用可能な場合。string利用可能であればリバースDNSルックアップなしのサーバードメイン名。それ以外の場合はIPアドレスまたはUNIXドメインソケット名。[9]example.com; 10.1.2.80; /tmp/my.sock
messaging.destination.partition.idDevelopmentRecommendedstringメッセージが送信または受信されるパーティションの識別子。messaging.destination.name の中で一意です。1
server.portStableRecommendedintサーバーのポート番号。[10]80; 8080; 443

[1] messaging.system: 実際のメッセージングシステムは、クライアントに知られているものと異なる場合があります。例えば、KafkaクライアントライブラリをAzure Event Hubsとの通信に使用する場合、messaging.system は計装が知り得る範囲で最善の値として kafka に設定されます。

[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.consumer.group.name: 個々のメッセージングシステムに関するセマンティック規約は、messaging.consumer.group.name が適用可能かどうか、そしてそのシステムの文脈で何を意味するかを文書化すべきです(SHOULD)。

[4] messaging.destination.name: messaging.destination.name が低カーディナリティであることが分かっている場合に限る。それ以外の場合は、messaging.destination.template を設定してもかまいません(MAY)。

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

[6] messaging.destination.subscription.name: 個々のメッセージングシステムに関するセマンティック規約は、messaging.destination.subscription.name が適用可能かどうか、そしてそのシステムの文脈で何を意味するかを文書化すべきです(SHOULD)。

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

[8] messaging.operation.type: カスタム値を使用する場合、低カーディナリティでなければなりません(MUST)。

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

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

Producerメトリクス

メトリクス: messaging.client.sent.messages

このメトリクスは推奨です。

NameInstrument TypeUnit (UCUM)DescriptionStabilityEntity Associations
messaging.client.sent.messagesCounter{message}Producerがブローカーへの送信を試みたメッセージの数。[1]Development

[1]: このメトリクスは、作成されたがまだ送信されていないメッセージを数えてはなりません(MUST NOT)。

Attributes:

KeyStabilityRequirement LevelValue TypeDescriptionExample Values
messaging.operation.nameDevelopmentRequiredstringメッセージング操作のシステム固有の名前。send; schedule; enqueue
messaging.systemDevelopmentRequiredstringクライアント計装によって識別されたメッセージングシステム。[1]activemq; aws.sns; aws_sqs
error.typeStableConditionally Required メッセージング操作が失敗した場合に限る。string操作が終了したエラーのクラスを記述します。[2]amqp:decode-error; KAFKA_STORAGE_ERROR; channel-error
messaging.destination.nameDevelopmentConditionally Required [3]stringメッセージの宛先名[4]MyQueue; MyTopic
messaging.destination.templateDevelopmentConditionally Required 利用可能な場合。stringメッセージング宛先名の低カーディナリティな表現[5]/customers/{customerId}
server.addressStableConditionally Required 利用可能な場合。string利用可能であればリバースDNSルックアップなしのサーバードメイン名。それ以外の場合はIPアドレスまたはUNIXドメインソケット名。[6]example.com; 10.1.2.80; /tmp/my.sock
messaging.destination.partition.idDevelopmentRecommendedstringメッセージが送信または受信されるパーティションの識別子。messaging.destination.name の中で一意です。1
server.portStableRecommendedintサーバーのポート番号。[7]80; 8080; 443

[1] messaging.system: 実際のメッセージングシステムは、クライアントに知られているものと異なる場合があります。例えば、KafkaクライアントライブラリをAzure Event Hubsとの通信に使用する場合、messaging.system は計装が知り得る範囲で最善の値として kafka に設定されます。

[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.destination.name: messaging.destination.name が低カーディナリティであることが分かっている場合に限る。それ以外の場合は、messaging.destination.template を設定してもかまいません(MAY)。

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

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

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

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


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

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

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

Consumerメトリクス

メトリクス: messaging.client.consumed.messages

このメトリクスは推奨です。

NameInstrument TypeUnit (UCUM)DescriptionStabilityEntity Associations
messaging.client.consumed.messagesCounter{message}アプリケーションに配信されたメッセージの数。[1]Development

[1]: ブローカーから取得されたメッセージの数、またはpushベースのシナリオでアプリケーションにディスパッチされたメッセージの数を記録します。 このメトリクスはメッセージの配信ごとに1回報告すべきです(SHOULD)。例えば、単一のメッセージ配信について受信操作と処理操作の両方が計装されている場合、このカウンターはメッセージが受信された時点でインクリメントされ、処理された時点では報告されません。

Attributes:

KeyStabilityRequirement LevelValue TypeDescriptionExample Values
messaging.operation.nameDevelopmentRequiredstringメッセージング操作のシステム固有の名前。receive; peek; poll; consume
messaging.systemDevelopmentRequiredstringクライアント計装によって識別されたメッセージングシステム。[1]activemq; aws.sns; aws_sqs
error.typeStableConditionally Required メッセージング操作が失敗した場合に限る。string操作が終了したエラーのクラスを記述します。[2]amqp:decode-error; KAFKA_STORAGE_ERROR; channel-error
messaging.consumer.group.nameDevelopmentConditionally Required 適用可能な場合。stringconsumerが関連付けられているconsumerグループの名前。[3]my-group; indexer
messaging.destination.nameDevelopmentConditionally Required [4]stringメッセージの宛先名[5]MyQueue; MyTopic
messaging.destination.subscription.nameDevelopmentConditionally Required 適用可能な場合。stringメッセージが消費される宛先サブスクリプションの名前。[6]subscription-a
messaging.destination.templateDevelopmentConditionally Required 利用可能な場合。stringメッセージング宛先名の低カーディナリティな表現[7]/customers/{customerId}
server.addressStableConditionally Required 利用可能な場合。string利用可能であればリバースDNSルックアップなしのサーバードメイン名。それ以外の場合はIPアドレスまたはUNIXドメインソケット名。[8]example.com; 10.1.2.80; /tmp/my.sock
messaging.destination.partition.idDevelopmentRecommendedstringメッセージが送信または受信されるパーティションの識別子。messaging.destination.name の中で一意です。1
server.portStableRecommendedintサーバーのポート番号。[9]80; 8080; 443

[1] messaging.system: 実際のメッセージングシステムは、クライアントに知られているものと異なる場合があります。例えば、KafkaクライアントライブラリをAzure Event Hubsとの通信に使用する場合、messaging.system は計装が知り得る範囲で最善の値として kafka に設定されます。

[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.consumer.group.name: 個々のメッセージングシステムに関するセマンティック規約は、messaging.consumer.group.name が適用可能かどうか、そしてそのシステムの文脈で何を意味するかを文書化すべきです(SHOULD)。

[4] messaging.destination.name: messaging.destination.name が低カーディナリティであることが分かっている場合に限る。それ以外の場合は、messaging.destination.template を設定してもかまいません(MAY)。

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

[6] messaging.destination.subscription.name: 個々のメッセージングシステムに関するセマンティック規約は、messaging.destination.subscription.name が適用可能かどうか、そしてそのシステムの文脈で何を意味するかを文書化すべきです(SHOULD)。

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

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

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


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

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

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.process.duration

このメトリクスがメッセージング処理スパンと併せて報告される場合、メトリクスの値は対応するスパンの期間と同じにすべきです(SHOULD)。

このメトリクスは、push型のメッセージ配信、およびpullベースのシナリオで計装された処理操作の両方について推奨です。

このメトリクスは、ExplicitBucketBoundaries advisoryパラメータ[ 0.005, 0.01, 0.025, 0.05, 0.075, 0.1, 0.25, 0.5, 0.75, 1, 2.5, 5, 7.5, 10 ] を指定すべきです(SHOULD)。

NameInstrument TypeUnit (UCUM)DescriptionStabilityEntity Associations
messaging.process.durationHistograms処理操作の期間。[1]Development

[1]: このメトリクスは、messaging.operation.typeprocess と一致する操作について報告しなければなりません(MUST)。

Attributes:

KeyStabilityRequirement LevelValue TypeDescriptionExample Values
messaging.operation.nameDevelopmentRequiredstringメッセージング操作のシステム固有の名前。process; consume; handle
messaging.systemDevelopmentRequiredstringクライアント計装によって識別されたメッセージングシステム。[1]activemq; aws.sns; aws_sqs
error.typeStableConditionally Required メッセージング操作が失敗した場合に限る。string操作が終了したエラーのクラスを記述します。[2]amqp:decode-error; KAFKA_STORAGE_ERROR; channel-error
messaging.consumer.group.nameDevelopmentConditionally Required 適用可能な場合。stringconsumerが関連付けられているconsumerグループの名前。[3]my-group; indexer
messaging.destination.nameDevelopmentConditionally Required [4]stringメッセージの宛先名[5]MyQueue; MyTopic
messaging.destination.subscription.nameDevelopmentConditionally Required 適用可能な場合。stringメッセージが消費される宛先サブスクリプションの名前。[6]subscription-a
messaging.destination.templateDevelopmentConditionally Required 利用可能な場合。stringメッセージング宛先名の低カーディナリティな表現[7]/customers/{customerId}
server.addressStableConditionally Required 利用可能な場合。string利用可能であればリバースDNSルックアップなしのサーバードメイン名。それ以外の場合はIPアドレスまたはUNIXドメインソケット名。[8]example.com; 10.1.2.80; /tmp/my.sock
messaging.destination.partition.idDevelopmentRecommendedstringメッセージが送信または受信されるパーティションの識別子。messaging.destination.name の中で一意です。1
server.portStableRecommendedintサーバーのポート番号。[9]80; 8080; 443

[1] messaging.system: 実際のメッセージングシステムは、クライアントに知られているものと異なる場合があります。例えば、KafkaクライアントライブラリをAzure Event Hubsとの通信に使用する場合、messaging.system は計装が知り得る範囲で最善の値として kafka に設定されます。

[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.consumer.group.name: 個々のメッセージングシステムに関するセマンティック規約は、messaging.consumer.group.name が適用可能かどうか、そしてそのシステムの文脈で何を意味するかを文書化すべきです(SHOULD)。

[4] messaging.destination.name: messaging.destination.name が低カーディナリティであることが分かっている場合に限る。それ以外の場合は、messaging.destination.template を設定してもかまいません(MAY)。

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

[6] messaging.destination.subscription.name: 個々のメッセージングシステムに関するセマンティック規約は、messaging.destination.subscription.name が適用可能かどうか、そしてそのシステムの文脈で何を意味するかを文書化すべきです(SHOULD)。

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

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

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


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

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

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