このページでは、以下のシナリオにおいて、コンテナ化された環境でインテグレーションを構成するための詳細なサンプルテンプレートを紹介しています。

コンテナとインテグレーションの詳細については、Docker とインテグレーションおよび Kubernetes とインテグレーションを参照してください。

すべての例で、Datadog のオートディスカバリー機能が利用されており、指定されたコンテナセット上で Agent チェックのための構成テンプレートを定義することが可能になっています。オートディスカバリーの詳細については、コンテナの概要: オートディスカバリーを参照してください。

すべての Redis コンテナを対象とした Redis インテグレーション

このシナリオ例では、コンテナ化された環境があり、redis という名前にマッチするすべてのコンテナに対して Datadog-Redis インテグレーションをセットアップして構成します。redis という名前のコンテナと my-custom-redis という名前のコンテナがあり、両方を対象に Redis インテグレーションを構成します。

Redis インテグレーションには、デフォルトの自動構成が付属していますが、追加で password パラメーターを指定し、ログの収集を構成します。

仮に、このインテグレーションをホスト上で構成する場合は、redisdb.d/conf.yaml.example のパラメーターを参照し、以下の記述を含む conf.yaml ファイルを作成することができます。

init_config:
instances:
  - host: localhost
    port: 6379
    password: <PASSWORD>
logs:
  - type: file
    path: /var/log/redis_6379.log
    source: redis
    service: redis_service

ここで、<PASSWORD> は接続に使用するパスワードに対応しています。

この構成を Redis コンテナに適用するには、まずパスワードを REDIS_PASSWORD という名前の環境変数として格納した後、以下の作業を行います。

ポッドマニフェストで:

Autodiscovery Annotations v2 (Datadog Agent v7.36+ 向け)

apiVersion: v1
kind: Pod
metadata:
  name: redis
  annotations:
    ad.datadoghq.com/redis.checks: |
      {
        "redisdb": {
          "instances": [
            {
              "host": "%%host%%",
              "port":"6379",
              "password":"%%env_REDIS_PASSWORD%%"
            }
          ]
        }
      }      
    ad.datadoghq.com/redis.logs: |
      [
        {
          "type": "file",
          "path": "/var/log/redis_6379.log",
          "source": "redis",
          "service": "redis_service"
        }
      ]      
spec:
  containers:
    - name: redis
      image: redis:latest
      ports:
        - containerPort: 6379

Autodiscovery Annotations v1

apiVersion: v1
kind: Pod
metadata:
  name: redis
  annotations:
    ad.datadoghq.com/redis.check_names: '["redisdb"]'
    ad.datadoghq.com/redis.init_configs: '[{}]'
    ad.datadoghq.com/redis.instances: |
      [
        {
          "host": "%%host%%",
          "port":"6379",
          "password":"%%env_REDIS_PASSWORD%%"
        }
      ]      
    ad.datadoghq.com/redis.logs: |
      [
        {
          "type": "file",
          "path": "/var/log/redis_6379.log",
          "source": "redis",
          "service": "redis_service"
        }
      ]      
spec:
  containers:
    - name: redis
      image: redis:latest
      ports:
        - containerPort: 6379

docker-compose.yaml

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 フォルダーにマウントします。

ConfigMap で:

kind: ConfigMap
apiVersion: v1
metadata:
  name: redisdb-config-map
  namespace: default
data:
  redisdb-config: |-
    ad_identifiers:
      - redis
    init_config:
    instances:
      - host: "%%host%%"
        port: "6379"
        password: "%%env_REDIS_PASSWORD%%"
    logs:
      - type: "file"
        path: "/var/log/redis_6379.log"
        source: "redis"
        service: "redis_service"    

次に、マニフェストで volumeMountsvolumes を定義します。

# [...]
        volumeMounts:
        # [...]
          - name: redisdb-config-map
            mountPath: /conf.d/redisdb.d
        # [...]
      volumes:
      # [...]
        - name: redisdb-config-map
          configMap:
            name: redisdb-config-map
            items:
              - key: redisdb-config
                path: conf.yaml
# [...]

以下の 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] から最初 (かつ唯一) のチェック構成が作成されます。

datadog-agent.yaml で:

apiVersion: datadoghq.com/v2alpha1
kind: DatadogAgent
metadata:
  name: datadog
