Compose y el Datadog Agent
Compose es una herramienta de Docker que simplifica el desarrollo de aplicaciones en Docker, ya que permite definir, crear y ejecutar varios contenedores como una sola aplicación.
Aunque las instrucciones de instalación de un solo contenedor permiten ejecutar el contenedor del Datadog Agent, es posible que quieras habilitar integraciones para otros servicios contenedorizados que formen parte de tu aplicación de Compose. Para ello, deberás combinar los archivos YAML de integración con la imagen base del Datadog Agent para crear tu contenedor del Datadog Agent. Una vez hecho esto, añade el contenedor al YAML de Compose.
Ejemplo de Redis
El siguiente es un ejemplo de cómo puedes monitorizar un contenedor de Redis usando Compose. La estructura del archivo es:
|- docker-compose.yml
|- datadog
|- Dockerfile
|- conf.d
|-redisdb.yaml
El archivo docker-compose.yml
describe cómo funcionan los contenedores en conjunto y establece algunos detalles de la configuración para los contenedores.
version: '3'
services:
redis:
image: redis
datadog:
build: datadog
pid: host
environment:
- DD_API_KEY=${DD_API_KEY}
- DD_SITE=
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- /proc/:/host/proc/:ro
- /sys/fs/cgroup:/host/sys/fs/cgroup:ro
El redisdb.yaml
sigue el modelo del archivo redisdb.yaml.example e indica al Datadog Agent que busque Redis en el host llamado redis
(definido en docker-compose.yaml
, arriba) y que use el puerto Redis estándar:
init_config:
instances:
- host: redis
port: 6379
El Dockerfile
se usa para indicar a Docker Compose que genere una imagen del Datadog Agent que incluya el archivo redisdb.yaml
en la localización adecuada:
FROM gcr.io/datadoghq/agent:latest
ADD conf.d/redisdb.yaml /etc/datadog-agent/conf.d/redisdb.yaml
Recopilación de trazas de APM
Basándote en el ejemplo de Redis anterior, también puedes utilizar Compose para configurar el Datadog Agent para recopilar trazas (traces) de aplicación. Este docker-compose.yml
está extraído de este Docker de ejemplo de compose en GitHub.
version: "4"
services:
web:
build: web
command: ddtrace-run python app.py
ports:
- "5000:5000"
volumes:
- ./web:/code # modified here to take into account the new app path
links:
- redis
environment:
- DATADOG_HOST=datadog # used by the web app to initialize the Datadog library
- DD_AGENT_HOST=dd-agent # points to dd-agent to send traces
redis:
image: redis
# agent section
datadog:
container_name: dd-agent
build: datadog
links:
- redis # ensures that redis is a host that the container can find
- web # ensures that the web app can send metrics
environment:
- DD_API_KEY=<YOUR_API_KEY>
- DD_DOGSTATSD_NON_LOCAL_TRAFFIC=true # enables agent to receive custom metrics from other containers
- DD_APM_ENABLED=true # enables tracing
- DD_APM_NON_LOCAL_TRAFFIC=true # enables agent to receive traces from other containers
- DD_AGENT_HOST=dd-agent # allows web container to forward traces to agent
- DD_SITE=datadoghq.com # determines datadog instance to send data to (e.g change to datadoghq.eu for EU1)
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- /proc/:/host/proc/:ro
- /sys/fs/cgroup:/host/sys/fs/cgroup:ro
Sustituye <YOUR_API_KEY>
por tu clave de API.
Los principales cambios en el ejemplo anterior son la configuración de la variable de entorno DD_AGENT_HOST
, que debe ser la misma para tu contenedor web
y tu contenedor del Agent para recopilar trazas. DD_APM_ENABLED
habilita APM y DD_APM_NON_LOCAL_TRAFFIC
permite al Agent recibir trazas de otros contenedores.
Este ejemplo también añade la biblioteca ddtrace
al requirements.txt
para la aplicación web de Python de modo que puedas inicializarla con ddtrace-run
para habilitar APM. (La biblioteca datadog
mencionada en la siguiente lista se utiliza para recopilar métricas de DogStatsD personalizadas).
flask
redis
datadog
ddtrace <--
Por último, establece las etiquetas service
, env
y version
para tu aplicación modificando el Dockerfile
de la aplicación web como se indica a continuación:
FROM python:2.7
ADD . /code
WORKDIR /code
RUN pip install -r requirements.txt
# This is where you set DD tags
ENV DD_SERVICE web <-- This sets the "service" name in Datadog
ENV DD_ENV sandbox <-- This sets the "env" name in Datadog
ENV DD_VERSION 1.0 <-- This sets the "version" number in Datadog
Recopilación de logs
El archivo docker-compose.yml
se puede ampliar para permitir al Datadog Agent recopilar logs del contenedor.
version: '3'
services:
redis:
image: redis
labels:
com.datadoghq.ad.logs: '[{"source": "redis", "service": "redis"}]'
datadog:
build: datadog
pid: host
environment:
- DD_API_KEY=${DD_API_KEY}
- DD_SITE=
- DD_LOGS_ENABLED=true
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- /proc/:/host/proc/:ro
- /sys/fs/cgroup:/host/sys/fs/cgroup:ro
- /var/lib/docker/containers:/var/lib/docker/containers:ro
Nota: Esta configuración recopila sólo logs del contenedor de Redis
. Puedes recopilar logs de Datadog Agent añadiendo una etiqueta com.datadoghq.ad.logs
similar. También puedes activar explícitamente la recopilación de logs para todos los contenedores estableciendo la variable de entorno DD_LOGS_CONFIG_CONTAINER_COLLECT_ALL
en true
. Consulta recopilación de logs de Docker para obtener más detalles.
Referencias adicionales
Más enlaces, artículos y documentación útiles: