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

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

OpenTelemetryとgRPCのセマンティック規約の間の互換性

gRPCプロジェクトは、OpenTelemetry Metricsの規約と、OpenTelemetry Tracingの実験的な規約を定義しています。

これらの規約は、このリポジトリでホストされているOpenTelemetry gRPCの規約とは異なります。

この文書では、このリポジトリでホストされているOpenTelemetryの規約と、gRPCネイティブの規約との間のマッピング(該当する場合)を示します。

メトリクス

詳細については、gRPCの規約OpenTelemetryの規約を参照してください。

メトリクスのマッピング

gRPCのメトリクスOpenTelemetryのメトリクス変換に関する補足
grpc.client.call.durationrpc.client.call.duration属性のマッピングを下記参照。それ以外はメトリクスとして等価
grpc.server.call.durationrpc.server.call.duration属性のマッピングを下記参照。それ以外はメトリクスとして等価
grpc.client.attempt.started対応するものなし
grpc.client.attempt.duration対応するものなし
grpc.client.attempt.sent_total_compressed_message_size対応するものなし
grpc.client.attempt.rcvd_total_compressed_message_size対応するものなし
grpc.server.call.started対応するものなし
grpc.server.call.sent_total_compressed_message_size対応するものなし
grpc.server.call.rcvd_total_compressed_message_size対応するものなし

属性のマッピング

gRPCの属性OpenTelemetryの属性変換に関する補足
grpc.methodrpc.methodgRPC → OTel: 値がotherの場合、_OTHERに置き換える
OTel → gRPC: 値が_OTHERの場合、otherに置き換える
grpc.statusrpc.response.status_code
grpc.targetgRPC → OTel: 削除する
OTel → gRPC: grpc.target{server.address}[:{server.port}]に設定する
server.addressserver.portgRPC → OTel: grpc.targetからアドレスとポートを解析する
OTel → gRPC: 削除する
rpc.system.namegRPC → OTel: grpcに設定する
OTel → gRPC: 削除する
error.typegRPC → OTel: エラーを示す場合はrpc.response.status_codeに設定する(gRPCのOpenTelemetry規約を参照)
OTel → gRPC: 削除する

スパン

詳細については、gRPCの規約OpenTelemetryの規約を参照してください。

gRPCの規約では、client(クライアント)スパンを call と attempt の2種類に定義しています。gRPCのcallスパンは、OpenTelemetryのRPCクライアントスパンに対応します。どちらのスパン種別も、クライアント呼び出し全体のエンドツーエンドの期間をカバーします。OpenTelemetryは、試行単位のスパンを定義していません。

server(サーバー)スパンについては、gRPCとOpenTelemetryのどちらの規約も、呼び出しごとに1つのサーバースパンを定義しています。

マッピング

プロパティgRPCOpenTelemetry変換に関する補足
スパン名Sent.{method name}(クライアント)
Recv.{method name}(サーバー)
注: エッジケースでは、gRPCのスパン名のカーディナリティが高くなる可能性があります
{rpc.method}gRPC → OTel: Sent.またはRecv.の接頭辞を除去する
OTel → gRPC: スパン種別に基づいて接頭辞を追加する
スパンステータスコードレスポンスステータスコードがOKでない場合にERROR特定のエラーステータスコードに対してERRORgRPCのOpenTelemetry規約を参照)gRPC → OTel: ステータス記述からrpc.response.status_codeを解析し、それに応じてスパンステータスコードを設定する
OTel → gRPC: rpc.response.status_codeに基づいて設定する
スパンステータスの記述コードと記述(例: UNAVAILABLE, unable to resolve host記述のみ(エラーコードは別に記録される)
属性rpc.system.namegRPC → OTel: grpcに設定する
OTel → gRPC: 削除する
rpc.methodgRPC → OTel: スパン名から解析する
OTel → gRPC: 削除する
rpc.response.status_codegRPC → OTel: ステータス記述から解析する
OTel → gRPC: 削除する

追加の属性

OpenTelemetryでは、以下に挙げるgRPCスパンの追加属性(必須ではないもの)をいくつか定義しています。gRPCスパンからOpenTelemetryスパンへ変換する際は、これらの属性を設定すべきではありません。OpenTelemetryからgRPCへ変換する際は、これらを保持すべきです。

  • network.peer.address
  • network.peer.port
  • server.address
  • server.port
  • rpc.request.metadata.<key>rpc.response.metadata.<key>
  • rpc.method_original

イベント

gRPCのスパンには追加のイベントが含まれることがあり、OpenTelemetryへ変換する際はそのまま記録すべきです。