Datadog Agent による OTLP の取り込み

OTLP Ingest in the Agent は、OpenTelemetry SDK でインスツルメントされたアプリケーションから Datadog Agent に直接テレメトリーデータを送信する方法です。バージョン 6.32.0 と 7.32.0 以降、Datadog Agent は gRPC または HTTP を通じて OTLP トレースと OTLP メトリクスを取り込むことができるようになりました。

OTLP Ingest in the Agent では、Datadog Agent で観測可能性機能を利用することができます。アプリケーションは OpenTelemetry SDK でインスツルメントされているため、Application Security Management、Continuous Profiler、ランタイムメトリクス、取り込みルールなどの Datadog ライブラリ固有の機能は、取り込まれたデータでは利用できません。

まず、OpenTelemetry SDK を使って、アプリケーションをインスツルメンテーションします。その後、テレメトリーデータを OTLP フォーマットで Datadog Agent にエクスポートします。この構成は、以下のページで説明されているように、サービスがデプロイされているインフラストラクチャーの種類によって異なります。最新の OTLP バージョンと互換性があることが目的ですが、Agent の OTLP 取り込みは、すべての OTLP バージョンと互換性があるわけではありません。Agent changelog で OTLP のバージョン互換性を確認してください。

OpenTelemetry のインスツルメンテーションのドキュメントを読んで、インスツルメンテーションを Agent に向ける方法を理解してください。以下に説明する receiver セクションは OpenTelemetry Collector OTLP レシーバー構成スキーマに従っています。

OTel SDK/ライブラリ、Datadog トレースライブラリ、Datadog インテグレーション -> Datadog Agent -> Datadog
: サポートされているセットアップは、すべての OTel データ生成ホスト上に配置された取り込み Agent です。あるホストを実行しているコレクターまたはインスツルメンテーションアプリから、別のホストの Agent に OTel テレメトリーを送信することはできません。しかし、Agent がコレクターまたは SDK インストルメンテーションアプリにローカルであれば、複数のパイプラインをセットアップすることができます。

Datadog Agent で OTLP の取り込みを有効にする

OTLP の取り込みはデフォルトではオフになっており、datadog.yaml ファイルの構成を更新するか、環境変数を設定することでオンにすることが可能です。以下の datadog.yaml 構成は、デフォルトのポートでエンドポイントを有効にします。

gRPC の場合、デフォルトは 4317 番ポートです。

otlp_config:
  receiver:
    protocols:
      grpc:
        endpoint: localhost:4317

HTTP の場合、デフォルトは 4318 番ポートです。

otlp_config:
  receiver:
    protocols:
      http:
        endpoint: localhost:4318

または、環境変数でポートを指定して、エンドポイントを構成します。

  • gRPC の場合 (localhost:4317): DD_OTLP_CONFIG_RECEIVER_PROTOCOLS_GRPC_ENDPOINT
  • HTTP の場合 (localhost:4318): DD_OTLP_CONFIG_RECEIVER_PROTOCOLS_HTTP_ENDPOINT

これらは core Agent と trace Agent プロセスの両方に渡さなければなりません。コンテナ環境で実行する場合は、ローカルではないインターフェイスでもサーバーを利用できるように、localhost の代わりに 0.0.0.0 を使用します。

