概要

このチュートリアルでは、Datadog Exporter と Datadog Connector を使用します。新しい Collector 構成については、Datadog は OpenTelemetry Collector のセットアップの OTLP パイプラインを推奨しています。

OpenTelemetry Demo は、OpenTelemetry (OTel) インスツルメンテーションと観測機能を示すためにコミュニティによって開発されたマイクロサービスデモアプリケーションです。これは、HTTP と gRPC を介して相互に通信する複数のマイクロサービスで構成される e コマース Web ページです。すべてのサービスは OpenTelemetry でインスツルメントされており、トレース、メトリクス、ログを生成します。

このページでは、OpenTelemetry Demo をデプロイし、そのデータを Datadog に送信するために必要な手順を説明します。

前提条件

このガイドを完了するには、以下を確認してください。

  1. まだの場合は、Datadog アカウントを作成 します。
  2. Datadog API キー を見つけるか、作成します。
  3. アプリケーション用の空き容量 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 を参照してください)。

これらのコンポーネントを構成するには、以下の手順を完了します。

  1. デモのリポジトリを開きます。ルートフォルダーに docker-compose.override.yml という名前のファイルを作成します。

  2. 作成されたファイルを開きます。以下の内容を貼り付けて、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>
    
  3. 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 ファイルで構成された値を置換しません。
  1. 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>"
    
  2. OpenTelemetry Demo を管理およびデプロイするには、OpenTelemetry Helm チャート をリポジトリに追加します。

    helm repo add open-telemetry https://open-telemetry.github.io/opentelemetry-helm-charts
    
  3. 以下の内容で、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 start

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 にアクセスして、アプリケーションを探索し、テレメトリデータがどのように生成されるかを観察できます。

http://localhost:8080 に移動します。

  1. ローカルクラスターを実行している場合は、フロントエンドプロキシをポートフォワードする必要があります。

    kubectl port-forward svc/my-otel-demo-frontendproxy 8080:8080
    
  2. http://localhost:8080 に移動します。

テレメトリデータの相関関係

デモのすべてのサービスで使用されているインスツルメンテーションの手順は、OpenTelemetry のメインドキュメント で確認できます。

各サービスが実装されている言語とその ドキュメントは、言語機能リファレンステーブル で確認できます。

Datadog での OpenTelemetry データの確認

OTel デモが実行されている間、組み込みの負荷ジェネレーターがアプリケーション内のトラフィックをシミュレートします。 数秒後、Datadog にデータが到着し始めます。

カタログ

OTel デモの一部であるすべてのサービスを表示する:

  1. APM > Catalog に移動します。
OpenTelemetry デモアプリケーションからサービスリストのカタログページを表示する
  1. Map を選択して、サービスがどのように接続されているかを確認します。Map layout を Cluster または Flow に変更して、異なるモードでマップを表示します。
すべてのサービスが接続された Service Map フローを表示する
  1. Catalog ビューを選択し、次にサービスを選択して、サイドパネルでパフォーマンスの概要を表示します。
特定のサービスのパフォーマンスとセットアップガイダンスの概要を表示します。

Trace Explorer

OTel デモから受信したトレースを確認する:

  1. Performance > Setup Guidance から View Traces をクリックしてトレースエクスプローラーを開き、選択されたサービスをフィルターとして適用します。
チェックアウトサービスのすべてのインデックス化されたスパンを含むトレースビュー
  1. インデックス化されたスパンを選択して、このトランザクションの完全なトレースの詳細を表示します。
その特定のトランザクションに属するすべてのスパンを含むトレースビュー
  1. タブを切り替えて、詳細情報を表示します。
    • ホストメトリクスを報告しているサービスのインフラストラクチャーメトリクス。
    • すでに実装されているサービスのランタイムメトリクス。
    • このトレースと関連付けられたログエントリ。
    • このトレースにリンクされたスパンリンク。

トレースクエリ

Datadog では、受信した OpenTelemetry データをフィルタリングおよびグループ化できます。たとえば、特定のユーザーからのすべてのトランザクションを検索するには、トレースクエリを使用できます。

OTel デモは user.id をスパンタグとして送信するため、これを使用してユーザーによってトリガーされたすべてのトランザクションをフィルタリングできます。

  1. サイドパネルの Info から、ユーザー ID の行にカーソルを合わせ、cog アイコンをクリックし、filter by @app.user.id:<user_id> を選択します。

  2. 以前のフィルターをすべて削除し、@app.user.id のみが適用された状態にすると、指定したユーザー ID を持つスパンを含むすべてのトランザクションを表示できます。

特定の app.user.id を含むすべてのスパンをフィルタリングするトレースクエリ

Error Tracking

OpenTelemetry Demo には、エラーシナリオをシミュレートするための Feature Flag エンジンが含まれています。

  1. http://localhost:8080/feature に移動して、利用可能なシナリオを管理します。詳細については、OpenTelemetry Demo に関するドキュメント を参照してください。
  2. デモでエラーが発生し始めたら、Datadog で影響を受けるサービスを可視化し、追跡できます。
PaymentService Fail Feature Flag Enabled エラーが表示された、Error Tracking ビュー

OpenTelemetry Collector 構成

Datadog Extension を使用すると、以下のいずれかのページで Datadog 内の OpenTelemetry Collector 構成を表示できます。

Collector が実行されているホスト名を選択すると、その完全な構成を可視化できます。

Datadog 内で表示された OpenTelemetry Collector 構成

参考資料