OpenTelemetry 関連のサービス・マッピングとインフラストラクチャー相関

このトピックでは、 OpenTelemetry のデータを手動で Instana に送信するお客様向けのガイダンスを提供します。

OpenTelemetry Collectorの Instana ディストリビューション( IDOT ) をご利用の場合、 IDOT ではデフォルトでサービスのマッピングとインフラストラクチャの相関付けが自動的に処理されるため、手動での設定を行う必要はありません。

このドキュメントの手順に従うことで、 OpenTelemetry と Instana を連携させ、テレメトリデータを手動で送信する際に、包括的なサービスマッピングとインフラストラクチャの相関分析を有効にすることができます。 このドキュメントでは、 Instana 内で、特に Kubernetes 環境および IBM ミドルウェアにおいて、最適なデータ連携と可視性を実現するために、 OpenTelemetry の特定のリソース属性を活用する方法について説明します。

OpenTelemetry サービスのマッピング

Instana OpenTelemetry のセマンティック規約に準拠し、メトリクス、スパン、およびログをサービスにマッピングします。 これらの規約は、属性名と使用方法を標準化することで、オブザーバビリティ・ツール間の一貫性と相互運用性を促進します。 これらの標準に準拠することで、 Instana は、テレメトリデータを自社の監視および可観測性プラットフォームにシームレスに統合することを保証しています。

サービスマッピングで使用される主な属性は以下の通りです:

  • リソースの属性 service.name
  • トレース・スパン属性 peer.service

リソースの属性 service.name

この service.name 属性は、 OpenTelemetry 内のサービスを一意に識別します。 各アプリケーション、マイクロサービス、またはコンポーネントには固有の識別子が割り当てられており、 service.name これによりテレメトリデータの効果的なフィルタリング、分析、および可視化が可能になります。 Instana サービスに service.name マッピングし、トレース、メトリクス、ログを発行元アプリケーションに関連付けます。 一貫性があり、内容を明確に表す命名規則 service.name を採用することで、 Instana 内での正確なグループ化と可観測性の向上が図られます。

OpenTelemetry, では、可観測性環境の具体的な要件に応じて、アプリケーションのさまざまなレベルでこの service.name 属性を設定できます。 次の表では、設定 service.name 方法のさまざまな例を確認できます:

レベル 定義方法 ユース・ケース
アプリケーション・コード 手動による計測設定をアプリケーション内で直接行う service.name="orders-service" アプリケーション内で がハードコーディング service.name されているか、設定されている場合
環境変数 環境 OTEL_SERVICE_NAME 変数を使用することで OTEL_SERVICE_NAME=payments-service 複数のサービスにわたって自動インスツルメンテーションを使用する環境では一般的です
リソース属性 キーと値のペアを使用して OTEL_RESOURCE_ATTRIBUTES OTEL_RESOURCE_ATTRIBUTES=service.name=inventory-service 次のような他の属性と service.name 組み合わせるのに便利です host.id
コレクター構成 OpenTelemetry のCollectorで、processor resource を使用する場合 service.name: shipping-service テレメトリデータがバックエンドに送信される前の集中管理

トレース・スパン属性 peer.service

OpenTelemetry, において、この peer.service 属性は、スパンが接続するリモートサービスの名前を指定し、データベース、メッセージブローカー、その他のマイクロサービスといった外部依存関係を特定するのに役立ちます。 Instana Instanapeer.service サービスにマッピングし、サービスの依存関係や相互作用を可視化します。

  • 計測ライブラリ :一部のライブラリは、適切に設定されると自動的に peer.service 設定されます。 例:
    • JDBC : OpenTelemetry JDBC インストルメンテーションは、データベース接続の詳細から peer.service これを推測できます。
    • HTTP クライアント : Apache や HttpClient などの HTTP ライブラリは、リモートサービスのホスト名 peer.service に基づいて派生させることができます。

次の表では、 OpenTelemetry: における設定や構成 peer.service のさまざまな方法を確認できます

レベル 説明 ユース・ケース
アプリケーション・コード OpenTelemetry を使用して、コード peer.service 内で直接属性を設定します。 API span.setAttribute("peer.service", "backend-service") 対象のサービスに関する具体的な知識があり、独自の名前を付けたい場合
設定ファイル (システムプロパティ) OpenTelemetrypeer.service エージェントまたはSDKで使用されるシステムプロパティの値を定義します otel.instrumentation.common.peer-service-mapping: "api.example.com=example-api-service,1.2.3.4=cats-service" 設定ファイル内で、特定のホスト名やIPアドレス、あるいはその両方をサービス名に割り当てたい場合
環境変数 その peer.service 値を、アプリケーションからアクセス可能な環境変数として設定してください OTEL_INSTRUMENTATION_COMMON_PEER_SERVICE_MAPPING="api.example.com=example-api-service,1.2.3.4=cats-service" 実行時の状況やデプロイ環境に応じて値を peer.service 動的に設定する必要がある場合(システムプロパティと同様ですが、環境変数を使用します)
計測ライブラリ OpenTelemetry ライブラリによって自動的に設定されます peer.service="postgresql" データベースや HTTP クライアントなどの一般的なライブラリでは、これが自動的に peer.service 設定されるのが一般的です

