A partir de la versión 6, el Datadog Agent recopila logs de contenedores. La forma recomendada de recopilar logs desde contenedores de ECS es activar la recopilación de logs en la definición de tarea de tu Agent. Para ello, modifica el archivo de definición de tarea utilizado anteriormente y registra tu definición de tarea actualizada. También puedes editar la definición de tarea directamente desde la interfaz de usuario web de Amazon.
Una vez activada, el contenedor del Datadog Agent recopila los logs emitidos desde los otros contenedores de aplicaciones que se encuentran en ese mismo host, lo cual se limita a los logs emitidos en los flujos de logs stdout y stderr al utilizar el controlador de registro default o json-file.
Si tus contenedores crean archivos de logs aislados en sus contenedores, debes seguir algunos pasos más para asegurarte de que el contenedor del Agent tenga visibilidad sobre esos archivos de logs.
Para recopilar todos los logs de tus contenedores de ECS en ejecución, actualiza tu definición de tarea del Agent de la configuración de ECS original con las variables de entorno y montajes siguientes.
Estas definiciones de tarea configuran la variable de entornoDD_LOGS_CONFIG_CONTAINER_COLLECT_ALL=true para recopilar logs de cada contenedor que el Agent detecta. Configura esta variable de entorno en false (falso) para recopilar logs únicamente cuando los contenedores tengan etiquetas de Autodiscovery presentes.
Si tienes un archivo local para tu definición de tarea del Agent, puedes repetir estos pasos para registrar tu definición de tarea actualizada. Al hacerlo, se te creará una nueva revisión. A continuación, podrás hacer referencia a esta revisión actualizada en el servicio daemon del Datadog Agent.
Si está configurada la variable de entornoDD_LOGS_CONFIG_CONTAINER_COLLECT_ALL=true, el Agent recopila logs desde todos los contenedores que detecta de forma predeterminada. Estos logs recopilados tienen las etiquetas service (servicio) y source (fuente) configuradas en el nombre de imagen corto del contenedor en cuestión. Puedes proporcionar etiquetas de Docker en tus contenedores de aplicaciones de ECS para que Autodiscovery personalice la configuración de log que utiliza el Agent para ese contenedor.
Puedes consultar las instrucciones de configuración de recopilación de logs de Docker para obtener información sobre cómo utilizar las configuraciones de Autodiscovery. Por ejemplo, la siguiente configuración de log sobrescribe las etiquetas source (fuente) y service (servicio) de los logs recopilados.
Respecto a ECS, esto se puede añadir a la etiquetacom.datadoghq.ad.logs en las dockerLabels (etiquetas de Docker) de la definición de tarea del contenedor de aplicaciones que haya emitido esos logs.
Docker (con el controlador default o json-file) expone los flujos de logs stdout y stderr en un formato que el Agent puede encontrar fácilmente. Sin embargo, si un contenedor crea un archivo de log aislado en su contenedor, el Agent no tendrá visibilidad sobre ese archivo de forma nativa. Datadog recomienda utilizar los flujos de salida stdout y stderr para aplicaciones contenedorizadas para configurar la recopilación de logs de forma más automática. Si no es posible, puedes proporcionar una configuración de log de Autodiscovery que lleve a la ruta de archivo deseada y asegurarte de que el contendor del Agent y el contenedor de aplicaciones compartan un directorio en el host que contiene el archivo de log.
Ejemplo: la siguiente definición de tarea realiza lo siguiente:
Escribir algunos logs en ese archivo /var/log/example/app.log
Tiene las dockerLabels (etiquetas de Docker) presentes para definir la configuración de log
Tiene los volumes (volúmenes) y los mountPoints (puntos de montaje) de la ruta de host especificados para este directorio /var/log/example
{"containerDefinitions":[{"name":"example-logger","image":"busybox","entryPoint":["/bin/sh","-c","--"],"command":["while true; do sleep 1; echo `date` example file log >> /var/log/example/app.log; done;"],"mountPoints":[{"containerPath":"/var/log/example","sourceVolume":"applogs"}],"dockerLabels":{"com.datadoghq.ad.logs":"[{\"type\":\"file\",\"path\":\"/var/log/example/app.log\",\"source\":\"example-source\",\"service\":\"example-service\"}]"}}],"volumes":[{"host":{"sourcePath":"/var/log/example"},"name":"applogs"}],"family":"example-logger"}
Las rutas de archivo de la configuración son siempre relativas al Agent. También deben estar presentes los mismos volume (volúmenes) y mountPoint (puntos de montaje) en la definición de tarea del Agent para dar visibilidad a ese archivo de log.
Nota: A la hora de utilizar este tipo de configuración con un contendor, los flujos de logs stdout y stderr no se recopilan automáticamente desde el contenedor, sino solo el archivo. Si es necesario recopilar tanto desde los flujos de contenedor como desde un archivo, actívalo explícitamente en la configuración. Por ejemplo:
El atributo source sirve para identificar la integración que usar para cada contenedor. Sobrescríbelo directamente en tus etiquetas de contenedores para empezar a usar las integraciones de logs de Datadog. Para obtener más información sobre este proceso, lee la guía de Autodiscovery para logs.