Visualizando logs en Grafana

Visualizando logs en Grafana

Los logs son algo muy importante para cualquier sysadmin, no son pocas las ocasiones en las que hay que revisarlos para buscar errores, comportamientos inesperados, intentos de acceso no autorizado, etc.

Cuando se manejan muchos servidores es conveniente tenerlos centralizados de alguna forma que nos permita desde un único punto poder visualizarlos y filtrar por algún criterio de búsqueda. Hay muchas opciones para realizar esta tarea, desde las clásicas, y aún muy usadas, como loganalyzer con rsyslog u otras más modernas como el stack ELK, en esta ocasión vamos a hablar de otro stack, compuesto por Grafana, Loki y Promtail.

Loki, es una herramienta relativamente joven, hace poco más de un año que salió de su estado Beta, pero con un desarrollo muy activo. Para quienes estén familiarizados con el uso de Grafana y Prometheus para realizar monitorización de métricas, se define como «Loki is like Prometheus, but for log».

Promtail, es el agente que se encarga de enviar los logs a Loki, y Grafana se va a encargar de visualizarlos y poder filtrar por algún criterio o por las etiquetas que definiremos.

Instalando Loki

Vamos a instalar Loki en la misma máquina donde ya tenemos instalado Grafana y Prometheus. Para ello ejecutamos:

Ahora creamos el fichero /etc/systemd/system/loki.service, con el siguiente contenido:

A continuación necesitamos crear el fichero de configuración /etc/loki/loki-config.yaml:

Si queremos profundizar en las opciones de configuración podemos realizarlo aquí.

Ahora habilitamos el servicio, lo iniciamos y comprobamos que arranca correctamente:

Instalando Promtail

Como hemos indicando anteriormente promtail es el agente que se va a encargar de recoger los logs que le indiquemos en su configuración y los va a enviar a Loki. Para instalarlo:

Ahora generamos el fichero de configuración /etc/promtail/promtail.yml:

En el que se definen 3 jobs (system, auth y grafana), cada uno de estos jobs se le pueden asignar tantas etiquetas como queramos, las etiquetas nos van a ayudar a agrupar y poder filtrar por ellas, es muy útil, por ejemplo, podemos tener los registros de acceso del fichero /var/log/auth.log, de todas nuestras máquinas con la etiqueta job: auth, lo que nos va a permitir agrupar todos estos registros de logs y hacer consultas conjuntas independientemente del host.

Ahora habilitamos el servicio para que arranque automáticamente, lo inciamos y comprobamos que arranca correctamente:

Ahora nuestros logs ya están llegando a Loki.

Integrándolo en Grafana

Lo primero que debemos de hacer es agregar la fuente de datos Loki en Grafana:

Una vez agregada, pinchamos en el menú de la izquierda Explore, y seleccionamos la fuente de datos Loki.

Ya podemos seleccionar las etiquetas por las que queremos filtrar, de las que hemos definido o realizar consultas en el selector de flujos de logs. Loki utiliza LogQL, un lenguaje propio para consultar los logs. Junto con los resultados nos aparecen las métricas con el número de líneas de logs en cada instante de tiempo.

De esta forma se puede establecer búsquedas en los logs, por el nombre de archivo o por cualquiera de las etiquetas que hemos asignado y filtrar en su contenido con alguno de los siguientes criterios:

  • |= líneas que contienen esa cadena
  • != líneas que NO contienen esa cadena.
  • |~ lineas que coinciden con una expresión regular.
  • !~ lineas que NO coinciden con una expresión regular

Ejemplos de búsqueda:

Buscamos en un fichero, líneas que no contengan una respuesta 200 de apache:

Buscamos en los logs de mysql de cualquier host errores distintos a «timeout»:

Es muy flexible y las combinaciones son muy variadas.

Otro aspecto a destacar es al creación de paneles personalizados de logs, con lo que podemos tener, además de las métricas de algún servicio, un panel a su lado con los logs de ese servicio.

Algo que se echa en falta es la integración con Alertmanager para poder notificarnos cuando aparezca algún error en alguno de los logs, segúna alguna condición que inquemos, aunque parece que en un futuro muy cercano será una realiadad: GrafanaCONline.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *