このページでは、Autodiscovery という Datadog 機能を使用して、Docker インフラストラクチャーのインテグレーションをインストールおよび構成する方法について説明します。Autodiscovery により、%%host%% のような変数を使用して構成設定を動的に入力することができます。

Autodiscovery の動作についての詳細な説明は、コンテナの概要: Autodiscovery を参照してください。特定のコンテナを Autodiscovery から除外したり、準備されていない Pod を許容したりするなどの高度な Autodiscovery オプションについては、コンテナディスカバリー管理を参照してください。

Kubernetes を使用している場合は、Kubernetes とインテグレーションを参照してください。

次の Datadog インテグレーションは、プロセスツリーデータまたはファイルシステムアクセスを必要とするため、Autodiscovery では機能しません。CephCephVarnishPostfixCassandra Nodetool、および Gunicorn

Autodiscovery と互換性のないインテグレーションをモニターするには、Pod 内で Prometheus エクスポーターを使用して HTTP エンドポイントを公開し、OpenMetrics インテグレーション (Autodiscovery をサポート) を使用して Pod を見つけ、エンドポイントをクエリします。

インテグレーションを設定する

一部のインテグレーションでは、アクセストークンの作成や Datadog Agent への読み取り権限の付与などのセットアップを行う必要があります。インテグレーションのドキュメントのセットアップセクションの手順に従ってください。

コミュニティのインテグレーション

Datadog Agent に同梱されていないインテグレーションを使用する場合は、目的のインテグレーションを含むカスタムイメージをビルドする必要があります。手順については、コミュニティインテグレーションを使用するを参照してください。

構成

一般的に使用される一部のインテグレーションには、Autodiscovery 用のデフォルト構成が付属しています。詳細については、Autodiscovery 自動構成を参照してください。ここには、自動構成されるインテグレーションと対応するデフォルト構成ファイルのリストが記載されています。このリストにご使用のインテグレーションが含まれており、デフォルトの構成がユースケースに十分であれば、追加のアクションは必要ありません。

そうでない場合は、次のようにします。

  1. ユースケースに適した設定方法 (Docker ラベル、ローカル ファイル、または Key‑value ストア) を選択します。
  2. 選択した方法のテンプレート形式を参照します。各形式には、<CONTAINER_IMAGE> などのプレースホルダーが含まれています。
  3. これらのプレースホルダーの値を提供します。

Dockerfile

Datadog Agent v7.36+ の場合:

LABEL "com.datadoghq.ad.checks"='{"<INTEGRATION_NAME>": {"instances": [<INSTANCE_CONFIG>], "logs": [<LOGS_CONFIG>]}}'

古いバージョンの Agent の場合:

LABEL "com.datadoghq.ad.check_names"='[<INTEGRATION_NAME>]'
LABEL "com.datadoghq.ad.init_configs"='[<INIT_CONFIG>]'
LABEL "com.datadoghq.ad.instances"='[<INSTANCE_CONFIG>]'
LABEL "com.datadoghq.ad.logs"='[<LOGS_CONFIG>]'

docker-compose.yaml

Datadog Agent v7.36+ の場合:

labels:
  com.datadoghq.ad.checks: '{"<INTEGRATION_NAME>": {"instances": [<INSTANCE_CONFIG>], "logs": [<LOGS_CONFIG>]}}'

古いバージョンの Agent の場合:

labels:
  com.datadoghq.ad.check_names: '[<INTEGRATION_NAME>]'
  com.datadoghq.ad.init_configs: '[<INIT_CONFIG>]'
  com.datadoghq.ad.instances: '[<INSTANCE_CONFIG>]'
  com.datadoghq.ad.logs: '[<LOGS_CONFIG>]'

docker run、nerdctl run、または podman run を使用する場合

Datadog Agent v7.36+ の場合:

docker run -l com.datadoghq.ad.checks="{\"<INTEGRATION_NAME>\": {\"instances\": [<INSTANCE_CONFIG>], \"logs\": [<LOGS_CONFIG>]}}"

古いバージョンの Agent の場合:

docker run -l com.datadoghq.ad.check_names='[<INTEGRATION_NAME>]' -l com.datadoghq.ad.init_configs='[<INIT_CONFIG>]' -l com.datadoghq.ad.instances='[<INSTANCE_CONFIG>]' -l com.datadoghq.ad.logs='[<LOGS_CONFIG>]'

: これらのラベルを設定する際に JSON をエスケープできます。例えば、以下のようになります。

docker run -l "com.datadoghq.ad.checks="{\"apache\": {\"instances\": [{\"apache_status_url\":\"http://%%host%%/server-status?auto2\"}]}}"

Docker Swarm

Docker Cloud で Swarm モードを使用する場合、ラベルはイメージに適用する必要があります。

Datadog Agent v7.36+ の場合:

version: "1.0"
services:
...
  project:
    image: '<IMAGE_NAME>'
    labels:
      com.datadoghq.ad.checks: '{"<INTEGRATION_NAME>": {"instances": [<INSTANCE_CONFIG>], "logs": [<LOGS_CONFIG>]}}'

古いバージョンの Agent の場合:

version: "1.0"
services:
...
  project:
    image: '<IMAGE_NAME>'
    labels:
      com.datadoghq.ad.check_names: '[<INTEGRATION_NAME>]'
      com.datadoghq.ad.init_configs: '[<INIT_CONFIG>]'
      com.datadoghq.ad.instances: '[<INSTANCE_CONFIG>]'
      com.datadoghq.ad.logs: '[<LOGS_CONFIG>]'

Autodiscovery テンプレートを、マウントされている /conf.d ディレクトリ内にローカルファイルとして保存できます。テンプレートを変更、追加、または削除するたびに、Agent コンテナを再起動する必要があります。

  1. ホストで conf.d/<INTEGRATION_NAME>.d/conf.yaml ファイルを作成します。

    ad_identifiers:
      - <CONTAINER_IMAGE>
    
    init_config:
      <INIT_CONFIG>
    
    instances:
      <INSTANCES_CONFIG>
    
    logs:
      <LOGS_CONFIG>
    
  2. ホストの conf.d/ フォルダをコンテナ化された Agent の conf.d フォルダにマウントします。

    docker-compose.yaml

    volumes:
      [...]
      - <PATH_TO_LOCAL_FOLDER>/conf.d:/conf.d
    

    docker run

    docker run -d --name datadog-agent \
      [...]
      -v <PATH_TO_LOCAL_FOLDER>/conf.d:/conf.d \
    

Autodiscovery テンプレートは、Consuletcd、または ZooKeeper から取得できます。key-value ストアは datadog.yaml 構成ファイルで設定するか (その後、このファイルを Agent コンテナ内にマウントします)、または Agent コンテナ内の環境変数として設定できます。

datadog.yaml での構成:

datadog.yaml で、key-value ストアの <KEY_VALUE_STORE_IP> アドレスと <KEY_VALUE_STORE_PORT> を設定します。

config_providers:
  - name: etcd
    polling: true
    template_dir: /datadog/check_configs
    template_url: '<KV_STORE_IP>:<KV_STORE_PORT>'
    username:
    password:

  - name: consul
    polling: true
    template_dir: datadog/check_configs
    template_url: '<KV_STORE_IP>:<KV_STORE_PORT>'
    ca_file:
    ca_path:
    cert_file:
    key_file:
    username:
    password:
    token:

  - name: zookeeper
    polling: true
    template_dir: /datadog/check_configs
    template_url: '<KV_STORE_IP>:<KV_STORE_PORT>'
    username:
    password:

Datadog Agent を再起動して、変更を適用します。

環境変数での構成:

key-value ストアがテンプレートソースとして有効になっている場合、Agent はキー /datadog/check_configs の下にテンプレートを探します。Autodiscovery では、このような key-value 階層を使用する必要があります。

/datadog/
  check_configs/
    <CONTAINER_IMAGE>/
      - check_names: ["<INTEGRATION_NAME>"]
      - init_configs: ["<INIT_CONFIG>"]
      - instances: ["<INSTANCES_CONFIG>"]
      - logs: ["<LOGS_CONFIG>"]
    ...

プレースホルダー値

次のようにプレースホルダー値を指定します。

<INTEGRATION_NAME>
ご使用の Datadog インテグレーションの名前。たとえば、etcdredisdb です。
<CONTAINER_IMAGE>
コンテナイメージに対して照合する識別子。

例: redis をコンテナ識別子として指定した場合、Autodiscovery テンプレートは redis と一致するイメージ名を持つすべてのコンテナに適用されます。foo/redis:latestbar/redis:v2 を実行している 1 つのコンテナを使用している場合、Autodiscovery テンプレートは両方のコンテナに適用されます。

ad_identifiers パラメーターはリストを受け入れるため、複数のコンテナ識別子を指定できます。カスタム識別子も使用できます。カスタム Autodiscovery 識別子を参照してください。
<INIT_CONFIG>
インテグレーションの <INTEGRATION_NAME>.d/conf.yaml.example ファイルの init_config の下にリストされている構成パラメーター。init_config セクションは通常は空です。
<INSTANCES_CONFIG>
インテグレーションの <INTEGRATION_NAME>.d/conf.yaml.example ファイルの instances の下にリストされている構成パラメーター。
<LOGS_CONFIG>
インテグレーションの <INTEGRATION_NAME>.d/conf.yaml.example ファイルの logs の下にリストされている構成パラメーター。

Redis インテグレーション

Redis は Autodiscovery 自動設定に対応するテクノロジーの 1 つです。以下の例では、この基本設定を上書きし、password パラメーターを追加するカスタム設定を示します。

REDIS_PASSWORD という名前の環境変数にパスワードを保存した上で、次を実行します。

Datadog Agent v7.36+ の場合:

labels:
  com.datadoghq.ad.checks: '{"redisdb": {"instances": [{"host": "%%host%%","port":"6379","password":"%%env_REDIS_PASSWORD%%"}], "logs": [{"type": "file", "path": "/var/log/redis_6379.log", "source": "redis", "service": "redis_service"}]}}'

古いバージョンの Agent の場合:

labels:
  com.datadoghq.ad.check_names: '["redisdb"]'
  com.datadoghq.ad.init_configs: '[{}]'
  com.datadoghq.ad.instances: '[{"host": "%%host%%","port":"6379","password":"%%env_REDIS_PASSWORD%%"}]'
  com.datadoghq.ad.logs: '[{"type": "file", "path": "/var/log/redis_6379.log", "source": "redis", "service": "redis_service"}]'
  1. ホストで conf.d/redisdb.d/conf.yaml ファイルを作成します。

    ad_identifiers:
      - redis
    init config:
    instances:
      - host: "%%host%%"
        port: "6379"
        username: "datadog"
        password: "%%env_REDIS_PASSWORD%%"
    logs:
      - type: "file"
        path: "/var/log/redis.log"
        source: "redis"
        service: "redis_service"
    
  2. ホストの conf.d/ フォルダをコンテナ化された Agent の conf.d フォルダにマウントします。

以下の etcd コマンドは、カスタム password パラメーターを使用して Redis インテグレーションテンプレートを作成します。

etcdctl mkdir /datadog/check_configs/redis
etcdctl set /datadog/check_configs/redis/check_names '["redisdb"]'
etcdctl set /datadog/check_configs/redis/init_configs '[{}]'
etcdctl set /datadog/check_configs/redis/instances '[{"host": "%%host%%","port":"6379","password":"%%env_REDIS_PASSWORD%%"}]'

3 つの値はいずれもリストであることに注意してください。Autodiscovery は、共有リストインデックスに基づいてインテグレーション構成にリスト項目を組み立てます。この場合、check_names[0]init_configs[0]、および instances[0] から最初 (かつ唯一) のチェック構成を構成します。

これらの例ではすべて Autodiscovery テンプレート変数を使用しています。

  • %%host%% には、コンテナの IP が動的に設定されます。
  • %%env_REDIS_PASSWORD%%は、Agent プロセスから見た REDIS_PASSWORD という名前の環境変数を参照します。

複数のコンテナセットに対して複数のチェックを設定する方法など、さらに多くの例については Autodiscovery: シナリオ & 例を参照してください。