Información general

Una de las dificultades que surgen cuando se monitoriza una infraestructura contenedorizada es que los contenedores pueden pasar de un host a otro. Así pues, la naturaleza dinámica de los sistemas contenedorizados dificulta la monitorización manual.

Para solucionar este problema, puedes usar la función Autodiscovery de Datadog, que permite identificar automáticamente los servicios que se ejecutan en un contenedor en concreto y reunir datos procedentes de estos. Cada vez que se inicia un contenedor, el Datadog Agent identifica los servicios que se ejecutan en este nuevo contenedor, busca la configuración de monitorización correspondiente y pone en marcha la recopilación de métricas.

Autodiscovery te permite definir plantillas de configuración para llevar a cabo checks de Agent, así como indicar en qué contenedor debería aplicarse cada check.

El Agent detecta eventos como la creación, destrucción, inicio y detención de contenedores. Acto seguido, activa, desactiva y regenera la configuración estática de checks en dichos eventos. El Agent, al inspeccionar todos los contenedores en ejecución, comprueba si estos coinciden con alguno de los identificadores de contenedor de Autodiscovery presentes en las plantillas cargadas. Por cada coincidencia, el Agent genera una configuración estática de checks sustituyendo las variables de plantilla por los valores concretos del contenedor correspondiente. Una vez hecho esto, activa el check mediante la configuración estática.

Cómo funciona

Información general de Autodiscovery

En la imagen de arriba, hay un nodo de host con tres pods, uno de los cuales es de Redis y otro, de Agent. El kubelet, que es el que programa los contenedores, se ejecuta como un binario en este nodo y expone los endpoints /metrics y /pods. Cada 10 segundos, el Agent consulta /pods y obtiene las especificaciones de Redis. Además, puede ver la información del pod de Redis.

En este ejemplo, las especificaciones de Redis incluyen las siguientes anotaciones:

labels:
  tags.datadoghq.com/redis.env: "prod"
  tags.datadoghq.com/redis.service: "my-redis"
  tags.datadoghq.com/redis.version: "6.0.3"
annotations:
  ad.datadoghq.com/redis.checks: |
    {
      "redisdb": {
        "init_config": {},
        "instances": [
          {
            "host": "%%host%%",
            "port":"6379",
            "password":"%%env_REDIS_PASSWORD%%"
          }
        ]
      }
    }    
  ad.datadoghq.com/redis.logs: '[{"source":"redis"}]'

En el ejemplo de arriba, las marcas tags.datadoghq.com determinan que env, service e incluso version son etiquetas en todos los logs y métricas emitidos del pod de Redis. Estas marcas estándar forman parte del etiquetado de servicios unificado. Datadog recomienda usar el etiquetado de servicios unificado para configurar etiquetas y variables de entorno.

redisdb es el nombre del check que debe ejecutarse. init_config contiene algunos parámetros de configuración, como el intervalo mínimo de recopilación, y es opcional. Cada elemento de instances representa la configuración que debe llevarse a cabo en una instancia de un check. Nota: En este ejemplo, %%host%% es una variable de plantilla que puede completarse dinámicamente con la IP de tu contenedor.

labels:
  tags.datadoghq.com/redis.env: "prod"
  tags.datadoghq.com/redis.service: "my-redis"
  tags.datadoghq.com/redis.version: "6.0.3"
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: '[{"source":"redis"}]'

En el ejemplo de arriba, las marcas tags.datadoghq.com determinan que env, service e incluso version son etiquetas en todos los logs y métricas emitidos del pod de Redis. Estas marcas estándar forman parte del etiquetado de servicios unificado. Datadog recomienda usar el etiquetado de servicios unificado para configurar etiquetas y variables de entorno.

check_names presenta los nombres de los checks que deben ejecutarse. init_configs contiene algunos parámetros de configuración, como el intervalo mínimo de recopilación. Cada elemento de instances representa la configuración que debe llevarse a cabo en una instancia de un check. Nota: En este ejemplo, %%host%% es una variable de plantilla que puede completarse dinámicamente con la IP de tu contenedor.

A partir de este punto, el Agent genera una configuración estática de checks.

Configuración

Para configurar Autodiscovery en tu infraestructura, tienes que efectuar los dos siguientes pasos:

  1. Activa Autodiscovery en tu Datadog Agent.
  2. Crea plantillas de configuración específicas para integraciones en cada servicio que desees monitorizar. Nota: Datadog ofrece plantillas de configuración automática para algunos servicios contenedorizados habituales, como Apache y Redis.

Activar Autodiscovery

El Agent no solo detecta automáticamente los sockets accesibles y los endpoins de la API (como Docker, containerd y la API de Kubernetes), sino que también activa Autodiscovery por ti.

Si Autodiscovery no funciona, ejecuta agent status para verificar las funciones detectadas.

En caso de que la detección automática falle o quieras desactivar las funciones detectadas automáticamente, usa estos parámetros de configuración en datadog.yaml para incluir/excluir funciones:

autoconfig_exclude_features:
- docker
autoconfig_include_features:
- containerd

La lista completa de funciones detectadas automáticamente está disponible en la plantilla datadog.yaml.

Plantillas de integración

Una vez que se active Autodiscovery, el Datadog Agent intentará usarlo automáticamente en varios servicios, como Apache y Redis, en función de los archivos de configuración predeterminados de Autodiscovery.

Una plantilla de integración puede definirse de varias formas, a saber: con anotaciones de pod de Kubernetes, con marcas textuales de Docker, con un archivo de configuración integrado en el Agent, con un ConfigMap y con almacenes de valores clave. Para más información, consulta la documentación sobre las plantillas de integración de Autodiscovery.

Notas

Si utilizas Autodiscovery y se despliega una aplicación en un nodo nuevo, es posible que experimentes algún retraso al ver las métricas que aparecen en Datadog. Cuando cambias a un nodo nuevo, el Datadog Agent tarda un poco en recopilar metadatos de tu aplicación.

Leer más

PREVIEWING: rtrieu/product-analytics-ui-changes