このページでは、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 イメージとして実行し、同じホストからトレースを受信するには
otel/opentelemetry-collector-contrib
などの公開された Docker イメージを選択します。
OpenTelemetry のトレースを OpenTelemetry Collector に送信するために、コンテナ上でどのポートをオープンするかを決定します。デフォルトでは、トレースはポート 4317 の gRPC で送信されます。gRPC を使用しない場合は、ポート 4318 を使用します。
コンテナを実行し、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 イメージとして実行し、その他のコンテナからトレースを受信するには
Docker ネットワークを作成します。
docker network create <NETWORK_NAME>
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 エクスポーターをデプロイするには
アプリケーションの構成を含むこの構成例を使用して、Datadog Exporter を含む OpenTelemetry Collector を DaemonSet としてセットアップします。
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 の両方を必要としない場合、構成から未使用のポートを削除してください。
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 が、トレースに付加するための必要なメタデータを抽出できるようになります。このメタデータへのアクセスを許可するために設定する必要がある追加のロールがあります。例は完全で、すぐに使用でき、正しいロールが設定されています。
アプリケーションコンテナを正しい 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"
# ...
正確なホスト情報を確保するために、ホストメタデータの収集を構成します。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 エクスポーターをデプロイするには
アプリケーションの構成を含むこの構成例を使用して、Datadog Exporter を含む OpenTelemetry Collector を DaemonSet としてセットアップします。
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 の両方を必要としない場合、構成から未使用のポートを削除してください。
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 が、トレースに付加するための必要なメタデータを抽出できるようになります。このメタデータへのアクセスを許可するために設定する必要がある追加のロールがあります。例は完全で、すぐに使用でき、正しいロールが設定されています。
アプリケーションコンテナを正しい 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"
# ...
DaemonSet に現在設置されている Datadog Exporter の代わりに OTLP エクスポーターを含めるように変更します。
# ...
exporters:
otlp:
endpoint: "<GATEWAY_HOSTNAME>:4317"
# ...
サービスパイプラインが、サンプルにある 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 に転送します。
<GATEWAY_HOSTNAME>
を OpenTelemetry Collector Gateway のアドレスに置き換えます。
k8sattributes
プロセッサを構成して、Pod IP を Gateway Collector に転送し、メタデータを取得できるようにします。
# ...
k8sattributes:
passthrough: true
# ...
passthrough
オプションの詳細については、そのドキュメントを参照してください。
Gateway Collector の構成が、Agent で OTLP エクスポーターに置き換えられたのと同じ Datadog Exporter の設定を使用していることを確認します。例 (<DD_SITE>
はあなたのサイト、
):
# ...
exporters:
datadog:
api:
site: <DD_SITE>
key: ${env:DD_API_KEY}
# ...
ホストメタデータの収集を構成します。
ゲートウェイデプロイメントでは、ホストメタデータがエージェントコレクターによって収集され、ゲートウェイコレクターによって保持されることを確認する必要があります。これにより、ホストメタデータがエージェントによって収集され、ゲートウェイを介して適切に 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 セマンティック規約をホスト名にマッピングするを参照してください。
デプロイメントに基づく制限
OpenTelemetry コレクターには、2 つの主要なデプロイメント方法があります。Agent と Gateway です。デプロイメント方法によっては、以下のコンポーネントを利用できます。
デプロイメントモード | ホストメトリクス | Kubernetes オーケストレーションメトリクス | トレース | ログの自動取り込み |
---|
Gateway として | | | | |
Agent として | | | | |
参考資料