このページでは、OpenTelemetry Collector と Datadog Exporter のさまざまなデプロイオプションを案内し、Datadog にトレース、メトリクス、およびログを送信できるようにします。

Collector のダウンロード

OpenTelemetry Collector を Datadog Exporter とともに実行するには、最新リリースの OpenTelemetry Collector Contrib ディストリビューションをダウンロードしてください。

Collector のデプロイ

OpenTelemetry Collector は、さまざまなインフラストラクチャーのニーズに合わせて、さまざまな環境にデプロイできます。このセクションでは、以下のデプロイオプションについて説明します。

デプロイ方法によっては、特定の機能や能力が異なる場合があることに注意してください。これらの違いの詳細な概要については、デプロイベースの制限事項を参照してください。

インフラストラクチャーに最適なデプロイオプションを選択し、以下の手順を完了してください。

ホスト上で

--config パラメーターを使用してコンフィギュレーションファイルを指定し、Collector を実行します。

otelcontribcol_linux_amd64 --config collector.yaml

Docker

OpenTelemetry Collector を Docker イメージとして実行し、同じホストからトレースを受信するには

  1. otel/opentelemetry-collector-contrib などの公開された Docker イメージを選択します。

  2. OpenTelemetry のトレースを OpenTelemetry Collector に送信するために、コンテナ上でどのポートをオープンするかを決定します。デフォルトでは、トレースはポート 4317 の gRPC で送信されます。gRPC を使用しない場合は、ポート 4318 を使用します。

  3. コンテナを実行し、collector.yaml ファイルを使用して、必要なポートを公開します。例えば、ポート 4317 を使用する場合

    $ docker run \
        -p 4317:4317 \
        --hostname $(hostname) \
        -v $(pwd)/otel_collector_config.yaml:/etc/otelcol-contrib/config.yaml \
        otel/opentelemetry-collector-contrib
    

OpenTelemetry Collector を Docker イメージとして実行し、その他のコンテナからトレースを受信するには

  1. Docker ネットワークを作成します。

    docker network create <NETWORK_NAME>
    
  2. OpenTelemetry Collector とアプリケーションコンテナを同じネットワークの一部として実行します。

    # Run the OpenTelemetry Collector
    docker run -d --name opentelemetry-collector \
        --network <NETWORK_NAME> \
        --hostname $(hostname) \
        -v $(pwd)/otel_collector_config.yaml:/etc/otelcol-contrib/config.yaml \
        otel/opentelemetry-collector-contrib
    

    アプリケーションコンテナの実行中は、環境変数 OTEL_EXPORTER_OTLP_ENDPOINT が OpenTelemetry Collector 向けの適切なホスト名を使用して構成されていることをご確認ください。以下の例では opentelemetry-collector を使用しています。

    # Run the application container
    docker run -d --name app \
        --network <NETWORK_NAME> \
        --hostname $(hostname) \
        -e OTEL_EXPORTER_OTLP_ENDPOINT=http://opentelemetry-collector:4317 \
        company/app:latest
    

Kubernetes

