Datadog Agent v6 y posteriores recopila logs de contenedores. Hay dos tipos de instalaciones disponibles:
La configuración de recopilación de logs depende del entorno actual. Elige una de las siguientes instalaciones para empezar:
Si tu entorno escribe todos los logs en stdout/stderr, sigue la instalación del Agent contenedorizado.
Si no puedes desplegar el Agent contenedorizado y tu contenedor escribe todos los logs en stdout/stderr, sigue la instalación del host del Agent para activar la creación de logs contenedorizados en tu archivo de configuración del Agent.
Los comandos CLI en esta página son para el tiempo de ejecución del Docker. Sustituye docker por nerdctl para el tiempo de ejecución de containerd, o podman para el tiempo de ejecución de Podman. La compatibilidad con containerd y la colección de logs de Podman es limitada.
Para ejecutar un contenedor Docker que integra el Datadog Agent para monitorizar tu host, usa el comando a continuación para el sistema operativo que estés usando:
para evitar la pérdida de logs de contenedores durante reinicios o problemas con la red, la última línea de log recopilada para cada contenedor en este directorio se almacena en el host.
-e DD_CONTAINER_EXCLUDE="name:datadog-agent"
esto evita que el Datadog Agent recopile y envie sus propios logs y métricas. Elimina este parámetro si quieres recopìlar logs o métricas del Datadog Agent. El valor de este parámetro es compatible con expresiones regulares.
-v /var/run/docker.sock:/var/run/docker.sock:ro
para conectar con el Docker daemon y descubrir contenedores y recopilar stdout/stderr del socket de Docker.
para recopilar logs de contenedores de archivos. Disponible en el Datadog Agent 6.27.0/7.27.0+
Nota: Si utilizas Docker Compose, el valor de DD_CONTAINER_EXCLUDE no debe estar entre comillas. Configura la variable de entorno en tu archivo docker-compose.yaml como en el ejemplo siguiente:
La recopilación de logs está disabled por defecto en el Datadog Agent. Para activarlo, añade las líneas a continuación en tu archivo datadog.yaml de configuración:
Solo Windows 10: el usuario del Datadog Agent debe ser miembro del grupo docker-users para tener los permisos necesarios para trabajar con contenedores de Docker. Ejecuta net localgroup docker-users "ddagentuser" /ADD desde la indicación de comando Administrador o sigue los pasos de configuración del grupo de usuarios de Docker.
Para agrupar logs de tu aplicación <APP_NAME> almacenada en <PATH_LOG_FILE>/<LOG_FILE_NAME>.log crea un archivo <APP_NAME>.d/conf.yaml en la raíz de tu directorio de configuración del Agent con el siguiente contenido:
Reinicia el Agent para ver todos tus logs de contenedores en Datadog.
Nota: Para que el Agent recopile logs producidos por un contenedor con una configuración de logs personalizada, los logs deben incluirse en un volumen que sea accesible desde el host. Se recomienda que los logs de contenedores se escriban en stdout y stderr para que puedan ser recopilados automáticamente.
Notas importantes:
Los metadatos de contenedor no se recuperan con la recopilación de logs personalizada, por lo tanto el Agent no asigna etiquetas (tags) a logs automáticamente. Usa etiquetas personalizadas para crear etiquetas de contenedor.
El source y el service pasan por defecto al valor de etiqueta short_image en el Datadog Agent v6.8 o posteriores. Los valores del origen y el servicio se pueden sobreescribir con Autodiscovery, tal como se describe a continuación. Si se configura el valor del source como un nombre de integración, el resultado es la instalación de pipelines de integración que analizan tus logs y extraen información relevante de ellos.
Los logs que provienen del contenedor Stderr tienen un estado Error por defecto.
Si estás usando el controlador de creación de logs journald en lugar del controlador de creación de logs por defecto json-file de Docker, consulta la documentación de integración journald para ver más información sobre la configuración de entornos contenedorizados. Consulta la documentación de unidades de filtro journald para ver más información sobre parámetros de filtrado.
En el Datadog Agent v6.8 o posteriores, el source y el service pasan por defecto al valor de etiqueta short_image. Esto permite a Datadog identificar el origen del log para cada contenedor e instalar la integración correspondiente automáticamente.
Es posible que el nombre corto de imagen del contenedor no coincida con el nombre de integración para imágenes personalizadas y que se pueda sobrescribir para mostrar el nombre de tu aplicación más claramente. Esto se puede hacer con Autodiscovery de Datadog, anotaciones de pod en Kubernetes o etiquetas de contenedores.
Autodiscovery espera que las etiquetas sigan este formato, dependiendo del tipo de archivo:
Nota: Cuando se configura el valor del service mediante etiquetas de Docker, Datadog recomienda usar un servicio de etiquetado unificado como práctica recomendada. El etiquetado de servicios unificado asocia toda la telemetría de Datadog, incluidos los logs, mediante el uso de tres etiquetas estándar: env, service y version. Para aprender a configurar tu entorno con el etiquetado unificado, consulta la documentación de etiquetado de servicios unificado.
2018-01-03T09:24:24.983Z UTC Exception in thread "main" java.lang.NullPointerException
at com.example.myproject.Book.getTitle(Book.java:16)
at com.example.myproject.Author.getBookTitles(Author.java:25)
at com.example.myproject.Bootstrap.main(Bootstrap.java:14)
Usa la etiqueta com.datadoghq.ad.logs en tus contenedores (como se muestra a continuación) para asegurarte de que el log descrito anteriormente se recopila correctamente:
El Agent v7.25.0/v6.25.0 o posteriores puede recopilar logs directamente de un archivo basado en una etiqueta Autodiscovery de un contenedor. Para recopilar estos logs, usa la etiqueta com.datadoghq.ad.logs en tus contenedores (como se muestra a continuación) para recopilar /logs/app/prod.log:
Los logs recopilados de un archivo son etiquetados con los metadatos del contenedor. La recopilación de logs está vinculada al ciclo de vida del contenedor. En cuanto se detiene el contenedor, también se detiene la recopilación de logs de ese archivo.
Notas:
La ruta del archivo es relativa al Agent, así que el directorio que contiene el archivo debería ser compartido entre el contenedor que está ejecutando la aplicación y el contenedor del Agent. Por ejemplo, si el contenedor monta /logs, cada contenedor que crea logs en el archivo puede montar un volumen, como por ejemplo /logs/app, donde está escrito el archivo del log.
Cuando se usa este tipo de etiqueta en un contenedor, sus logs stderr/stdout no se recopilan automáticamente. Si se necesita una recopilación tanto de stderr/stdout como de un archivo, se debe activar expresamente usando una etiqueta, por ejemplo:
Cuando se usa este tipo de combinación, source y service no tienen un valor por defecto y deben configurarse expresamente en la etiqueta de Autodiscovery.
Nota: Las funciones de Autodiscovery se pueden usar con o sin la variable de entorno DD_LOGS_CONFIG_CONTAINER_COLLECT_ALL. Elige una de las siguientes opciones:
Usa etiquetas de contenedor o anotaciones de pod para elegir los contenedores desde los que quieres recopilar logs.
Usa la variable de entorno para recopilar logs de todos los contenedores y luego sobrescribe los valores por defecto source y service.
Añade las reglas de procesamiento para el subconjunto deseado de contenedores.
La recopilación de logs de contenedores Docker desde un archivo es una alternativa a la recopilación por el socket de Docker. La recopilación basada en archivos tiene mejor rendimiento que la recopilación basada en sockets.
En las versiones 7.27.0/6.27.0 o posteriores, se puede configurar el Agent para recopilar logs de contenedores Docker desde un archivo. En las versiones 6.33.0+/7.33.0 o posteriores, el Agent recopila logs de contenedores Docker desde un archivo por defecto.
La recopilación basada en archivos requiere que el directorio donde se almacenan los logs de contenedores Docker esté expuesto al Agent en la ubicación siguiente: /var/lib/docker/containers (c:\programdata\docker\containers en Windows). Consulta la Guía de resolución de problemas para la recopilación de logs de Docker para más información.
Nota:
Cuando se migra desde la recopilación de logs de contenedores basada en sockets de Docker a la recopilación de logs basada en archivos, solo los nuevos contenedores son supervisados desde sus archivos. Se puede forzar al Agent a que recopile todos los logs de contenedores desde archivos si la configuración de la variable de entorno DD_LOGS_CONFIG_DOCKER_CONTAINER_FORCE_USE_FILE es true. Forzar al Agent a recopilar todos los logs de contenedores desde archivos puede generar la duplicación de logs en los contenedores existentes.
Si vuelves a cambiar el Agent desde la recopilación de logs desde archivos de contenedores a la recopilación por el socket de Docker, es probable que veas logs duplicados en contenedores existentes.
Es posible gestionar los contenedores desde los que quieres recopilar logs. Esto puede ser útil para evitar la recopilación de logs del Datadog AgentContenedor, por ejemplo. Consulta Gestión de containers Discovery para obtener más información.
En un entorno Docker, el Agent recibe actualizaciones sobre contenedores en tiempo real a través de eventos de Docker. El Agent extrae y actualiza la configuración desde las etiquetas del contenedor (Autodiscovery) cada 1 segundo.
A partir del Agent v6.14 o posterior, el Agent recopila logs de todos los contenedores (en ejecución o detenidos), lo que significa que los logs de contenedores de corta duración que se han iniciado y detenido en el último segundo continúan siendo recopilados, siempre y cuando no se eliminen.