Pasar al contenido principal

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 monitorage para servidores. Permite muchas cosas. Yo solo estoy usando 2 de ellas:

  1. Estadísticas de la infraestructura (uso de CPU, RAM, espacio en disco, lectura/escriptura, ...)
  2. 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 deja 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 especificamente 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 pude 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.

Almenos con esta solución pude tener estadísticas de CPU, RAM, disco, etc ... mientras buscaba como 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 como 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: Como reducir el tamaño de los logs de los contendores docker

Tags