Hoy vamos a ver un truco sencillo sobre Docker y sus logs. Pero puede ocasionarnos más de un dolor de cabeza, y esto es el tratamiento de los logs y su tamaño.
Por defecto, Docker tiene diversas formas de mostrar la información sobre sus contenedores. Y por defecto selecciona la opción de almacenar dicha información en formato de fichero JSON. Esto lo podemos visualizar a través del siguiente comando:
docker info --format '{{.LoggingDriver}}'
El problema principal de esto, es que Docker almacena la información de forma descontrolada. Es decir, si no lo configuramos, almacenará información sin ningún tipo de límite y que deje sin espacio el disco. Del cual nos podemos dar cuenta a través del mensaje del sistema no space left on device. Este problema también podemos comprobarlo a través del siguiente comando, el cual nos mostrará cuanto ocupan los ficheros:
sudo sh -c "du -ch /var/lib/docker/containers/*/*-json.log"
Si nos encontramos con este error, podemos solucionarlo de varias formas. La primera de ellas, es la rápida pero incorrecta. Y es simplemente borrar los ficheros.
sudo sh -c "truncate -s 0 /var/lib/docker/containers/*/*-json.log"
Pero esto solo conseguirá que más tarde o más temprano tengas el mismo problema. Por lo que no podemos decir que sea una solución. Ahora veremos como cambiarlo de forma permanente, de tres formas diferentes.
- Indicar como debe rotar el log en el momento de arrancar el contenedor
docker run --log-opt max-size=1m --log-opt max-file=3 \
-d busybox sh -c "while true; do $(echo date); sleep 0; done"
- Indicar la configuración en el docker-compose.
version: '3' services: portainer: image: portainer/portainer:1.24.1 ports: - 9000:9000 - 8000:8000 command: --admin-password "$$2y$$12$$U5o8Pawz6T1rflKzFRzzyO3P9aDa.1Pm6M8xtHiUVhEIQurMkTilW" volumes: - /var/run/docker.sock:/var/run/docker.sock - ./data/portainer:/data busybox: image: busybox logging: driver: "json-file" options: max-size: "200k" max-file: "10" command: ["sh","-c", "while true; do $$(echo date); sleep 0; done"]
- Indicar la configuración en el fichero daemon.json
{ "log-driver": "json-file", "log-opts": {"max-size": "10m", "max-file": "3"} }
systemctl reload docker
- none: no almacena ningún tipo de log
- syslog: envia los logs al demonio syslog
- journald: envia los logs al demonio journald.
- awslogs: envia los logs a Amazon CloudWatch Logs
No hay comentarios:
Publicar un comentario