Problemas de logs con docker y DataDog
Tengo varios servidores, para facilitar la gestión y detectar incidencias estoy usando dockers y DataDog (en su versión docker).
Para quien no lo sepa, DataDog es un sistema de monitoreo para servidores. Permite muchas cosas. Yo solo estoy usando 2 de ellas:
- Estadísticas de la infraestructura (uso de CPU, RAM, espacio en disco, lectura/escritura, ...)
- Centralizar los logs (en vez de tenerlos en el servidor de cada web por separado, se envian a Datadog)
El problema me lo he encontrado con el consumo de CPU, que de vez en cuando el agente de Datadog llega a ser del 100% de CPU. Y esto provoca que los otros contenedores no tengan CPU disponible y que por tanto la web deje de funcionar.
He encontrado poca información sobre el tema, y alguna desactualizada hace varios años.
Luego de investigar un tiempo, me he dado cuenta que el problema no es realmente Datadog. El problema es específicamente cuando Datadog intenta enviar los logs de los dockers.
La primera solución temporal es desactivar el envío de logs:
datadog_agent:
image: datadog/agent:7
container_name: "${PROJECT_NAME}_datadog_agent"
restart: always
environment:
DD_API_KEY: "131ef96a2e4593a88051ceaff208b26a"
DD_SITE: "datadoghq.eu"
# DD_LOGS_ENABLED: "true"
# DD_LOGS_CONFIG_CONTAINER_COLLECT_ALL: "true"
DD_AC_EXCLUDE: "name:${PROJECT_NAME}_datadog_agent"
DD_HOSTNAME: "${PROJECT_BASE_URL}"
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
- /proc/:/host/proc/:ro
- /sys/fs/cgroup:/host/sys/fs/cgroup:ro
- /opt/datadog-agent/run:/opt/datadog-agent/run:rw
Se ha de comentar DD_LOGS_ENABLED y DD_LOGS_CONFIG_CONTAINER_COLLECT_ALL y regenerar el contenedor.
Depende del caso puede ser que en unos minutos veas como la CPU baja, o puede ser que no notes ninguna mejora y que tengas que reiniciar el servidor o el servicio del demonio de dockerd.
Al Menos con esta solución se puede tener estadísticas de CPU, RAM, disco, etc ... mientras buscaba cómo solucionar el problema de los logs.
Indagando más en el tema descubrí que Datadog lee los ficheros json.log de los contenedores docker. Y en mi caso el problema era que algunos de esos ficheros pesaban varios GB.
Al tener muchos ficheros, y de varios GB, esto hace que Datadog tarde mucho en procesarlos. Y tiene sentido que cada vez que se reinicia el servidor Datadog va a buscar los ficheros, y se le acomula el trabajo y por eso el consumo de CPU y RAM se dispara.
La solución a cómo limitar el tamaño de esos ficheros y evitar de esta forma ocupar espacio en disco y evitar que Datadog tenga tanta cantidad de logs para "procesar" te la dejo en este otro artículo: Cómo reducir el tamaño de los logs de los contenedores docker
¿Tienes algún proyecto en mente?
Si quieres hacer algo en Drupal tal vez puedas contratarme.
Ya sea para consultoría, desarrollo o mantenimiento de sitios web Drupal.