Esta página contiene plantillas de ejemplo detalladas para configurar integraciones en entornos en contenedores en los siguientes escenarios:

Para más información sobre contenedores e integraciones, consulta Docker e integraciones y Kubernetes e integraciones.

Todos los ejemplos utilizan la función de Autodiscovery de Datadog, que permite definir plantillas de configuración para checks del Agent en conjuntos designados de contenedores. Para más información sobre Autodiscovery, consulta Empezando con contenedores: Autodiscovery.

La integración de Redis para todos los contenedores de Redis

En este escenario de ejemplo, tienes un entorno en contenedores en el que quieres establecer y configurar la integración de Datadog y Redis para todos los contenedores que coincidan con el nombre redis. Tienes un contenedor llamado redis y otro llamado my-custom-redis, y quieres configurar la integración de Redis para ambos contenedores.

La integración de Redis viene con la configuración automática predeterminada, pero debes especificar adicionalmente un parámetro password y configurar la recopilación de logs.

Hipotéticamente, si tuvieras que configurar esta integración en un host, podrías hacer referencia a redisdb.d/conf.yaml.example para los parámetros y crear un archivo conf.yaml que contenga lo siguiente:

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

Aquí, <PASSWORD> corresponde a la contraseña a utilizar para la conexión.

Para aplicar este configuración a tus contenedores de Redis: primero, almacena tu contraseña como una variable de entorno llamada REDIS_PASSWORD; luego:

En el manifiesto de tu pod:

Anotaciones de Autodiscovery v2 (para el Datadog Agent v7.36 o posterior)

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

Anotaciones de Autodiscovery 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

Para 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"}]}}'

Para versiones anteriores del 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. Crea un archivo conf.d/redisdb.d/conf.yaml en tu host:

    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. Monta tu carpeta host conf.d/ en la carpeta conf.d del Agent contenedorizado.

En un 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"    

A continuación, define volumeMounts y volumes en tu manifiesto:

# [...]
        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
# [...]

Los siguientes comandos etcd crean una plantilla de con integración Redis con un parámetro de password personalizado:

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%%"}]'

Fíjate que cada uno de los tres valores es una lista. Autodiscovery agrupa los elementos de la lista en configuraciones de integraciones basadas en índices de lista compartidos. En este caso, define la primera (y única) configuración de checks a partir de check_names[0], init_configs[0] y instances[0].

En 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%%"            

Como resultado, el Agent contiene un archivo redisdb.yaml con la configuración anterior en el directorio conf.d.

Nota: La integración de Redis viene con configuración automática por defecto, que tiene prioridad sobre la configuración establecida en el manifiesto del Datadog Operator. Debido a esto, el manifiesto de ejemplo proporcionado utiliza la variable DD_IGNORE_AUTOCONF para desactivar la configuración automática.

En datadog-values.yaml:

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

Como resultado, el Agent contiene un archivo redisdb.yaml con la configuración anterior en el directorio conf.d.

Nota: La integración de Redis viene con la configuración automática predeterminada, que tiene precedencia sobre la configuración establecida en los valores de Helm. Debido a esto, el ejemplo proporcionado utiliza datadog.ignoreAutoConfig para desactivar la configuración automática.

Todos estos ejemplos utilizan Variables de plantilla de Autodiscovery:

  • %%host%% se rellena dinámicamente con la dirección IP del contenedor.
  • %%env_REDIS_PASSWORD%% hace referencia a una variable de entorno denominada REDIS_PASSWORD vista por el proceso del Agent.

La integración de Apache integración y el check de HTTP en contenedores de Apache

En este escenario de ejemplo, tienes un entorno en contenedores en el que quieres establecer y configurar la integración de Datadog y Apache para todos los contenedores que coincidan con el nombre apache. También debes configurar un check de HTTP para probar dos endpoints, /website_1 y /website_2.

La integración de Apache viene con la configuración automática predeterminada, pero debes añadir una configuración adicional: hay que establecer el intervalo de recopilación en 30 segundos.

Hipotéticamente, si tuvieras que configurar esta integración en un host, podrías hacer referencia a las opciones de configuración en apache.d/conf.yaml.example y http_check.d/conf.yaml.example. Se crearían dos archivos conf.yaml:

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

Anotaciones de Autodiscovery v2 (para 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
  # (...)

Anotaciones de Autodiscovery 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
  # (...)

Archivo de Docker

Para 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}]}}'

Para versiones anteriores del 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}]]'
  • Crea las carpetas conf.d/ y conf.d/apache.d en tu host.
  • Añade la siguiente auto-configuración personalizada a conf.d/apache.d/conf.yaml en tu host.
ad_identifiers:
  - apache

init_config:

instances:
  - apache_status_url: http://%%host%%/server-status?auto
    min_collection_interval: 30
  • Luego, crea la carpeta conf.d/http_check.d en tu host.
  • Añade la siguiente auto-configuración personalizada a conf.d/http_check.d/conf.yaml en tu host.
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
  • Finalmente, monta la carpeta conf.d/ host en la carpeta conf.d/ del Agente contenedorizado.

El siguiente ConfigMap define la plantilla de integración para los contenedores apache y http_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    

En el manifiesto, define volumeMounts y volumes:

# [...]
        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}]]'

Nota: El orden de cada lista es importante. El Agent sólo puede generar la configuración del check de HTTP correctamente si todas las partes de su configuración tienen el mismo índice en las tres listas.

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            

Nota: La integración de Apache viene con configuración automática por defecto, que tiene prioridad sobre la configuración establecida en el manifiesto del Datadog Operator. Debido a esto, el manifiesto de ejemplo proporcionado utiliza la variable DD_IGNORE_AUTOCONF para desactivar la configuración automática.

En 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      

Nota: La integración de Apache viene con la configuración automática predeterminada, que tiene precedencia sobre la configuración establecida en los valores de Helm. Debido a esto, el ejemplo proporcionado utiliza datadog.ignoreAutoConfig para desactivar la configuración automática.

Todos estos ejemplos utilizan Variables de plantilla de Autodiscovery:

  • %%host%% se rellena dinámicamente con la dirección IP del contenedor.

Para leer más