Kubernetes 環境で OpenTelemetry 収集を構成するには、DaemonSet を使用することが最も一般的で推奨される方法です。Kubernetes インフラクチャーに OpenTelemetry コレクターと Datadog エクスポーターをデプロイするには

  1. アプリケーションの構成を含むこの構成例を使用して、Datadog Exporter を含む OpenTelemetry Collector を DaemonSet としてセットアップします。

  2. DaemonSet の重要なポートが公開され、アプリケーションからアクセス可能であることを確認してください。以下の例からの構成オプションがこれらのポートを定義しています。

    # ...
         ports:
         - containerPort: 4318 # default port for OpenTelemetry HTTP receiver.
           hostPort: 4318
         - containerPort: 4317 # default port for OpenTelemetry gRPC receiver.
           hostPort: 4317
         - containerPort: 8888  # Default endpoint for querying Collector observability metrics.
    # ...
    
    アプリケーションが HTTP と gRPC の両方を必要としない場合、構成から未使用のポートを削除してください。
  3. Datadog のコンテナタグ付けに使用される有用な Kubernetes 属性を収集するため、例に示すように Pod IP をリソース属性として報告します。

    # ...
            env:
            - name: POD_IP
              valueFrom:
                fieldRef:
                  fieldPath: status.podIP
            # The k8s.pod.ip is used to associate pods for k8sattributes
            - name: OTEL_RESOURCE_ATTRIBUTES
              value: "k8s.pod.ip=$(POD_IP)"
    # ...
    

    これにより、構成マップで使用される Kubernetes Attributes Processor が、トレースに付加するための必要なメタデータを抽出できるようになります。このメタデータへのアクセスを許可するために設定する必要がある追加のロールがあります。は完全で、すぐに使用でき、正しいロールが設定されています。

  4. アプリケーションコンテナを正しい OTLP エンドポイントホスト名を使用するように構成します。OpenTelemetry Collector は DaemonSet として実行されるため、現在のホストを対象とする必要があります。例のチャートのように、アプリケーションコンテナの OTEL_EXPORTER_OTLP_ENDPOINT 環境変数を適切に設定します。

    # ...
            env:
            - name: HOST_IP
              valueFrom:
                fieldRef:
                  fieldPath: status.hostIP
              # The application SDK must use this environment variable in order to successfully
              # connect to the DaemonSet's collector.
            - name: OTEL_EXPORTER_OTLP_ENDPOINT
              value: "http://$(HOST_IP):4318"
    # ...
    
  5. 正確なホスト情報を確保するために、ホストメタデータの収集を構成します。DaemonSet を設定して、ホストメタデータを収集し転送します。

    processors:
      resourcedetection:
        detectors: [system, env]
      k8sattributes:
        # existing k8sattributes config
      transform:
        trace_statements:
          - context: resource
            statements:
              - set(attributes["datadog.host.use_as_metadata"], true)
    ...
    service:
      pipelines:
        traces:
          receivers: [otlp]
          processors: [resourcedetection, k8sattributes, transform, batch]
          exporters: [datadog]
    

この構成は、resourcedetection プロセッサを使用してホストメタデータを収集し、k8sattributes プロセッサで Kubernetes メタデータを追加し、datadog.host.use_as_metadata 属性を true に設定します。詳細については、OpenTelemetry セマンティック規約をインフラストラクチャーリストのホスト情報にマッピングするを参照してください。

