この機能の背後にある概念については、オートディスカバリーの概要ドキュメントを参照してください。

このページでは、インテグレーションオートディスカバリーと Docker を構成する方法について説明します。Kubernetes を使用する場合は、Kubernetes インテグレーションオートディスカバリーのドキュメントを参照してください。

オートディスカバリーの目的は、特定のコンテナに対して Agent チェックを実行するときに、Datadog インテグレーション構成を適用することです。このロジックのより詳細な内容については、ホストで Agent を実行している場合の Agent インテグレーションの構成方法のドキュメントを参照してください。

オートディスカバリーを使用してインテグレーションを構成するには、以下のパラメーターを使用します。

パラメーター必須説明
<インテグレーション名>Datadog インテグレーションの名前
<初期コンフィギュレーション>特定の Datadog-<INTEGRATION_NAME> の init_config: セクションの構成
<インスタンスコンフィギュレーション>特定の Datadog-<INTEGRATION_NAME> の instances: セクションの構成

: Datadog Agent 7.36 で導入されたオートディスカバリー v2 では、<INIT_CONFIG> は必要ありません。

オートディスカバリー対応の Agent インテグレーションの完全なリストとそれらのパラメーターの例をご覧ください

以下の各セクションのタブで、特定のコンテナにインテグレーションテンプレートを適用するそれぞれの方法を示します。次の方法があります。

: サポートされているインテグレーションの一部 (CephVarnishPostfixCassandra NodetoolsGunicorn) は、プロセスツリーデータまたはファイルシステムへのアクセスを必要とするため、標準のオートディスカバリーに対応していません。これらのインテグレーションでオートディスカバリーを有効にするには、コンテナで公式の Prometheus エクスポーターを使用し、次に Agent でオートディスカバリーを使用してコンテナを見つけ、エンドポイントをクエリします。

コンフィギュレーション

: AD Annotations v2 は、インテグレーション構成を簡素化するために、Datadog Agent 7.36 で導入されました。Datadog Agent の以前のバージョンでは、AD Annotations v1 を使用してください。

Docker コンテナに対してオートディスカバリーを自動的に有効にするには、/var/run/docker.sock をコンテナ化 Agent にマウントします。Windows では、\\.\pipe\docker_engine をマウントします。

インテグレーションテンプレートは、Docker ラベルとして格納できます。オートディスカバリーを使用して、Agent は自身が Docker 上で実行されているかどうかを検出し、すべてのラベルでインテグレーションテンプレートを自動的に探します。オートディスカバリーは、以下の例のようなラベルを前提としています。

Dockerfile:

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

docker-compose.yaml:

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

docker runnerdctl run、または podman run コマンドを使用:

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

: これらのラベルを構成する際に、JSON をエスケープすることができます。例:

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

Docker Swarm:

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

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

: Datadog はオートディスカバリーを構成する際に、コンテナ化環境で Docker を使用してテレメトリを統一することをお勧めします。詳細は、統合サービスタグ付けのドキュメントを参照してください。

Docker コンテナに対してオートディスカバリーを自動的に有効にするには、/var/run/docker.sock をコンテナ化 Agent にマウントします。Windows では、\\.\pipe\docker_engine をマウントします。

インテグレーションテンプレートは、Docker ラベルとして格納できます。オートディスカバリーを使用して、Agent は自身が Docker 上で実行されているかどうかを検出し、すべてのラベルでインテグレーションテンプレートを自動的に探します。オートディスカバリーは、以下の例のようなラベルを前提としています。

Dockerfile:

LABEL "com.datadoghq.ad.check_names"='[<インテグレーション名>]'
LABEL "com.datadoghq.ad.init_configs"='[<初期コンフィギュレーション>]'
LABEL "com.datadoghq.ad.instances"='[<インスタンスコンフィギュレーション>]'

docker-compose.yaml:

labels:
  com.datadoghq.ad.check_names: '[<インテグレーション名>]'
  com.datadoghq.ad.init_configs: '[<初期コンフィギュレーション>]'
  com.datadoghq.ad.instances: '[<インスタンスコンフィギュレーション>]'

docker runnerdctl run、または podman run コマンドを使用:

-l com.datadoghq.ad.check_names='[<インテグレーション名>]' -l com.datadoghq.ad.init_configs='[<初期コンフィギュレーション>]' -l com.datadoghq.ad.instances='[<インスタンスコンフィギュレーション>]'

: これらのラベルを構成する際に、JSON をエスケープすることができます。例:

docker run --label "com.datadoghq.ad.check_names=[\"redisdb\"]" --label "com.datadoghq.ad.init_configs=[{}]" --label "com.datadoghq.ad.instances=[{\"host\":\"%%host%%\",\"port\":6379}]" --label "com.datadoghq.ad.logs=[{\"source\":\"redis\"}]" --name redis redis

