OpenTelemetry Demo から Datadog へのデータ送信
概要
OpenTelemetry Demo は、OpenTelemetry (OTel)
インスツルメンテーションと観測機能を示すためにコミュニティによって開発されたマイクロサービスデモアプリケーションです。これは、HTTP と gRPC を介して相互に通信する複数のマイクロサービスで構成される e コマース Web ページです。すべてのサービスは OpenTelemetry でインスツルメントされており、トレース、メトリクス、ログを生成します。
このページでは、OpenTelemetry Demo をデプロイし、そのデータを Datadog に送信するために必要な手順を説明します。
前提条件
このガイドを完了するには、以下を確認してください。
- まだの場合は、Datadog アカウントを作成 します。
- Datadog API キー を見つけるか、作成します。
- アプリケーション用の空き容量 6 GB RAM。
Docker または Kubernetes (Helm を使用) を使ってデモをデプロイできます。希望するデプロイ方法を選択し、必要なツールがインストールされていることを確認してください。
- Docker
- Docker Compose v2.0.0+
- Make (オプション)
- Kubernetes 1.24+
- Helm 3.9+
- 接続用に構成された kubectl を備えたアクティブな Kubernetes クラスター
デモの構成とデプロイ
リポジトリの複製
opentelemetry-demo リポジトリをデバイスに複製します。
git clone https://github.com/open-telemetry/opentelemetry-demo.git
OpenTelemetry Collector の構成
デモのテレメトリデータを Datadog に送信するには、OpenTelemetry Collector の構成に以下のコンポーネントを追加する必要があります。
Resource Processor は optional ですが、deployment.environment.name リソース属性を設定するために使用される推奨コンポーネントであり、Datadog はこれを env タグにマッピングします。Datadog Connectorは、Datadog APM トレースメトリクスを計算します。Datadog Exporterは、トレース、メトリクス、およびログを Datadog にエクスポートします。Datadog Extensionは optional コンポーネントであり、インフラストラクチャー監視内で OpenTelemetry Collector の構成を表示することができます。(詳細は Datadog Extension を参照してください)。
これらのコンポーネントを構成するには、以下の手順を完了します。
デモのリポジトリを開きます。ルートフォルダーに docker-compose.override.yml という名前のファイルを作成します。
作成されたファイルを開きます。以下の内容を貼り付けて、Datadog サイト および Datadog API キー 環境変数を設定します。
services:
otel-collector:
command:
- "--config=/etc/otelcol-config.yml"
- "--config=/etc/otelcol-config-extras.yml"
- "--feature-gates=datadog.EnableOperationAndResourceNameV2"
environment:
- DD_SITE_PARAMETER=<Your API Site>
- DD_API_KEY=<Your API Key>
OpenTelemetry Collector を構成するには、src/otel-collector/otelcol-config-extras.yml を開き、ファイルに以下を追加します。
extensions:
datadog/extension:
api:
site: ${env:DD_SITE_PARAMETER}
key: ${env:DD_API_KEY}
http:
endpoint: "localhost:9875"
path: "/metadata"
exporters:
datadog:
traces:
compute_stats_by_span_kind: true
trace_buffer: 500
api:
site: ${env:DD_SITE_PARAMETER}
key: ${env:DD_API_KEY}
sending_queue:
batch:
min_size: 10
max_size: 100
flush_timeout: 10s
processors:
resource:
attributes:
- key: deployment.environment.name
value: "otel"
action: upsert
connectors:
datadog/connector:
traces:
compute_stats_by_span_kind: true
service:
extensions: [datadog/extension]
pipelines:
traces:
receivers: [otlp]
processors: [resourcedetection, memory_limiter, resource, transform/sanitize_spans]
exporters: [otlp_grpc/jaeger, debug, spanmetrics, datadog, datadog/connector]
metrics:
receivers: [datadog/connector, docker_stats, httpcheck/frontend-proxy, hostmetrics, nginx, otlp, postgresql, redis, spanmetrics]
processors: [resourcedetection, memory_limiter, resource]
exporters: [otlp_http/prometheus, debug, datadog]
logs:
receivers: [otlp]
processors: [resourcedetection, memory_limiter, resource]
exporters: [opensearch, debug, datadog]
By default, the collector in the demo application merges the configuration from two files:
src/otel-collector/otelcol-config.yml: contains the default configuration for the collector.src/otel-collector/otelcol-config-extras.yml: used to add extra configuration to the collector.
YAML 値をマージする場合、オブジェクトはマージされ、配列は置換されます。
そのため、実際に構成されているものよりも多くのコンポーネントがパイプラインで指定されています。
以前の構成は、メイン otelcol-config ファイルで構成された値を置換しません。
Datadog サイトおよび API キーのシークレットを保存するには、dd-secrets という名前のシークレットを作成します。
kubectl create secret generic dd-secrets --from-literal="DD_SITE_PARAMETER=<Your API Site>" --from-literal="DD_API_KEY=<Your API Key>"
OpenTelemetry Demo を管理およびデプロイするには、OpenTelemetry Helm チャート をリポジトリに追加します。
helm repo add open-telemetry https://open-telemetry.github.io/opentelemetry-helm-charts
以下の内容で、my-values-file.yml という名前のファイルを作成します。
opentelemetry-collector:
extraEnvsFrom:
- secretRef:
name: dd-secrets
config:
extensions:
datadog/extension:
api:
site: ${env:DD_SITE_PARAMETER}
key: ${env:DD_API_KEY}
http:
endpoint: "localhost:9875"
path: "/metadata"
exporters:
datadog:
traces:
compute_stats_by_span_kind: true
trace_buffer: 500
hostname: "otelcol-helm"
api:
site: ${env:DD_SITE_PARAMETER}
key: ${env:DD_API_KEY}
sending_queue:
batch:
min_size: 10
max_size: 100
flush_timeout: 10s
processors:
resource:
attributes:
- key: deployment.environment.name
value: "otel"
action: upsert
connectors:
datadog/connector:
traces:
compute_stats_by_span_kind: true
service:
extensions: [health_check, datadog/extension]
pipelines:
traces:
processors: [memory_limiter, resource, resourcedetection, transform]
exporters: [otlp/jaeger, debug, spanmetrics, datadog, datadog/connector]
metrics:
receivers: [datadog/connector, otlp, spanmetrics]
processors: [memory_limiter, resource, resourcedetection, transform]
exporters: [otlphttp/prometheus, debug, datadog]
logs:
processors: [memory_limiter, resource, resourcedetection, transform]
exporters: [opensearch, debug, datadog]
YAML 値をマージする場合、オブジェクトはマージされ、配列は置換されます。
そのため、実際に構成されているものよりも多くのコンポーネントがパイプラインで指定されています。
以前の構成は、メイン otelcol-config ファイルで構成された値を置換しません。
デモの実行
make がインストールされている場合は、次のコマンドを使用してデモを開始できます。
make がインストールされていない場合は、docker compose コマンドを直接使用できます。
docker compose --env-file .env --env-file .env.override up --force-recreate --remove-orphans --detach
Helm を使用して Kubernetes にデモアプリケーションをデプロイするには、次のコマンドを実行します。
helm install my-otel-demo open-telemetry/opentelemetry-demo --values my-values-file.yml
アプリケーションのナビゲーション
Astronomy Shop Web UI にアクセスして、アプリケーションを探索し、テレメトリデータがどのように生成されるかを観察できます。
ローカルクラスターを実行している場合は、フロントエンドプロキシをポートフォワードする必要があります。
kubectl port-forward svc/my-otel-demo-frontendproxy 8080:8080
http://localhost:8080 に移動します。
テレメトリデータの相関関係
デモのすべてのサービスで使用されているインスツルメンテーションの手順は、OpenTelemetry のメインドキュメント
で確認できます。
各サービスが実装されている言語とその
ドキュメントは、言語機能リファレンステーブル で確認できます。
Datadog での OpenTelemetry データの確認
OTel デモが実行されている間、組み込みの負荷ジェネレーターがアプリケーション内のトラフィックをシミュレートします。
数秒後、Datadog にデータが到着し始めます。
カタログ
OTel デモの一部であるすべてのサービスを表示する:
- APM > Catalog に移動します。
- Map を選択して、サービスがどのように接続されているかを確認します。Map layout を Cluster または Flow に変更して、異なるモードでマップを表示します。
- Catalog ビューを選択し、次にサービスを選択して、サイドパネルでパフォーマンスの概要を表示します。
Trace Explorer
OTel デモから受信したトレースを確認する:
- Performance > Setup Guidance から View Traces をクリックしてトレースエクスプローラーを開き、選択されたサービスをフィルターとして適用します。
- インデックス化されたスパンを選択して、このトランザクションの完全なトレースの詳細を表示します。
- タブを切り替えて、詳細情報を表示します。
- ホストメトリクスを報告しているサービスのインフラストラクチャーメトリクス。
- すでに実装されているサービスのランタイムメトリクス。
- このトレースと関連付けられたログエントリ。
- このトレースにリンクされたスパンリンク。
トレースクエリ
Datadog では、受信した OpenTelemetry データをフィルタリングおよびグループ化できます。たとえば、特定のユーザーからのすべてのトランザクションを検索するには、トレースクエリを使用できます。
OTel デモは user.id をスパンタグとして送信するため、これを使用してユーザーによってトリガーされたすべてのトランザクションをフィルタリングできます。
サイドパネルの Info から、ユーザー ID の行にカーソルを合わせ、cog アイコンをクリックし、filter by @app.user.id:<user_id> を選択します。
以前のフィルターをすべて削除し、@app.user.id のみが適用された状態にすると、指定したユーザー ID を持つスパンを含むすべてのトランザクションを表示できます。
Error Tracking
OpenTelemetry Demo には、エラーシナリオをシミュレートするための Feature Flag エンジンが含まれています。
- http://localhost:8080/feature に移動して、利用可能なシナリオを管理します。詳細については、OpenTelemetry Demo に関するドキュメント を参照してください。
- デモでエラーが発生し始めたら、Datadog で影響を受けるサービスを可視化し、追跡できます。
OpenTelemetry Collector 構成
Datadog Extension を使用すると、以下のいずれかのページで Datadog 内の OpenTelemetry Collector 構成を表示できます。
Collector が実行されているホスト名を選択すると、その完全な構成を可視化できます。
参考資料