概要
統合サービスタグ付けは、3 つの予約済みタグである env
、service
、version
を使用して Datadog テレメトリを結び付けます。
これら 3 つのタグを使用すると、次のことができます。
- バージョンでフィルタリングされたトレースおよびコンテナメトリクスを使用してデプロイの影響を特定する
- 一貫性のあるタグを使用して、トレース、メトリクス、ログ間をシームレスに移動する
- 統一された方法で環境やバージョンに基づいてサービスデータを表示する
注:
version
タグは、新しいアプリケーションのデプロイごとに変更されることが期待されています。アプリケーションのコードに異なる 2 つのバージョンがある場合、それぞれに異なる version
タグが付けられるべきです。- オートディスカバリーログの構成が存在しない場合、ログの公式サービスはデフォルトでコンテナのショートイメージになります。ログの公式サービスを上書きするには、オートディスカバリーの Docker ラベル/ポッドアノテーションを追加します。例:
"com.datadoghq.ad.logs"='[{"service": "service-name"}]'
- スパンに関連付けられたホストはデータベース/キャッシュホストではないため、ホスト情報はデータベースとキャッシュスパンでは除外されます。
要件
言語 | トレーサー最小バージョン |
---|
.NET | 1.17.0+ |
C++ | 0.1.0+ |
Go | 1.24.0+ |
Java | 0.50.0+ |
Node | 0.20.3+ |
PHP | 0.47.0 以降 |
Python | 0.38.0+ |
Ruby | 0.34.0+ |
- 統合サービスタグ付けには、タグの構成に関する知識が必要です。タグの構成方法がわからない場合は、構成に進む前に、タグの概要およびタグの付け方のドキュメントをお読みください。
構成
統合サービスタグ付けの構成を開始するには、環境を選択します。
コンテナ化環境
コンテナ化環境では、env
、service
、version
は、サービスの環境変数またはラベル(Kubernetes のデプロイやポッドラベル、Docker コンテナラベルなど)を介して設定されます。Datadog Agent はこのタグ付け構成を検出し、コンテナから収集するデータに適用します。
コンテナ化環境で統合サービスタグ付けをセットアップするには
オートディスカバリーを有効にします。これにより、Datadog Agent は特定のコンテナで実行されているサービスを自動的に識別し、そのサービスからデータを収集して、環境変数を env
、service
、version
タグにマッピングできます。
Docker を使用している場合は、Agent がコンテナの Docker ソケットにアクセスできることを確認してください。これにより、Agent は環境変数を検出し、それを標準タグにマッピングできます。
コンテナオーケストレーションサービスに対応する環境は、以下のように完全構成または部分構成のいずれかに基づいて構成します。
構成
Admission Controller を有効にして Datadog Cluster Agent をデプロイした場合、Admission Controller はポッドマニフェストを変更し、(構成された変更条件に基づいて) 必要なすべての環境変数を注入します。その場合、ポッドマニフェスト内の DD_
環境変数の手動設定は不要になります。詳細は Admission Controller のドキュメント を参照してください。
完全な構成
Kubernetes の使用時に全範囲の統合サービスタグ付けを取得するには、デプロイオブジェクトレベルとポッドテンプレート仕様レベルの両方に環境変数を追加します。
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
tags.datadoghq.com/env: "<ENV>"
tags.datadoghq.com/service: "<SERVICE>"
tags.datadoghq.com/version: "<VERSION>"
...
template:
metadata:
labels:
tags.datadoghq.com/env: "<ENV>"
tags.datadoghq.com/service: "<SERVICE>"
tags.datadoghq.com/version: "<VERSION>"
containers:
- ...
env:
- name: DD_ENV
valueFrom:
fieldRef:
fieldPath: metadata.labels['tags.datadoghq.com/env']
- name: DD_SERVICE
valueFrom:
fieldRef:
fieldPath: metadata.labels['tags.datadoghq.com/service']
- name: DD_VERSION
valueFrom:
fieldRef:
fieldPath: metadata.labels['tags.datadoghq.com/version']
部分的な構成
ポッドレベルのメトリクス
ポッドレベルのメトリクスを構成するには、次の標準ラベル (tags.datadoghq.com
) を Deployment、StatefulSet、または Job のポッド仕様に追加します。
template:
metadata:
labels:
tags.datadoghq.com/env: "<ENV>"
tags.datadoghq.com/service: "<SERVICE>"
tags.datadoghq.com/version: "<VERSION>"
これらのラベルは、ポッドレベルの Kubernetes CPU、メモリ、ネットワーク、ディスクメトリクスをカバーし、Kubernetes の Downward API を介してサービスのコンテナに DD_ENV
、DD_SERVICE
、DD_VERSION
を注入するために使用できます。
ポッドごとに複数のコンテナがある場合は、コンテナごとに標準ラベルを指定できます。
tags.datadoghq.com/<container-name>.env
tags.datadoghq.com/<container-name>.service
tags.datadoghq.com/<container-name>.version
ステートメトリクス
Kubernetes ステートメトリクスを構成するには:
コンフィギュレーションファイルで、join_standard_tags
を true
に設定します。設定場所については、こちらのコンフィギュレーションファイルの例を参照してください。
同じ標準ラベルを親リソース (Deployment
など) のラベルのコレクションに追加します。
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
tags.datadoghq.com/env: "<ENV>"
tags.datadoghq.com/service: "<SERVICE>"
tags.datadoghq.com/version: "<VERSION>"
spec:
template:
metadata:
labels:
tags.datadoghq.com/env: "<ENV>"
tags.datadoghq.com/service: "<SERVICE>"
tags.datadoghq.com/version: "<VERSION>"
APM トレーサー / StatsD クライアント
APM トレーサーおよび StatsD クライアントの環境変数を構成するには、Kubernetes の Downward API を以下の形式で使用します。
containers:
- ...
env:
- name: DD_ENV
valueFrom:
fieldRef:
fieldPath: metadata.labels['tags.datadoghq.com/env']
- name: DD_SERVICE
valueFrom:
fieldRef:
fieldPath: metadata.labels['tags.datadoghq.com/service']
- name: DD_VERSION
valueFrom:
fieldRef:
fieldPath: metadata.labels['tags.datadoghq.com/version']
完全な構成
コンテナの DD_ENV
、DD_SERVICE
、DD_VERSION
環境変数と対応する Docker ラベルを設定して、統合サービスタグ付けの全範囲を取得します。
service
と version
の値は Dockerfile で指定できます。
ENV DD_SERVICE <SERVICE>
ENV DD_VERSION <VERSION>
LABEL com.datadoghq.tags.service="<SERVICE>"
LABEL com.datadoghq.tags.version="<VERSION>"
env
はデプロイ時に決定される可能性が高いため、後で環境変数を注入してラベルを付けることができます。
docker run -e DD_ENV=<ENV> -l com.datadoghq.tags.env=<ENV> ...
デプロイ時にすべてを設定することもできます。
docker run -e DD_ENV="<ENV>" \
-e DD_SERVICE="<SERVICE>" \
-e DD_VERSION="<VERSION>" \
-l com.datadoghq.tags.env="<ENV>" \
-l com.datadoghq.tags.service="<SERVICE>" \
-l com.datadoghq.tags.version="<VERSION>" \
...
部分的な構成
サービスが Datadog 環境変数を必要としない場合 (たとえば、Redis、PostgreSQL、NGINX などのサードパーティソフトウェアや、APM によってトレースされないアプリケーション)、Docker ラベルを使用できます。
com.datadoghq.tags.env
com.datadoghq.tags.service
com.datadoghq.tags.version
完全な構成で説明したように、これらのラベルは Dockerfile で設定するか、コンテナを起動するための引数として設定できます。
完全な構成
各サービスのコンテナのランタイム環境で、DD_ENV
、DD_SERVICE
、DD_VERSION
環境変数と対応する Docker ラベルを設定して、統合サービスタグ付けの全範囲を取得します。たとえば、ECS タスク定義を通じて、この構成をすべて 1 か所で設定できます。
"environment": [
{
"name": "DD_ENV",
"value": "<ENV>"
},
{
"name": "DD_SERVICE",
"value": "<SERVICE>"
},
{
"name": "DD_VERSION",
"value": "<VERSION>"
}
],
"dockerLabels": {
"com.datadoghq.tags.env": "<ENV>",
"com.datadoghq.tags.service": "<SERVICE>",
"com.datadoghq.tags.version": "<VERSION>"
}
部分構成
サービスが Datadog 環境変数を必要としない場合 (たとえば、Redis、PostgreSQL、NGINX などのサードパーティソフトウェアや、APM によってトレースされないアプリケーション)、ECS タスク定義で Docker ラベルを使用できます。
"dockerLabels": {
"com.datadoghq.tags.env": "<ENV>",
"com.datadoghq.tags.service": "<SERVICE>",
"com.datadoghq.tags.version": "<VERSION>"
}
非コンテナ化環境
サービスのバイナリまたは実行可能ファイルをどのように構築およびデプロイするかによって、環境変数を設定するためのオプションをいくつか利用できる場合があります。ホストごとに 1 つ以上のサービスを実行する可能性があるため、Datadog ではこれらの環境変数のスコープを単一プロセスにすることをお勧めします。
トレース、ログ、RUMリソース、Synthetic テスト、StatsD メトリクス、またはシステムメトリクスのサービスのランタイムから直接送信されるすべてのテレメトリーの構成の単一ポイントを形成するには、次のいずれかを実行します。
実行可能ファイルのコマンドで環境変数をエクスポートします。
DD_ENV=<env> DD_SERVICE=<service> DD_VERSION=<version> /bin/my-service
または、Chef、Ansible、または別のオーケストレーションツールを使用して、サービスの systemd または initd コンフィギュレーションファイルに DD
環境変数を設定します。サービスプロセスが開始すると、その変数にアクセスできるようになります。
統合サービスタグ付けのトレースを構成する場合
DD_ENV
で APM トレーサーを構成し、トレースを生成しているアプリケーションに env
の定義を近づけます。このメソッドを使用すると、env
タグをスパンメタデータのタグから自動的に取得できます。
DD_VERSION
でスパンを構成して、トレーサーに属するサービス (通常は DD_SERVICE
) に属するすべてのスパンにバージョンを追加します。これは、サービスが外部サービスの名前でスパンを作成する場合、そのスパンはタグとして version
を受信しないことを意味します。
バージョンがスパンに存在する限り、そのスパンから生成されたメトリクスをトレースするために追加されます。バージョンは、手動でコード内に追加するか、APM トレーサーによって自動的に追加できます。構成すると、これらは APM および DogStatsD クライアントによって使用され、トレースデータと StatsD メトリクスに env
、service
、version
でタグ付けします。有効にすると、APM トレーサーはこの変数の値もログに注入します。
注: スパンごとに 1 つのサービスしか存在できません。トレースメトリクスには、通常、単一のサービスもあります。ただし、ホストのタグで異なるサービスが定義されている場合、その構成されたサービスタグは、そのホストから発行されたすべてのトレースメトリクスに表示されます。
接続されたログとトレースを使用している場合、APM トレーサーでサポートされている場合は、自動ログ注入を有効にします。そうすれば、APM トレーサーは、自動的に env
、service
、version
をログに注入するため、他の場所でこれらのフィールドを手動で構成する必要がなくなります。
タグは、カスタム StatsD メトリクスの付加のみの方法で追加されます。たとえば、env
に 2 つの異なる値がある場合、メトリクスは両方の環境でタグ付けされます。1 つのタグが同じ名前の別のタグをオーバーライドする順序はありません。
サービスが DD_ENV
、DD_SERVICE
、DD_VERSION
にアクセスできる場合、DogStatsD クライアントは対応するタグをカスタムメトリクスに自動的に追加します。
注: .NET および PHP 用の Datadog DogStatsD クライアントは、この機能をサポートしていません。
インフラストラクチャーメトリクスには、env
タグと service
タグを追加することができます。コンテナ化されていないコンテキストでは、サービスメトリクスのタグ付けは Agent レベルで構成されます。
この構成はサービスのプロセスを呼び出すたびに変更されるわけではないので、version
を追加することは推奨されません。
ホスト毎の単一サービス
Agent のメインコンフィギュレーションファイルに、以下の構成を適用します。
env: <ENV>
tags:
- service:<SERVICE>
この設定により、Agent が送信するすべてのデータに対する env
と service
のタグ付けの一貫性が保証されます。
ホスト毎の複数のサービス
Agent のメインコンフィギュレーションファイルに、以下の構成を適用します。
CPU、メモリ、ディスク I/O のメトリクスに一意の service
タグをプロセスレベルで取得するには、Agent の構成フォルダ (例えば、process.d/conf.yaml
下の conf.d
フォルダ) でプロセスチェックを構成します。
init_config:
instances:
- name: web-app
search_string: ["/bin/web-app"]
exact_match: false
service: web-app
- name: nginx
search_string: ["nginx"]
exact_match: false
service: nginx-web-app
注: Agent のメインコンフィギュレーションファイルで既に service
タグをグローバルに設定している場合は、プロセスのメトリクスが 2 つのサービスにタグ付けされます。これによってメトリクスの解釈に相違が生じることがあるため、service
タグはプロセスチェックの構成のみで構成することをお勧めします。
サーバーレス環境
AWS Lambda 関数については、タグを使った Lambda のテレメトリー接続方法を参照してください。
OpenTelemetry
OpenTelemetry を使用する場合、以下のリソース属性 を、対応する Datadog 規則にマッピングします。
OpenTelemetry 規則 | Datadog 規則 |
---|
deployment.environment | env |
service.name | service |
service.version | version |
DD_SERVICE
、DD_ENV
、DD_VERSION
のような Datadog 固有の環境変数は、OpenTelemetry 構成では既定ではサポートされていません。
環境変数を使用してリソース属性を設定するには、OTEL_RESOURCE_ATTRIBUTES
に適切な値を設定します。
export OTEL_RESOURCE_ATTRIBUTES="service.name=my-service,deployment.environment=production,service.version=1.2.3"
アプリケーションコードでリソース属性を設定するには、必要な属性を持つ Resource
を作成し、TracerProvider
に関連付けます。
Python を使った例を次に示します。
from opentelemetry.sdk.resources import Resource
from opentelemetry.sdk.trace import TracerProvider
resource = Resource(attributes={
"service.name": "<SERVICE>",
"deployment.environment": "<ENV>",
"service.version": "<VERSION>"
})
tracer_provider = TracerProvider(resource=resource)
OpenTelemetry コレクターからリソース属性を設定するには、コレクターコンフィギュレーションファイルの変換プロセッサを使用します。変換プロセッサを使用すると、収集したテレメトリーデータを Datadog エクスポーターに送信する前に、その属性を変更できます。
processors:
transform:
trace_statements:
- context: resource
statements:
- set(attributes["service.name"], "my-service")
- set(attributes["deployment.environment"], "production")
- set(attributes["service.version"], "1.2.3")
...
その他の参考資料