Docker Swarm:

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

version: "1.0"
services:
...
  project:
    image: '<イメージ名>'
    labels:
      com.datadoghq.ad.check_names: '[<インテグレーション名>]'
      com.datadoghq.ad.init_configs: '[<初期コンフィギュレーション>]'
      com.datadoghq.ad.instances: '[<インスタンスコンフィギュレーション>]'

: Datadog はオートディスカバリーを構成する際に、コンテナ化環境で Docker を使用してテレメトリを統一することをお勧めします。詳細は、統合サービスタグ付けのドキュメントを参照してください。

テンプレートをローカルファイルとして保存し、それをコンテナ化 Agent 内にマウントする場合は、外部サービスや特定のオーケストレーションプラットフォームを必要としません。この方法の欠点は、テンプレートを変更、追加、または削除するたびに、Agent コンテナを再起動する必要がある点です。Agent は、マウントされた /conf.d ディレクトリでオートディスカバリーテンプレートを探します。

Agent v6.2.0 (および v5.24.0) 以降、デフォルトテンプレートはポートを自動検出するのではなく、監視対象ソフトウェアのデフォルトポートを使用します。別のポートを使用する必要がある場合は、Docker コンテナラベルで、カスタムオートディスカバリーテンプレートを指定します。

デフォルトのインテグレーションテンプレートは、基本的なケース向けです。追加オプションを有効にするためにカスタム Datadog インテグレーション構成が必要な場合は、別のコンテナ識別子を使用します。あるいは、テンプレート変数インデックスを使用して、独自のオートディスカバリー構成ファイルを作成します。

  1. ホストに conf.d/<INTEGRATION_NAME>.d/conf.yaml ファイルを作成し、カスタムオートディスカバリー構成を追加します。
  2. ホスト の conf.d/ フォルダーをコンテナ化 Agent の conf.d フォルダーにマウントします。

オートディスカバリー構成ファイル例:

ad_identifiers:
  <INTEGRATION_AUTODISCOVERY_IDENTIFIER>

init_config:
  <INIT_CONFIG>

instances:
  <INSTANCES_CONFIG>

<INTEGRATION_AUTODISCOVERY_IDENTIFIER> の詳細については、オートディスカバリーコンテナ識別子のドキュメントを参照してください。

: Agent はファイル名から直接 <INTEGRATIONS_NAME> を推測するため、この名前を設定する必要はありません。

オートディスカバリーでは、Consul、Etcd、および Zookeeper をインテグレーションテンプレートソースとして使用できます。key-value ストアを使用するには、Agent の datadog.yaml 構成ファイルでストアを構成し、このファイルをコンテナ化 Agent 内にマウントします。あるいは、key-value ストアを環境変数としてコンテナ化 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:

次に、Agent を再起動して、構成の変更を適用します。

環境変数での構成

key-value ストアがテンプレートソースとして有効になっている場合、Agent はキー /datadog/check_configs の下でテンプレートを探します。オートディスカバリーは、以下のような key-value 階層を前提とします。

/datadog/
  check_configs/
    <コンテナ識別子>/
      - check_names: ["<インテグレーション名>"]
      - init_configs: ["<初期コンフィギュレーション>"]
      - instances: ["<インスタンスコンフィギュレーション>"]
    ...

: key-value ストアを使用している場合、オートディスカバリーは特定の構成を特定のコンテナに適用するために、<CONTAINER_IDENTIFIER>.spec.containers[0].image の一致を試みることで、コンテナをイメージで識別します。

Datadog Redis インテグレーション

以下の docker-compose.yml ファイルは、カスタム password パラメーターを使用して適切な Redis インテグレーションテンプレートを適用します。

labels:
  com.datadoghq.ad.check_names: '["redisdb"]'
  com.datadoghq.ad.init_configs: '[{}]'
  com.datadoghq.ad.instances: '[{"host": "%%host%%","port":"6379","password":"%%env_REDIS_PASSWORD%%"}]'

Redis は、Agent にパッケージ化されているデフォルトのオートディスカバリーテンプレートの 1 つです。そのため、このファイルをマウントする必要はありません。以下の Redis テンプレートは Agent にパッケージ化されています。

ad_identifiers:
  - redis

init_config:

instances:

  - host: "%%host%%"
    port: "6379"

これは、最小の Redis インテグレーション構成とほぼ同じですが、ad_identifiers オプションがあることがわかります。この必須オプションを使用して、コンテナ識別子を指定できます。オートディスカバリーは、同じホスト上で redis イメージを実行するすべてのコンテナにこのテンプレートを適用します。詳細は、オートディスカバリーの識別子に関するドキュメントを参照してください。

