統合サービスタグ付け

概要

統合サービスタグ付けは、3 つの予約済みタグである envserviceversion を使用して Datadog テレメトリを結び付けます。

これら 3 つのタグを使用すると、次のことができます。

  • バージョンでフィルタリングされたトレースおよびコンテナメトリクスでデプロイへの影響を特定する
  • 一貫性のあるタグを使用して、トレース、メトリクス、ログ間をシームレスに移動する
  • 統一された方法で環境またはバージョンに基づいてサービスデータを表示する

: オートディスカバリーログのコンフィギュレーションが存在しない場合、ログの公式サービスはフォルトでコンテナのショートイメージになります。ログの公式サービスを上書きするには、オートディスカバリーの Docker ラベル/ポッドアノテーションを追加します。例: "com.datadoghq.ad.logs"='[{"service": "service-name"}]'

要件

  • 統合サービスタグ付けには、Datadog Agent 6.19.x/7.19.x 以上のセットアップが必要です。

  • 統合サービスタグ付けには、予約済みタグの新しいコンフィギュレーションに対応するトレーサーのバージョンが必要です。詳細は、言語別のセットアップ手順をご覧ください。

言語トレーサー最小バージョン
.NET1.17.0+
C++1.1.4+
Go1.24.0+
Java0.50.0+
Node0.20.3+
PHP0.47.0 以降
Python0.38.0+
Ruby0.34.0+
  • 統合サービスタグ付けには、タグの構成に関する知識が必要です。タグの構成方法がわからない場合は、コンフィギュレーションに進む前に、タグの概要およびタグの付け方のドキュメントをお読みください。

コンフィギュレーション

統合サービスタグ付けの構成を開始するには、環境を選択します。

コンテナ化環境

コンテナ化環境では、envserviceversion は、サービスの環境変数またはラベル(Kubernetes のデプロイやポッドラベル、Docker コンテナラベルなど)を介して設定されます。Datadog Agent はこのタグ付けコンフィギュレーションを検出し、コンテナから収集するデータに適用します。

コンテナ化環境で統合サービスタグ付けをセットアップするには

  1. オートディスカバリーを有効にします。これにより、Datadog Agent は特定のコンテナで実行されているサービスを自動的に識別し、そのサービスからデータを収集して、環境変数を envserviceversion タグにマッピングできます。

  2. Docker を使用している場合は、Agent がコンテナの Docker ソケットにアクセスできることを確認してください。これにより、Agent は環境変数を検出し、それを標準タグにマッピングできます。

  3. 以下に詳述する完全なコンフィギュレーションまたは部分的なコンフィギュレーションのいずれかに基づいて環境を構成します。

コンフィギュレーション

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_ENVDD_SERVICEDD_VERSION を挿入するために使用できます。

ポッドごとに複数のコンテナがある場合は、コンテナごとに標準ラベルを指定できます。

tags.datadoghq.com/<container-name>.env
tags.datadoghq.com/<container-name>.service
tags.datadoghq.com/<container-name>.version
ステートメトリクス

Kubernetes ステートメトリクスを構成するには:

  1. コンフィギュレーションファイルで、join_standard_tagstrue に設定します。設定場所については、こちらのコンフィギュレーションファイルの例を参照してください。

  2. 同じ標準ラベルを親リソース (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_ENVDD_SERVICEDD_VERSION 環境変数と対応する Docker ラベルを設定して、統合サービスタグ付けの全範囲を取得します。

serviceversion の値は 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_ENVDD_SERVICEDD_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 メトリクス、またはシステムメトリクスのサービスのランタイムから直接送信されるすべてのテレメトリーのコンフィギュレーションの単一ポイントを形成するには、次のいずれかを実行します。

  1. 実行可能ファイルのコマンドで環境変数をエクスポートします。

    DD_ENV=<env> DD_SERVICE=<service> DD_VERSION=<version> /bin/my-service
    
  2. または、ChefAnsible、または別のオーケストレーションツールを使用して、サービスの systemd または initd コンフィギュレーションファイルに DD 環境変数を設定します。サービスプロセスが開始すると、その変数にアクセスできるようになります。

    統合サービスタグ付けのトレースを構成する場合

    1. DD_ENVAPM トレーサーを構成し、トレースを生成しているアプリケーションに env の定義を近づけます。このメソッドを使用すると、env タグをスパンメタデータのタグから自動的に取得できます。

    2. DD_VERSION でスパンを構成して、トレーサーに属するサービス (通常は DD_SERVICE) に属するすべてのスパンにバージョンを追加します。これは、サービスが外部サービスの名前でスパンを作成する場合、そのスパンはタグとして version を受信しないことを意味します。

      バージョンがスパンに存在する限り、そのスパンから生成されたメトリクスをトレースするために追加されます。バージョンは、手動でコード内に追加するか、APM トレーサーによって自動的に追加できます。構成すると、これらは APM および DogStatsD クライアントによって使用され、トレースデータと StatsD メトリクスに envserviceversion でタグ付けします。有効にすると、APM トレーサーはこの変数の値もログに挿入します。

      : スパンごとに 1 つのサービスしか存在できません。トレースメトリクスには、通常、単一のサービスもあります。ただし、ホストのタグで異なるサービスが定義されている場合、その構成されたサービスタグは、そのホストから発行されたすべてのトレースメトリクスに表示されます。

    接続されたログとトレースを使用している場合、APM トレーサーでサポートされている場合は、自動ログ挿入を有効にします。APM トレーサーは、自動的に envserviceversion をログに挿入するため、他の場所でこれらのフィールドを手動で構成する必要がなくなります。

    : PHP Tracer は、ログの統合サービスタグ付けのコンフィギュレーションをサポートしていません。

    接続された RUM とトレースを使用する場合、初期化ファイルの service フィールドにブラウザアプリケーションを指定し、env フィールドに環境を定義し、version フィールドにバージョンを列挙します。

    RUM アプリケーションの作成の際に、envservice の名前を確認します。

    接続された Synthetic ブラウザのテストとトレースをご利用の場合、Integration Settings ページAPM Integration for Browser Tests セクションでヘッダー送信先 URL を指定してください。

    ワイルドカードとして * を使用することができます。例えば、https://*.datadoghq.com のように指定します。

    タグは、カスタム StatsD メトリクスの付加のみの方法で追加されます。たとえば、env に 2 つの異なる値がある場合、メトリクスは両方の環境でタグ付けされます。1 つのタグが同じ名前の別のタグをオーバーライドする順序はありません。

    サービスが DD_ENVDD_SERVICEDD_VERSION にアクセスできる場合、DogStatsD クライアントは対応するタグをカスタムメトリクスに自動的に追加します。

    : .NET および PHP 用の Datadog DogStatsD クライアントは、この機能をサポートしていません。

    インフラストラクチャーメトリクスには、env タグと service タグを追加することができます。コンテナ化されていないコンテキストでは、サービスメトリクスのタグ付けは Agent レベルで構成されます。

    この構成はサービスのプロセスを起動するたびに変更されるわけではないので、version を追加することは推奨されません。

    ホスト毎の単一サービス

    Agent のメインコンフィギュレーションファイルに、以下のコンフィギュレーションを適用します。

    env: <ENV>
    tags:
      - service:<SERVICE>
    

    この設定により、Agent が送信するすべてのデータに対する envservice のタグ付けの一貫性が保証されます。

    ホスト毎の複数のサービス

    Agent のメインコンフィギュレーションファイルに、以下のコンフィギュレーションを適用します。

    env: <ENV>
    

    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 のテレメトリー接続方法を参照してください。

その他の参考資料