27 November 2017

Enriquecimiento de logs con metadatos de Docker con Filebeat

By Carlos Pérez-Aradros

Docker, y los contenedores en general, han cambiado la forma en que desarrollamos las aplicaciones. Con beneficios en la escalabilidad y la confiabilidad, también implican nuevos desafíos, dado que debemos actualizar tanto las metodologías como las herramientas que usamos para este nuevo ecosistema.

Los contenedores, a diferencia de los hosts, son efímeros: un contenedor puede morir en un host y desencadenar la creación de uno nuevo en otro host. Con estas instancias efímeras de nuestras aplicaciones, necesitamos los datos correctos para hacer un seguimiento de estas piezas móviles y seguir el ritmo de tantos cambios.

Como parte de nuestra inserción en el soporte de Beats para contenedores, recientemente implementamos un nuevo procesador, add_docker_metadata, que se lanzará con la versión 6.0.0 beta1.

La idea es simple, pero potente. Enriquece sus logs y métricas con metadatos de Docker; de esta forma, obtiene visibilidad total de su infraestructura y aplicaciones. Veámoslo en acción.

Configuración de Filebeat

Filebeat puede enviar logs de Docker fácilmente. Por defecto, Docker los escribe en /var/lib/docker/containers/<container_id>/<container_id>-json.log. Cuando se inician nuevos contenedores, se crean nuevos archivos para almacenar sus logs, siguiendo el mismo patrón: Filebeat puede observar el directorio completo y los envía a medida que se escriben.

Estas son las configuraciones para enviar logs de contenedores de Docker a Elasticsearch y enriquecerlos con los metadatos correctos. Si tiene Filebeat instalado, simplemente edite filebeat.yml:

filebeat.prospectors:
- type: log
  paths:
   - '/var/lib/docker/containers/*/*.log'
  json.message_key: log
  json.keys_under_root: true
  processors:
  - add_docker_metadata: ~
output.elasticsearch:
  hosts: ["elasticsearch:9200"]

Ahora comience a enviar logs a Elasticsearch tras ejecutar lo siguiente:

$ ./filebeat -e -v

Exploración de logs en Kibana

Una vez que los logs comienzan a transferirse hacia Elasticsearch, puede comenzar a visualizarlos desde la interfaz de Kibana. Veamos uno de ellos. Este es uno de los eventos enviados por Filebeat, que corresponde a una nueva línea de log en un servidor NGINX que se está ejecutando en nuestra plataforma con Docker:

evento de log con metadatos de docker

Gracias a add_docker_metadata, no solo obtenemos el resultado del log, sino que también obtenemos una serie de campos que lo enriquecen, con información de Docker, como el nombre del contenedor, la id., la imagen de Docker y etiquetas.

A modo de ejemplo, es posible que quiera depurar lo que esté sucediendo en un contenedor específico. Solo tendrá que filtrar los resultados de búsqueda por nombre de contenedor.

filtro de logs de docker

¡Eso es todo! Las cosas simples deben ser simples, y nos esforzamos por proporcionar la mejor experiencia para el usuario al dejar que las complejidades se queden donde pertenecen: en el código.

Pruébelo

Les recomendamos a todos probar esta nueva funcionalidad una vez que se lance la versión beta1. Los comentarios de los usuarios son muy importantes para dar forma a nuevas funcionalidades, así que no dude en pasar y contarnos su opinión sobre esta función.