Gestión de Logs en contenedores Docker con Graylog y GELF

Publicado por Alejandro Font el

DevOpsGraylogGELFDocker

En esta ocasión hablaremos de cómo gestionar de una forma cómoda y centralizada los logs de nuestras aplicaciones, y más concretamente aquellas que tengamos dockerizadas con Graylog.

Aunque es cierto que actualmente la tendencia suele tender hacia soluciones basadas en el stack de Elasticsearch (Beats+Elastic+Kibana) y/o con Prometheus de por medio, quizá hablemos mas adelante en algún post sobre estas configuraciones. Graylog sigue siendo una solución muy interesante y potente y posiblemente por su histórico ya esté implantada en muchas organizaciones, de modo que podamos aprovechar todos los Dashboards y configuraciones que se tengan realizados y añadir ahora nuestros contenedores.

Información del producto

El producto en sí, acaba de sacar nueva release, la 3.0, y cuenta con dos versiones: una gratuita y otra enterprise con algunas características adicionales como reporting, logs offline o soporte. Pero para la realización de este post, se hizo uso de la versión 2.5. No obstante no debería haber ningún cambio importante en los pasos.

Instalación

Para la prueba haremos uso de las imágenes Docker y los pasos que nos proporciona la propia documentación.

El sistema se compone de:

  • Graylog: servidor y cliente gráfico de Graylog.
  • MongoDB: configuración de la instancia de Graylog.
  • Elasticsearch: motor de búsqueda e indexado de los logs.

Estas tres piezas son las mínimas y necesarias para cualquier implantación de Graylog. A partir de ahí podríamos ir añadiendo piezas, como podría ser Grafana para tener otro tipo de explotación grafica, clusterizar la arquitectura, etc. Al final, de lo que se trata es de crear una arquitectura útil y funcional para los requisitos y necesidades que tengamos.

La instalación no es compleja y siguiendo los pasos de la documentación oficial se arranca sin problemas. Pero sí que tenemos que tener en cuenta los puertos que mapearemos al arrancar nuestro contenedor Graylog en función de los inputs o métodos de recolección de datos que usemos.

Por ejemplo para hacer uso de GELF tanto por HTTP o por UDP el puerto es el 12201 y por tanto deberemos especificarlo en el arranque:

docker run --link mongo --link elasticsearch -p 9000:9000 -p 12201:12201 -p 12201:12201/udp -p 514:514 -e GRAYLOG_WEB_ENDPOINT_URI="http://127.0.0.1:9000/api" -d graylog/graylog:2.5  

Envío de datos

Una vez instalado y con los tres componentes levantados estamos listos para recibir datos. Para ello debemos configurar inputs en nuestro Graylog indicando el tipo de log que vamos a recibir.

En este caso, tal como hemos comentado al principio, lo que queremos es ver cómo podemos enviar de una forma cómoda los logs que salen de nuestras aplicaciones dockerizadas. Para ello haremos uso de GELF (Graylog Extended Log Format).

Lo interesante de este formato es que tenemos soporte desde Docker de tal modo que lo único que debemos hacer en nuestras imágenes es indicar el log-driver y la dirección donde se enviarán.

También deberemos, desde la administración de Graylog, crear un new GELF UDP Input.

Una vez realizado el registro de input correctamente podremos ver los mensajes recibidos a través de éste y realizar las búsquedas que necesitemos:

alt

También Podemos hacer uso de Graylog Sidecar para la centralización y gestion de inputs de manera centralizada. Esta parte si que ha sufrido cambios respecto la versión anterior.

Llegados a este punto, solo debemos ir arrancando nuestros contenedores con los nuevos parametros GELF!

Siguiendo con la imagen node de mi post anterior:

docker run -p 3000:3000 --log-driver gelf --log-opt gelf-address=udp://127.0.0.1:12201 hello-node:v1  

Accedemos a http://localhost:3000/ y ya deberíamos ver enviados una serie de registros a Graylog:

alt

Además podremos ejecutar búsquedas y ver la relación entre los logs y los contenedores, ya que tenemos como metadato el container name, image name, etc.

A partir de ahí nos podremos crear nuestros Dashboards, alertas, etc.:

alt

Conclusiones

La idea de este post era tratar de ver cómo podemos explotar el uso de GELF entre Docker y Graylog de una forma muy rápida. Desde este punto, como se ha comentado al principio del post sobre la configuración de base de Graylog, podemos añadir muchas capas y aplicaciones de modo que es una arquitectura muy flexible que podemos adaptar a nuestros escenarios con facilidad.

¡Síguenos en Twitter para estar al día de nuevos posts!

Autor

Alejandro Font

Oracle ACE y Líder Técnico de la Comunidad Oracle Fusion Middleware en knowmad mood. Actualmente con foco en Arquitecturas Ágiles y Contenedores