この機能には、gRPC と HTTP のどちらかを構成します。以下は、両方の構成を示すアプリケーション例です。

  1. Datadog Docker Agent のセットアップに従ってください。

  2. Datadog Agent コンテナでは、以下のエンドポイント環境変数を設定し、対応するポートを公開します。

    • gPRC の場合: DD_OTLP_CONFIG_RECEIVER_PROTOCOLS_GRPC_ENDPOINT0.0.0.0:4317 に設定し、ポート 4317 を公開します。
    • HTTP の場合: DD_OTLP_CONFIG_RECEIVER_PROTOCOLS_HTTP_ENDPOINT0.0.0.0:4318 に設定し、ポート 4318 を公開します。
  1. Kubernetes Agent のセットアップに従ってください。

  2. トレース Agent コンテナとコア Agent コンテナの両方で、以下の環境変数を構成します。

    gPRC の場合:

    name: DD_OTLP_CONFIG_RECEIVER_PROTOCOLS_GRPC_ENDPOINT # enables gRPC receiver on port 4317
    value: "0.0.0.0:4317"
    

    HTTP の場合:

    name: DD_OTLP_CONFIG_RECEIVER_PROTOCOLS_HTTP_ENDPOINT # enables HTTP receiver on port 4318
    value: "0.0.0.0:4318"
    
  3. コンテナポート 4317 または 4318 をコア Agent コンテナのホストポートにマッピングします。

    gPRC の場合:

    ports:
      - containerPort: 4317
        hostPort: 4317
        name: traceportgrpc
        protocol: TCP
    

    HTTP の場合

    ports:
      - containerPort: 4318
        hostPort: 4318
        name: traceporthttp
        protocol: TCP
    
  1. Kubernetes Agent のセットアップに従ってください。

  2. values.yaml ファイルの datadog.otlp セクションを編集して、Agent で OTLP エンドポイントを有効にします。

    gRPC の場合:

    otlp:
     receiver:
       protocols:
         grpc:
           enabled: true
    

    HTTP の場合:

    otlp:
     receiver:
       protocols:
         http:
           enabled: true
    

これは、各プロトコルをデフォルトのポート (OTLP/gRPC は 4317、OTLP/HTTP は 4318) で有効にするものです。

  1. Kubernetes Agent のセットアップに従ってください。

  2. 優先プロトコルを有効にします。

    gRPC の場合:

    --set "datadog.otlp.receiver.protocols.grpc.enabled=true"
    

    HTTP の場合:

    --set "datadog.otlp.receiver.protocols.http.enabled=true"
    

これは、各プロトコルをデフォルトのポート (OTLP/gRPC は 4317、OTLP/HTTP は 4318) で有効にするものです。

Datadog Agent でサポートされている環境変数や設定は、他にも多数あります。それらすべての概要を知るには、構成テンプレートを参照してください。

OpenTelemetry のトレースとメトリクスを Datadog Agent に送信する

  1. アプリケーションコンテナでは、環境変数 OTEL_EXPORTER_OTLP_ENDPOINT に、Datadog Agent コンテナを指すように設定します。例:

    OTEL_EXPORTER_OTLP_ENDPOINT=http://<datadog-agent>:4318.
    
  2. 両方のコンテナが同じブリッジネットワークに定義されている必要がありますが、これは Docker Compose を使用している場合に自動的に処理されます。そうでない場合は、Docker アプリケーションのトレースの Docker の例に従って、正しいポートでブリッジネットワークをセットアップしてください。

  1. アプリケーションデプロイファイルで、OTEL_EXPORTER_OTLP_ENDPOINT 環境変数を使って、OpenTelemetry クライアントがトレースを送信するエンドポイントを構成します。

    gPRC の場合:

    env:
     - name: HOST_IP
       valueFrom:
         fieldRef:
           fieldPath: status.hostIP
     - name: OTEL_EXPORTER_OTLP_ENDPOINT
       value: "http://$(HOST_IP):4317" # sends to gRPC receiver on port 4317
    

    HTTP の場合:

    env:
     - name: HOST_IP
       valueFrom:
         fieldRef:
           fieldPath: status.hostIP
     - name: OTEL_EXPORTER_OTLP_ENDPOINT
       value: "http://$(HOST_IP):4318" # sends to HTTP receiver on port 4318
    
OTLP ライブラリのドキュメントを確認してください。それらのいくつかは、トレースを / ルートパスの代わりに /v1/traces に送らなければなりません。

すぐに使えるダッシュボード

Datadog は、すぐに使えるダッシュボードを提供しており、コピーしてカスタマイズすることができます。Datadog のすぐに使える OpenTelemetry ダッシュボードを使用するには、Dashboards > Dashboards list に移動し、opentelemetry を検索してください。

ダッシュボードリストには、OpenTelemetry のすぐに使えるダッシュボードが 2 つ (ホストメトリクスとコレクターメトリクス) 表示されています。

Host Metrics ダッシュボードは、ホストメトリクスレシーバー から収集されたデータ用です。Collector Metrics ダッシュボードは、有効化するメトリクスレシーバーに応じて収集された他の種類のメトリクス用です。

その他の参考資料