Kubernetes Gateway のデプロイで OpenTelemetry コレクターと Datadog エクスポーターをデプロイするには

  1. アプリケーションの構成を含むこの構成例を使用して、Datadog Exporter を含む OpenTelemetry Collector を DaemonSet としてセットアップします。

  2. DaemonSet の重要なポートが公開され、アプリケーションからアクセス可能であることを確認してください。以下の例からの構成オプションがこれらのポートを定義しています。

    # ...
         ports:
         - containerPort: 4318 # default port for OpenTelemetry HTTP receiver.
           hostPort: 4318
         - containerPort: 4317 # default port for OpenTelemetry gRPC receiver.
           hostPort: 4317
         - containerPort: 8888  # Default endpoint for querying Collector observability metrics.
    # ...
    
    アプリケーションが HTTP と gRPC の両方を必要としない場合、構成から未使用のポートを削除してください。
  3. Datadog のコンテナタグ付けに使用される有用な Kubernetes 属性を収集するため、例に示すように Pod IP をリソース属性として報告します。

    # ...
            env:
            - name: POD_IP
              valueFrom:
                fieldRef:
                  fieldPath: status.podIP
            # The k8s.pod.ip is used to associate pods for k8sattributes
            - name: OTEL_RESOURCE_ATTRIBUTES
              value: "k8s.pod.ip=$(POD_IP)"
    # ...
    

    これにより、構成マップで使用される Kubernetes Attributes Processor が、トレースに付加するための必要なメタデータを抽出できるようになります。このメタデータへのアクセスを許可するために設定する必要がある追加のロールがあります。は完全で、すぐに使用でき、正しいロールが設定されています。

  4. アプリケーションコンテナを正しい OTLP エンドポイントホスト名を使用するように構成します。OpenTelemetry Collector は DaemonSet として実行されるため、現在のホストを対象とする必要があります。例のチャートのように、アプリケーションコンテナの OTEL_EXPORTER_OTLP_ENDPOINT 環境変数を適切に設定します。

    # ...
            env:
            - name: HOST_IP
              valueFrom:
                fieldRef:
                  fieldPath: status.hostIP
              # The application SDK must use this environment variable in order to successfully
              # connect to the DaemonSet's collector.
            - name: OTEL_EXPORTER_OTLP_ENDPOINT
              value: "http://$(HOST_IP):4318"
    # ...
    
  5. DaemonSet に現在設置されている Datadog Exporter の代わりに OTLP エクスポーターを含めるように変更します。

    # ...
    exporters:
      otlp:
        endpoint: "<GATEWAY_HOSTNAME>:4317"
    # ...
    
  6. サービスパイプラインが、サンプルにある Datadog のものでなく、このエクスポーターを使用することを確認してください。

    # ...
        service:
          pipelines:
            metrics:
              receivers: [hostmetrics, otlp]
              processors: [resourcedetection, k8sattributes, batch]
              exporters: [otlp]
            traces:
              receivers: [otlp]
              processors: [resourcedetection, k8sattributes, batch]
              exporters: [otlp]
    # ...
    

    これにより、各 Agent が OTLP プロトコルを介してデータを Collector Gateway に転送します。

  7. <GATEWAY_HOSTNAME> を OpenTelemetry Collector Gateway のアドレスに置き換えます。

  8. k8sattributes プロセッサを構成して、Pod IP を Gateway Collector に転送し、メタデータを取得できるようにします。

    # ...
    k8sattributes:
      passthrough: true
    # ...
    

    passthrough オプションの詳細については、そのドキュメントを参照してください。

  9. Gateway Collector の構成が、Agent で OTLP エクスポーターに置き換えられたのと同じ Datadog Exporter の設定を使用していることを確認します。例 (<DD_SITE> はあなたのサイト、):

    # ...
    exporters:
      datadog:
        api:
          site: <DD_SITE>
          key: ${env:DD_API_KEY}
    # ...
    
  10. ホストメタデータの収集を構成します。 ゲートウェイデプロイメントでは、ホストメタデータがエージェントコレクターによって収集され、ゲートウェイコレクターによって保持されることを確認する必要があります。これにより、ホストメタデータがエージェントによって収集され、ゲートウェイを介して適切に Datadog に転送されます。 詳細については、OpenTelemetry セマンティック規約をインフラストラクチャーリストのホスト情報にマッピングするを参照してください。

    エージェントコレクターの構成:

    processors:
      resourcedetection:
        detectors: [system, env]
      k8sattributes:
        passthrough: true
    
    exporters:
      otlp:
        endpoint: "<GATEWAY_HOSTNAME>:4317"
    
    service:
      pipelines:
        traces:
          receivers: [otlp]
          processors: [resourcedetection, k8sattributes, transform, batch]
          exporters: [otlp]
    

    ゲートウェイコレクターの構成:

    processors:
      k8sattributes:
        extract:
          metadata: [node.name, k8s.node.name]
    
    exporters:
      datadog:
        api:
          key: ${DD_API_KEY}
        hostname_source: resource_attribute
    
    service:
      pipelines:
        traces:
          receivers: [otlp]
          processors: [k8sattributes, batch]
          exporters: [datadog]
    

OpenTelemetry Operator を使用するには、OpenTelemetry Operator のデプロイメントに関する公式ドキュメントに従ってください。そこに記載されているように、Operator に加えて、証明書マネージャをデプロイします。

OpenTelemetry Collector の標準 Kubernetes 構成の 1 つを使用して Operator を構成します。

ホスト名解決

ホスト名がどのように解決されるかを理解するために、OpenTelemetry セマンティック規約をホスト名にマッピングするを参照してください。

デプロイメントに基づく制限

OpenTelemetry コレクターには、2 つの主要なデプロイメント方法があります。Agent と Gateway です。デプロイメント方法によっては、以下のコンポーネントを利用できます。

デプロイメントモードホストメトリクスKubernetes オーケストレーションメトリクストレースログの自動取り込み
Gateway として
Agent として

参考資料