Volver a la página principal
martes 5 noviembre 2024
16

Cómo usar logging en Docker Compose

La opción logging en Docker Compose permite configurar la captura y gestión de logs generados por los contenedores. Con esta configuración, puedes especificar el controlador de logs y personalizar opciones como el tamaño máximo de los archivos de log y la rotación. Docker ofrece varios controladores de logging, como json-file, syslog, journald, awslogs, entre otros.

Configuración de logging en Docker Compose

Para definir la configuración de logs en un servicio, utiliza la opción logging dentro del archivo docker-compose.yml.

Ejemplo básico de configuración de logging

En el siguiente ejemplo, configuramos el servicio web para que use el controlador de log json-file (controlador predeterminado de Docker) y limitamos el tamaño de los logs.

version: '3.8'
services:
  web:
    image: nginx
    ports:
      - "8080:80"
    logging:
      driver: "json-file"
      options:
        max-size: "10m"
        max-file: "3"

Explicación de los parámetros

  • driver: Especifica el controlador de logs que Docker debe utilizar. En este caso, json-file guarda los logs en archivos JSON.
  • options: Permite definir configuraciones específicas para el controlador de logs. En este ejemplo:
  • max-size: Limita el tamaño máximo de cada archivo de log a 10 MB.
  • max-file: Configura el número máximo de archivos de log antes de la rotación (3 archivos en total).

Principales controladores de logging en Docker Compose

Docker admite diferentes controladores de logging que puedes especificar en el campo driver. Algunos de los controladores más comunes son:

Controlador Descripción
json-file Almacena los logs en archivos JSON en el host (controlador predeterminado).
syslog Envía los logs al sistema de logs syslog del host o de otro servidor remoto.
journald Almacena los logs en journald (en sistemas que usan systemd).
awslogs Envía los logs a Amazon CloudWatch Logs.
gcplogs Envía los logs a Google Cloud Logging.
fluentd Envía los logs a un servidor fluentd, que permite un procesamiento avanzado de logs.
splunk Envía los logs a Splunk.

Cada controlador tiene diferentes opciones que puedes configurar según tus necesidades.

Ejemplo avanzado: Logging con syslog

Si deseas enviar los logs del contenedor al sistema syslog de tu host (o a otro servidor remoto), puedes hacerlo con el controlador syslog:

version: '3.8'
services:
  app:
    image: my_app_image
    logging:
      driver: "syslog"
      options:
        syslog-address: "tcp://192.168.1.10:514"
        tag: "my_app_service"

En este ejemplo:

  • syslog-address: Define la dirección del servidor syslog. Aquí usamos una dirección IP y el puerto 514.
  • tag: Etiqueta para identificar los logs de este servicio en el sistema syslog.

Ejemplo de logging en Amazon CloudWatch con awslogs

Para enviar los logs a Amazon CloudWatch, utiliza el controlador awslogs y especifica los detalles de configuración de AWS:

version: '3.8'
services:
  backend:
    image: my_backend_image
    logging:
      driver: "awslogs"
      options:
        awslogs-region: "us-west-2"
        awslogs-group: "/my-app/backend"
        awslogs-stream: "app-log"

En este caso:

  • awslogs-region: Región de AWS donde se almacenarán los logs.
  • awslogs-group: Grupo de logs en CloudWatch donde se enviarán los registros.
  • awslogs-stream: Flujo de logs dentro del grupo de logs.

Consideraciones al usar logging

  • Rotación de logs: Configurar opciones como max-size y max-file en json-file es importante para evitar el uso excesivo de espacio en disco.
  • Persistencia: Si necesitas analizar los logs de manera centralizada, considera utilizar controladores de log externos como syslog, fluentd, awslogs, o gcplogs.
  • Costo: Controladores como awslogs y gcplogs pueden generar costos adicionales según la cantidad de datos enviados y almacenados.

Referencia oficial

Para más detalles sobre logging en Docker Compose y los controladores disponibles, consulta la documentación oficial de Docker Compose.

Compartir:
Creado por:
Author photo

Jorge García

Fullstack developer