spec:
  global:
    [...]
  features:
    [...]
  override:
    nodeAgent:
      env: 
        - name: DD_IGNORE_AUTOCONF
          value: redisdb
      extraConfd:
        configDataMap:
          redisdb.yaml: |-
            ad_identifiers:
              - redis
            init_config:
            instances:
              - host: "%%host%%"
                port: 6379
                password: "%%env_REDIS_PASSWORD%%"            

その結果、Agent には上記の構成を持つ redisdb.yaml ファイルが conf.d ディレクトリに格納されます。

: Redis インテグレーションには、デフォルトの自動構成が付属しており、Datadog Operator マニフェストで設定された構成よりも優先されます。このため、提供されているマニフェストの例では、DD_IGNORE_AUTOCONF 変数を使用して自動構成を無効にしています。

datadog-values.yaml で:

datadog:
  ignoreAutoConfig:
    - redisdb
  confd:
    redisdb.yaml: |-
      ad_identifiers:
        - redis
      init_config:
      instances:
        - host: "%%host%%"
          port: 6379
          password: "%%env_REDIS_PASSWORD%%"      

その結果、Agent には上記の構成を持つ redisdb.yaml ファイルが conf.d ディレクトリに格納されます。

: Redis インテグレーションには、デフォルトの自動構成が付属しており、Helm の値で設定された構成よりも優先されます。このため、提供されているマニフェストの例では、datadog.ignoreAutoConfig を使用して自動構成を無効にしています。

これらの例はすべて、オートディスカバリー テンプレート変数を使用しています。

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

すべての Apache コンテナを対象とした HTTP チェック付きの Apache インテグレーション

このシナリオ例では、コンテナ化された環境があり、apache という名前にマッチするすべてのコンテナに対して Datadog-Apache インテグレーションをセットアップして構成します。また、2 つのエンドポイント /website_1/website_2 をテストするために、HTTP チェックをセットアップします。

Apache インテグレーションには、デフォルトの自動構成が付属していますが、さらに構成を追加して、収集間隔を 30 秒に設定します。

仮に、このインテグレーションをホスト上で構成する場合、apache.d/conf.yaml.examplehttp_check.d/conf.yaml.example の構成オプションを参照することができます。conf.yaml ファイルを 2 つ作成することになります。

apache.d/conf.yaml

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

http_check.d/conf.yaml

init_config:
instances:
  - name: my_website_1
    url: http://%%host%%/website_1
    timeout: 1
  - name: my_website_2
    url: http://%%host%%/website_2
    timeout: 1

Autodiscovery Annotations v2 (Datadog Agent v7.36+ 向け)

apiVersion: v1
kind: Pod
metadata:
  name: apache
  annotations:
    ad.datadoghq.com/apache.checks: |
      {
        "apache": {
          "instances": [
            {
              "apache_status_url": "http://%%host%%/server-status?auto",
              "min_collection_interval": 30
            }
          ]
        },
        "http_check": {
          "instances": [
            {
              "name": "my_website_1",
              "url": "http://%%host%%/website_1",
              "timeout": 1
            },
            {
              "name": "my_website_2",
              "url": "http://%%host%%/website_2",
              "timeout": 1
            }
          ]
        }
      }      
  labels:
    name: apache
spec:
  containers:
    - name: apache
  # (...)

Autodiscovery Annotations v1

apiVersion: v1
kind: Pod
metadata:
  name: apache
  annotations:
    ad.datadoghq.com/apache.check_names: '["apache","http_check"]'
    ad.datadoghq.com/apache.init_configs: '[{},{}]'
    ad.datadoghq.com/apache.instances: |
      [
        [
          {
            "apache_status_url": "http://%%host%%/server-status?auto",
            "min_collection_interval": 30
          }
        ],
        [
          {
            "name": "my_website_1",
            "url": "http://%%host%%/website_1",
            "timeout": 1
          },
          {
            "name": "my_website_2",
            "url": "http://%%host%%/website_2",
            "timeout": 1
          }
        ]
      ]      
  labels:
    name: apache
spec:
  containers:
    - name: apache
  # (...)

Dockerfile

Datadog Agent v7.36+ の場合:

LABEL "com.datadoghq.ad.checks"='{"apache": {"instances": [{"apache_status_url": "http://%%host%%/server-status?auto", "min_collection_interval": 30}]}, "http_check":{"instances": [{"name":"my_website_1","url":"http://%%host%%/website_1","timeout":1},{"name":"my_website_2","url":"http://%%host%%/website_2","timeout":1}]}}'

それより前のバージョンの Agent の場合:

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

init_config:

instances:
  - apache_status_url: http://%%host%%/server-status?auto
    min_collection_interval: 30
  • 次に、ホストに conf.d/http_check.d フォルダーを作成します。
  • ホストの conf.d/http_check.d/conf.yaml の下にカスタムオートディスカバリー構成を追加します。
ad_identifiers:
  - apache

init_config:

instances:
  - name: "<WEBSITE_1>"
    url: "http://%%host%%/website_1"
    timeout: 1

  - name: "<WEBSITE_2>"
    url: "http://%%host%%/website_2"
    timeout: 1
  • 最後に、ホストの conf.d/ フォルダーをコンテナ化 Agent の conf.d/ フォルダーにマウントします。

次の ConfigMap は、apachehttp_check コンテナのインテグレーションテンプレートを定義します。

kind: ConfigMap
apiVersion: v1
metadata:
  name: apache-config-map
  namespace: default
data:
  apache-config: |-
    ad_identifiers:
      - apache
    init_config:
    instances:
      - apache_status_url: http://%%host%%/server-status?auto
        min_collection_interval: 30    
  http-check-config: |-
    ad_identifiers:
      - apache
    init_config:
    instances:
      - name: "<WEBSITE_1>"
        url: "http://%%host%%/website_1"
        timeout: 1
      - name: "<WEBSITE_2>"
        url: "http://%%host%%/website_2"
        timeout: 1    

マニフェストで volumeMountsvolumes を定義します。

# [...]
        volumeMounts:
        # [...]
          - name: apache-auto-config
            mountPath: /conf.d/apache.d/
          - name: http-auto-config
            mountPath: /conf.d/http_check.d/
        # [...]
      volumes:
      # [...]
        - name: apache-auto-config
          configMap:
            name: apache-config-map
            items:
              - key: apache-config
                path: auto_conf.yaml
        - name: http-auto-config
          configMap:
            name: apache-config-map
            items:
              - key: http-check-config
                path: auto_conf.yaml
# [...]
etcdctl set /datadog/check_configs/apache/check_names '["apache", "http_check"]'
etcdctl set /datadog/check_configs/apache/init_configs '[{}, {}]'
etcdctl set /datadog/check_configs/apache/instances '[[{"apache_status_url": "http://%%host%%/server-status?auto", "min_collection_interval": 30}],[{"name": "<WEBSITE_1>", "url": "http://%%host%%/website_1", timeout: 1},{"name": "<WEBSITE_2>", "url": "http://%%host%%/website_2", timeout: 1}]]'

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

apiVersion: datadoghq.com/v2alpha1
kind: DatadogAgent
metadata:
  name: datadog
spec:
  global:
    [...]
  features:
    [...]
  override:
    nodeAgent:
      env:
        - name: DD_IGNORE_AUTOCONF
          value: apache
      extraConfd:
        configDataMap:
          apache.yaml: |-
            ad_identifiers:
              - apache
            init_config:
            instances:
              - apache_status_url: "http://%%host%%/server-status?auto"
                min_collection_interval: 30            
          http_check.yaml: |-
            ad_identifiers:
              - apache
            init_config:
            instances:
              - name: "my_website_1"
                url: "http://%%host%%/website_1"
                timeout: 1
              - name: "my_website_2"
                url: "http://%%host%%/website_2"
                timeout: 1            

: Apache インテグレーションには、デフォルトの自動構成が付属しており、Datadog Operator マニフェストで設定された構成よりも優先されます。このため、提供されているマニフェストの例では、DD_IGNORE_AUTOCONF 変数を使用して自動構成を無効にしています。

In datadog-values.yaml:

datadog:
  ignoreAutoConfig:
    - apache
  confd:
    apache.yaml: |-
      ad_identifiers:
        - apache
      init_config:
      instances:
        - apache_status_url: "http://%%host%%/server-status?auto"
          min_collection_interval: 30      
    http_check.yaml: |-
      ad_identifiers:
        - apache
      init_config:
      instances:
        - name: "my_website_1"
          url: "http://%%host%%/website_1"
          timeout: 1
        - name: "my_website_2"
          url: "http://%%host%%/website_2"
          timeout: 1      

: Apache インテグレーションには、デフォルトの自動構成が付属しており、Helm の値で設定された構成よりも優先されます。このため、提供されているマニフェストの例では、datadog.ignoreAutoConfig を使用して自動構成を無効にしています。

これらの例はすべて、オートディスカバリー テンプレート変数を使用しています。

  • %%host%% には、コンテナの IP が動的に設定されます。

その他の参考資料

PREVIEWING: may/unit-testing