一般的なプロトコルのサービスマッピング

OpenTelemetry は peer.serviceservice.name 、やといった一般的な属性に加え、 HTTP、 RPC、データベース、メッセージングシステムなど、よく知られたプロトコルに関する包括的な意味論的規約を定義しています。

プロトコルの完全な一覧については、『 Trace Semantic Conventions 』を参照してください。

HTTP span属性

OpenTelemetry HTTP のspan要素に対して、トレースシステム全体での一貫性を保つためのセマンティックな規約を提供します。これには、 HTTP のリクエストやレスポンスに関する情報を提供する属性も含まれます。

次の表では、 OpenTelemetry: で span 属性を設定または構成 http するさまざまな方法を確認できます

属性 説明
http.method HTTP メソッド(GET、 POST ) http.method="GET"
http.route HTTP リクエストのルートまたはパス http.route="/webshop/articles/:id"
url.path URL の完全なパス構成要素 url.path="/webshop/articles/4"
http.host サーバーのホスト名 http.host="api.example.com"
http.target リクエストの URL をターゲットとする http.target="/users"

http.host では多くの http.target 場合、サービスを推測できますが、動的ルーティングやサービスディスカバリでは、正確なマッピングを行うために、設定ファイルやサービスレジストリからの追加情報が必要になる場合があります。

リモートプロシージャコールは属性をまたがる

OpenTelemetry トレースシステム間で一貫性を保つため、リモートプロシージャコール( RPC )のスパンに対するセマンティックな規約を定義し、洞察を得るための属性も含まれています。 OpenTelemetry でのサービスマッピングに使用される主要な RPC の span 属性は、以下の通りです:

  • rpc.method :呼び出されるメソッドまたは関数を指定し、その操作に関する詳細情報を提供します。
  • rpc.service :呼び出されるサービスの名前を識別します。これは、 RPC の呼び出しを特定のサービスにマッピングするために不可欠です。
属性 説明
rpc.service リモートサービスの名前 rpc.service="user-service"
rpc.method 呼び出されるメソッドまたは関数 rpc.method="GetUserInfo"

や を peer.servicerpc.serviceRPCrpc.method などの他の属性と組み合わせることで、への呼び出しを対応するサービスにマッピングすることができます。

データベースのスパン属性

OpenTelemetry データベース・スパンに対してセマンティックな規約を定義し、トレースシステム間の一貫性を維持するとともに、データベースの操作や相互作用に関する有益な知見を提供する主要な属性を提供します。 これらの知見は、分散アプリケーションにおけるデータベースシステムのパフォーマンスや動作を理解する上で不可欠です。

次の表は、 OpenTelemetry におけるサービスマッピングに使用される主要なデータベーススパン属性です。

属性 説明
db.system データベースシステム(例: MySQL、 PostgreSQL ) db.system="mysql"
db.instance データベース・インスタンス名または識別子 db.instance="my_database"
db.name アクセスされるデータベースの名前 db.name="users_db"
db.statement 実行されたSQLクエリまたはデータベースコマンド db.statement="SELECT * FROM users"
db.operation データベース操作の種類(例:SELECT、INSERT) db.operation="SELECT"

これらの属性は主にデータベースとのやり取りを記述するものですが、間接的にサービスのマッピングにも役立ちます。 たとえば、この db.instance 属性は、特定のデータベース・インスタンスとやり取りしているサービスを特定するのに役立つ可能性があります。

メッセージのスパン属性

OpenTelemetry メッセージング・スパンに対して、トレースシステム全体での一貫性を維持するためのセマンティックな規約を提供し、これには有益な情報を提供する属性も含まれます。

OpenTelemetry におけるサービスマッピングに使用される主要な Messaging span 属性は、以下の通りです:

属性 説明
messaging.system 使用しているメッセージングシステム(例: Kafka、 RabbitMQ,、AMQP) messaging.system="kafka"
messaging.destination 宛先アドレス(例:トピック名やキュー名など) messaging.destination="user-events"
messaging.operation 実行された操作(例:SEND、RECEIVE、PUBLISH、SUBSCRIBE) messaging.operation="SEND"

これらの属性は、サービスが連携するメッセージングシステムや、使用する特定のトピックやキューに基づいて、サービスをマッピングするのに役立ちます。 たとえば、あるサービスが特定の Kafka トピックにメッセージを送信することがわかっている場合、この messaging.destination 属性を使ってそのサービスを特定することができます。

OpenTelemetry に関するその他のリソース

コミュニティが厳選した OpenTelemetry サンプル、ベストプラクティス、および統合パターンについては、 Instana 向け OpenTelemetry リポジトリを参照してください。 この資料では、以下の情報を提供しています:
  • 実際の設定例。
  • トラブルシューティングガイド。
  • さまざまなテクノロジーの統合パターン。
  • コミュニティから寄せられた解決策。