Datadog Agent による OTLP の取り込み
Agent における OTLP 取り込みは、OpenTelemetry SDK でインスツルメントされたアプリケーションから Datadog Agent へテレメトリデータを直接送信する方法です。バージョン 6.32.0 および 7.32.0 以降、Datadog Agent は gRPC または HTTP 経由で OTLP トレースと OTLP メトリクス を取り込めます。バージョン 6.48.0 および 7.48.0 以降、Datadog Agent は gRPC または HTTP 経由で OTLP ログを取り込めます。
Agent における OTLP 取り込みにより、Datadog Agent の各種可観測性機能を利用できます。OpenTelemetry SDK でインスツルメントされたアプリケーションのデータは、App and API Protection、Continuous Profiler、Ingestion Rules といった Datadog 独自製品では使用できない場合があります。OpenTelemetry ランタイムメトリクスは、一部の言語でサポートされています。
このセットアップでサポートされる Datadog 機能については、
OTel to Datadog Agent (OTLP) にある
機能互換性表を参照してください。
初期セットアップ
開始するには、まず OpenTelemetry SDK で アプリケーションをインスツルメント します。次に、テレメトリデータを OTLP 形式で Datadog Agent にエクスポートします。構成手順は、以下のページで説明するように、サービスがデプロイされているインフラストラクチャーの種類によって異なります。最新の OTLP バージョンとの互換性を目指していますが、Agent における OTLP 取り込みがすべての OTLP バージョンに対応しているわけではありません。Datadog Agent と互換性のある OTLP バージョンは、OpenTelemetry コレクターの OTLP レシーバーでもサポートされているバージョンと同じです。サポートされている正確なバージョンを確認するには、Agent の go.mod ファイルで go.opentelemetry.io/collector バージョンを確認してください。
インスツルメンテーションの送信先として Agent を指定する方法は、OpenTelemetry のインスツルメンテーションドキュメントを参照してください。以下に記載する receiver セクションは、OpenTelemetry コレクター OTLP レシーバー構成スキーマ に準拠します。
サポートされるセットアップ方法は、OpenTelemetry データを生成する各ホストに取り込み用 Agent をデプロイするものです。1 つのホストで動作するコレクターやインスツルメント済みアプリから、別ホストの Agent に OpenTelemetry テレメトリを送信することはできません。ただし、Agent がコレクターまたは SDK インスツルメント済みアプリに対してローカルである場合は、複数のパイプラインを設定できます。
Datadog Agent で OTLP 取り込みを有効にする
OTLP 取り込みはデフォルトで無効です。datadog.yaml ファイルの構成を更新するか、環境変数を設定して有効化できます。以下の datadog.yaml の構成は、デフォルトポートでエンドポイントを有効にします。有効にすると、メトリクスとトレースの取り込みがデフォルトで有効になります。ログの取り込みは、予定外のログへの課金を防ぐためにデフォルトで無効になっています。
The following examples use
0.0.0.0 as the endpoint address for convenience. This allows connections from any network interface. For enhanced security, especially in local deployments, consider using
localhost instead.
For more information on secure endpoint configuration, see the
OpenTelemetry security documentation.
gRPC の場合、デフォルトは 4317 番ポートです。
otlp_config:
receiver:
protocols:
grpc:
endpoint: 0.0.0.0:4317
logs:
enabled: false
HTTP の場合、デフォルトは 4318 番ポートです。
otlp_config:
receiver:
protocols:
http:
endpoint: 0.0.0.0:4318
logs:
enabled: false
または、環境変数でポートを指定して、エンドポイントを構成します。
- gRPC の場合 (
localhost:4317): DD_OTLP_CONFIG_RECEIVER_PROTOCOLS_GRPC_ENDPOINT - HTTP の場合 (
localhost:4318): DD_OTLP_CONFIG_RECEIVER_PROTOCOLS_HTTP_ENDPOINT
これらは、コア Agent とトレース Agent の両方のプロセスに渡す必要があります。コンテナ化された環境で実行している場合は、ローカル以外のインターフェイスでもサーバーを使用できるよう、localhost の代わりに 0.0.0.0 を使用してください。
この機能には、gRPC または HTTP のいずれかを構成してください。こちらに 両方の構成を示すアプリケーション例 があります。
Datadog Docker Agent のセットアップ に従います。
Datadog Agent コンテナでは、以下のエンドポイント環境変数を設定し、対応するポートを公開します。
- gRPC の場合:
DD_OTLP_CONFIG_RECEIVER_PROTOCOLS_GRPC_ENDPOINT を 0.0.0.0:4317 に設定し、ポート 4317 を公開します。 - HTTP の場合:
DD_OTLP_CONFIG_RECEIVER_PROTOCOLS_HTTP_ENDPOINT を 0.0.0.0:4318 に設定し、ポート 4318 を公開します。
既知の問題: Agent バージョン 7.61.0 以降、Docker 環境では、OTLP 取り込みパイプラインが次のエラーを出して起動に失敗することがあります。Error running the OTLP ingest pipeline: failed to register process metrics: process does not exist
影響を受けるバージョンを使用している場合は、次のいずれかの回避策を使用できます。
1. Agent Docker コンテナで、環境変数 HOST_PROC を /proc に設定します。
2. Agent Docker コンテナで、 /proc/:/host/proc/:ro から volumes を削除します。
3. Agent Docker コンテナで、 pid を host に設定します。
これらの構成は、 docker コマンドまたは Docker Compose ファイルのいずれかを使用して適用できます。
基本インストール用の Kubernetes Agent のセットアップ に従います。
Operator の datadog-agent.yaml マニフェストで gRPC または HTTP のうち、使用するプロトコルを有効にします。
gRPC の場合:
apiVersion: datadoghq.com/v2alpha1
kind: DatadogAgent
metadata:
name: datadog
spec:
# (...)
features:
otlp:
receiver:
protocols:
grpc:
enabled: true
For HTTP:
apiVersion: datadoghq.com/v2alpha1
kind: DatadogAgent
metadata:
name: datadog
spec:
# (...)
features:
otlp:
receiver:
protocols:
http:
enabled: true
After making your changes, apply the new configuration by using the following command:
kubectl apply -n $DD_NAMESPACE -f datadog-agent.yaml
これは、各プロトコルをデフォルトのポート (OTLP/gRPC は 4317、OTLP/HTTP は 4318) で有効にするものです。メトリクスとトレースはデフォルトで有効になっています。
基本インストール用の Kubernetes Agent のセットアップ に従います。
Helm の datadog-values.yaml ファイルで gRPC または HTTP のうち、使用するプロトコルを有効にします。
gRPC の場合:
datadog:
# (...)
otlp:
receiver:
protocols:
grpc:
enabled: true
For HTTP:
datadog:
# (...)
otlp:
receiver:
protocols:
http:
enabled: true
After making your changes, upgrade your Datadog Helm chart using the following command:
helm upgrade -f datadog-values.yaml <RELEASE NAME> datadog/datadog
これは、各プロトコルをデフォルトのポート (OTLP/gRPC は 4317、OTLP/HTTP は 4318) で有効にするものです。メトリクスとトレースはデフォルトで有効になっています。
基本インストール用の Kubernetes の手動インストールガイド に従います。
trace-agent コンテナとコア agent コンテナの両方で、以下の環境変数を構成します。
gRPC の場合:
name: DD_OTLP_CONFIG_RECEIVER_PROTOCOLS_GRPC_ENDPOINT # enables gRPC receiver on port 4317
value: "0.0.0.0:4317"
For HTTP:
name: DD_OTLP_CONFIG_RECEIVER_PROTOCOLS_HTTP_ENDPOINT # enables HTTP receiver on port 4318
value: "0.0.0.0:4318"
コンテナポート 4317 または 4318 をコア agent コンテナのホストポートにマッピングします。
gRPC の場合:
ports:
- containerPort: 4317
hostPort: 4317
name: traceportgrpc
protocol: TCP
For HTTP
ports:
- containerPort: 4318
hostPort: 4318
name: traceporthttp
protocol: TCP
AWS Lambda と Datadog で OpenTelemetry を使用するための詳細な手順は、次のとおりです。
- OpenTelemetry を使用して Lambda 関数をインスツルメントする
- Datadog SDK 内での OpenTelemetry API サポートを使用する
- OpenTelemetry トレースを Datadog Lambda Extension に送信する
詳細は、Serverless ドキュメントの AWS Lambda および OpenTelemetry を参照してください。
OTLP ログの取り込みを有効にする
OTLP ログの取り込みは、予定外の課金を防ぐためにデフォルトで無効になっています。これを有効にするには、ログ収集と OTLP ログの取り込みの両方を明示的に有効にする必要があります。
ホスト Agent のログ収集のセットアップ に従って、ログ収集を有効にします。
otlp_config.logs.enabledを true に設定します。
otlp_config:
logs:
enabled: true
Datadog Agent コンテナで次の環境変数を設定します。
DD_LOGS_ENABLED=trueDD_OTLP_CONFIG_LOGS_ENABLED=true
datadog-agent.yaml ファイルで、次のように設定します。
spec:
# (...)
features:
otlp:
#(... enable gRPC or HTTP ingestion...)
logCollection:
enabled: true
override:
nodeAgent:
containers:
agent:
env:
- name: DD_OTLP_CONFIG_LOGS_ENABLED
value: "true"
After making your changes, apply the new configuration by using the following command:
kubectl apply -n $DD_NAMESPACE -f datadog-agent.yaml
datadog-values.yaml ファイルで、次のように設定します。
datadog:
# (...)
otlp:
#(... enable gRPC or HTTP ingestion...)
logs:
enabled: true
logs:
enabled: true
After making your changes, upgrade your Datadog Helm chart using the following command:
helm upgrade -f datadog-values.yaml <RELEASE NAME> datadog/datadog
コア Agent コンテナで次の環境変数を設定します。
- name: DD_LOGS_ENABLED
value: "true"
- name: DD_OTLP_CONFIG_LOGS_ENABLED
value: "true"
詳細は、DaemonSet によるログの収集 を参照してください。
Datadog Agent では、ほかにも多くの環境変数と設定がサポートされています。それらすべての概要については、構成テンプレート を参照してください。
OpenTelemetry のトレース、メトリクス、ログを Datadog Agent に送信する
Datadog Agent で OTLP 取り込みを有効にしたら、テレメトリデータを Agent の OTLP エンドポイントにエクスポートするように OpenTelemetry でインスツルメントされたアプリケーションを構成します。Agent にデータを転送するように、ご使用のアプリケーション環境で OTEL_EXPORTER_OTLP_ENDPOINT 環境変数を設定します。このように設定されていない場合、Agent の OTLP レシーバーが有効になっていても、アプリケーションから Agent にテレメトリデータが送信されません。
ご使用のアプリケーションの環境で OTEL_EXPORTER_OTLP_ENDPOINT 環境変数を設定します。
gRPC の場合:
export OTEL_EXPORTER_OTLP_ENDPOINT="http://localhost:4317"
HTTP の場合:
export OTEL_EXPORTER_OTLP_ENDPOINT="http://localhost:4318"
アプリケーションコンテナで、Datadog Agent コンテナを指すように環境変数 OTEL_EXPORTER_OTLP_ENDPOINT を設定します。たとえば、次のようにします。
OTEL_EXPORTER_OTLP_ENDPOINT=http://<datadog-agent>:4318
両方のコンテナは同じブリッジネットワーク内に定義されている必要があります。これは、Docker Compose を使用している場合は自動的に処理されます。そうでない場合は、Docker アプリケーションのトレース の Docker の例に従って、ブリッジネットワークに適切なポートを設定してください。
アプリケーションのデプロイメントファイルで、環境変数 OTEL_EXPORTER_OTLP_ENDPOINT を使用して OpenTelemetry クライアントがトレースを送信するエンドポイントを構成します。
gRPC の場合:
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
注: Custom Metrics のコンテナタグを充実させるには、OTLP メトリクスを生成するアプリケーションコード内で適切なリソース属性を設定します。たとえば、container.id リソース属性に Pod の UID を設定します。
トレースの送信先エンドポイントを構成する際は、ご使用の OTLP ライブラリに必要となる、正しいパスを使用してください。ライブラリによっては、トレースの送信先として /v1/traces パスを指定する必要があるものもあれば、ルートパス /に変更します。
参考資料