Redis で、統計エンドポイントにアクセスする際に追加の password が必要な場合、以下のようにします。

  1. ホストに conf.d/ フォルダーと conf.d/redisdb.d フォルダーを作成します。
  2. ホストの conf.d/redisdb.d/conf.yaml の下にカスタムオートディスカバリー構成を追加します。
  3. ホストの conf.d/ フォルダーをコンテナ化 Agent の conf.d/ フォルダーにマウントします。
ad_identifiers:
  - redis

init_config:

instances:

  - host: "%%host%%"
    port: "6379"
    password: "%%env_REDIS_PASSWORD%%"

: パスワードがプレーンテキストで保存されることを避けるために、"%%env_<ENV_VAR>%%" テンプレート変数ロジックが使用されています。そのため、REDIS_PASSWORD 環境変数を Agent に渡す必要があります。オートディスカバリーテンプレート変数のドキュメントを参照してください。

以下の 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 つの値がそれぞれリストであることに注目してください。オートディスカバリーは、共有リストインデックスに基づいて、リスト項目をインテグレーション構成に集約します。この例の場合は、check_names[0]init_configs[0]、および instances[0] から最初 (かつ唯一) のチェック構成が作成されます。

: パスワードがプレーンテキストで保存されることを避けるために、"%%env_<ENV_VAR>%%" テンプレート変数ロジックが使用されています。そのため、REDIS_PASSWORD 環境変数を Agent に渡す必要があります。オートディスカバリーテンプレート変数のドキュメントを参照してください。

auto-conf ファイルとは異なり、key-value ストアの場合は、コンテナ識別子として短いイメージ名 (redis など) も長いイメージ名 (redis:latest など) も使用できます

Datadog Apache および HTTP チェックインテグレーション

以下の構成は、<コンテナ識別子>: httpd を持つ Apache コンテナイメージに適用されます。オートディスカバリーテンプレートは、Apache コンテナからメトリクスを収集し、2 つのエンドポイントをテストするためのインスタンスで Datadog-HTTP チェックをセットアップするように構成されます。

チェック名は、apachehttp_check、これらの <初期コンフィギュレーション>、および <インスタンスコンフィギュレーション> です。完全な構成は、それぞれのドキュメントの Datadog-Apache インテグレーションDatadog-HTTP チェックインテグレーションのページにあります。

labels:
  com.datadoghq.ad.check_names: '["apache", "http_check"]'
  com.datadoghq.ad.init_configs: '[{},{}]'
  com.datadoghq.ad.instances: '[[{"apache_status_url": "http://%%host%%/server-status?auto"}],[{"name":"<ウェブサイト_1>","url":"http://%%host%%/website_1","timeout":1},{"name":"<ウェブサイト_2>","url":"http://%%host%%/website_2","timeout":1}]]'
  • ホストに conf.d/ フォルダーと conf.d/apache.d フォルダーを作成します。
  • ホストの conf.d/apache.d/conf.yaml の下にカスタムオートディスカバリー構成を追加します。
ad_identifiers:
  - httpd

init_config:

instances:
  - apache_status_url: http://%%host%%/server-status?auto

: これは、最小の Apache チェック構成とほぼ同じですが、ad_identifiers オプションがあることがわかります。この必須オプションを使用して、コンテナ識別子を指定できます。オートディスカバリーは、同じホスト上で httpd イメージを実行するすべてのコンテナにこのテンプレートを適用します。詳細は、オートディスカバリーの識別子に関するドキュメントを参照してください。

  • 次に、ホストに conf.d/http_check.d フォルダーを作成します。
  • ホストの conf.d/http_check.d/conf.yaml の下にカスタムオートディスカバリー構成を追加します。
ad_identifiers:
  - httpd

init_config:

instances:
  - name: "<ウェブサイト_1>"
    url: "http://%%host%%/website_1"
    timeout: 1

  - name: "<ウェブサイト_2>"
    url: "http://%%host%%/website_2"
    timeout: 1
  • 最後に、ホストの conf.d/ フォルダーをコンテナ化 Agent の conf.d/ フォルダーにマウントします。
etcdctl set /datadog/check_configs/httpd/check_names '["apache", "http_check"]'
etcdctl set /datadog/check_configs/httpd/init_configs '[{}, {}]'
etcdctl set /datadog/check_configs/httpd/instances '[[{"apache_status_url": "http://%%host%%/server-status?auto"}],[{"name": "<ウェブサイト_1>", "url": "http://%%host%%/website_1", timeout: 1},{"name": "<ウェブサイト_2>", "url": "http://%%host%%/website_2", timeout: 1}]]'

: 各リストの順番が重要です。Agent は、構成の各部分が 3 つのリストの同じインデックスにある場合にのみ、HTTP チェック構成を正しく生成します。

その他の参考資料