Conozcamos los fundamentos de Grafana Loki, un sistema de agregación de registros multi-tenant.

En un entorno de producción, el tiempo de inactividad es inaceptable. Puede suponer una pérdida masiva de ingresos y reputación empresarial. Pero si dispone de un sistema de registro y monitorización adecuado, sabrá cómo depurar esos escenarios que provocan el tiempo de inactividad.

Ayuda a ahorrar costes y a identificar los problemas que podrían producirse en el futuro.

Hoy en día, las organizaciones de todos los tamaños utilizan principios y herramientas DevOps. Los contenedores y Kubernetes son los más populares. Y la monitorización de un sistema de este tipo se realiza de forma muy eficiente con Prometheus. Pero donde Prometheus se queda atrás es en la parte de registro. No proporciona un sistema de registro centralizado, y aquí es donde Loki entra en escena.

¿Qué es Grafana Loki?

Grafana L oki es un sistema de agregación de registros multi-tenant iniciado por Grafana en 2018 y liberado bajo la licencia Apache 2.0. Este sistema fue desarrollado inspirándose en Prometheus. Se utiliza principalmente con proveedores en la nube y con herramientas como Prometheus y Grafana.

Loki es similar a la pila ELK/EFK, pero es más fácil de configurar y operar con mejores funcionalidades. Loki no indexa el contenido del registro, sino que indexa marcas de tiempo y un conjunto de etiquetas para un flujo de registro. Esto hace que el índice sea más pequeño, lo que simplifica las operaciones y, a la larga, reduce el coste.

Ventajas de Loki

A continuación se enumeran los beneficios de utilizar Loki en su pila:

  • Al indexar sólo metadatos, Loki es muy rentable. Ejecutar índices para el procesamiento de texto completo requiere instancias de RAM más grandes que son muy caras. Almacenar los registros en objetos almacenados como S3 también lo hace muy económico.
  • Soporta multi-tenancy mediante el uso de tenantID, por lo que los inquilinos tienen sus datos almacenados por separado.
  • Puede ejecutar Loki localmente para operaciones a pequeña escala o escalarlo horizontalmente con facilidad para operaciones a gran escala.
  • Utiliza el estilo dynamo para garantizar la coherencia del quórum en las operaciones de lectura y escritura.
  • Está configurado por defecto para tener 3 réplicas de registros para hacer frente al riesgo de caídas de procesos y salidas abruptas en las que se pierden los registros. Sí, supondría algún gasto extra pero no tan elevado, la integridad de los datos es más crítica.
  • Fácil de conectar con herramientas populares como Kubernetes, Prometheus y visualización en Grafana.

Arquitectura Loki

loki architecture - geekflare

La arquitectura Loki tiene tres componentes: Promtail, Loki y Grafana.

Promtail es un agente que debe instalarse en cada nodo que ejecute sus aplicaciones o servicios. La principal responsabilidad de Promtail es descubrir el objetivo, adjuntar las etiquetas a los flujos de lo que provienen de los pods y empujar esos logs a las instancias de Loki. El agente promtail cola los logs del sistema de archivos local y empuja los logs al servidor central de Loki. Después de esto, puede consultar sus registros utilizando Grafana.

Casos de uso de Loki

A continuación se muestran los casos de uso más populares para utilizar un sistema de registro como Loki.

  • Inteligencia empresarial: Este es un caso de uso perenne, crear una visión procesable a partir de los datos de registro siempre puede ser muy útil. Loki puede ayudar a comprender los datos de registro y hacerle capaz de crear nuevas estrategias para el crecimiento del negocio. Por ejemplo, a través de los datos de registro de una organización, puede ayudarle a conocer las tasas de conversión de un canal publicitario.
  • Monitorización: Prometheus se utiliza mucho en la industria para la monitorización. Pero puede identificar muchas cosas monitorizando sus logs con herramientas como Loki. Puede ayudarle a controlar las tasas de error de su sitio web revisando los registros y enviando alertas una vez que se cruza el umbral.
  • Depuración y resolución de problemas: Loki puede ayudar al equipo de DevOps con algunas respuestas rápidas como cuándo se bloqueó la aplicación, la razón de su bloqueo, su último estado antes de bloquearse, etc.
  • Ciberseguridad: En los últimos años, los ciberataques a portales de comercio electrónico han aumentado exponencialmente. Con la ayuda de Loki, puede comprobar los registros para identificar cualquier amenaza o problema, o actividad maliciosa que se esté produciendo en el sistema de su organización. Si el pirateo tuvo éxito, Loki puede seguir siendo útil para que el equipo forense comprenda con detalle lo que ocurrió en el sistema. Les ayudará a rastrear a los piratas informáticos.
  • Cumplimiento: Para cumplir con las normativas del sector, las organizaciones deben conservar sus registros de auditoría durante un máximo de 7 años. Las autoridades locales pueden auditar los registros en cualquier momento. Loki puede almacenar sus registros de auditoría de forma segura.

Instalación de Loki y Promtail

Vamos a ver rápidamente cómo instalar y visualizar los registros en Grafana. En esta demostración, voy a utilizar la configuración genérica que raspará los registros de /var/log/*log

Vaya a la página de versiones de Loki, desplácese hacia abajo hasta Activos, aquí encontrará varios paquetes de Loki y Promtail. Descargue el paquete Loki según el sistema que esté utilizando. No descargue los paquetes Loki cli o canary. Yo estoy descargando loki-linux-amd64 .zip y promtail-linux-amd64.zip para mi sistema Ubuntu.

Una vez finalizada la descarga, extraiga los archivos de Loki y Promtail y colóquelos en un único directorio.

geekflare@geekflare:~$ mkdir loki
geekflare@geekflare:~$ mv loki-linux-amd64 promtail-linux-amd64 loki
geekflare@geekflare:~$ cd loki/
geekflare@geekflare:~/loki$ ls
loki-linux-amd64 promtail-linux-amd64

Ahora, descargue el archivo de configuración genérico de Loki y Promtail.

geekflare@geekflare:~/loki$ wget https://raw.githubusercontent.com/grafana/loki/master/cmd/loki/loki-local-config.yaml
--2021-04-30 12:00:51-- https://raw.githubusercontent.com/grafana/loki/master/cmd/loki/loki-local-config.yaml
Resolviendo raw.githubusercontent.com (raw.githubusercontent.com)... 185.199.111.133, 185.199.110.133, 185.199.109.133, ...
Conectando con raw.githubusercontent.com (raw.githubusercontent.com)|185.199.111.133|:443... conectado.
Solicitud HTTP enviada, esperando respuesta... 200 OK
Longitud: 1832 (1.8K) [text/plain]
Guardando en: 'loki-local-config.yaml'

loki-local-config.yaml 100%[===============================================================================================>] 1.79K --.-KB/s en 0s

2021-04-30 12:00:51 (16,6 MB/s) - 'loki-local-config.yaml' guardado [1832/1832]
geekflare@geekflare:~/loki$ wget https://github.com/grafana/loki/blob/main/clients/cmd/promtail/promtail-local-config.yaml
--2021-04-30 12:05:07-- https://github.com/grafana/loki/blob/main/clients/cmd/promtail/promtail-local-config.yaml
Resolviendo github.com (github.com)... 13.234.210.38
Conectando con github.com (github.com)|13.234.210.38|:443... conectado.
Solicitud HTTP enviada, esperando respuesta... 200 OK
Longitud: sin especificar [text/html]
Guardando en: 'promtail-local-config.yaml'

promtail-local-config.yaml [ <=> ] 109.16K --.-KB/s en 0.002s  

2021-04-30 12:05:08 (66.8 MB/s) - 'promtail-local-config.yaml' guardado [111779]
geekflare@geekflare:~/loki$ ls
loki-linux-amd64 loki-local-config.yaml promtail-linux-amd64 promtail-local-config.yaml

Para iniciar Loki, ejecute el siguiente comando con el archivo de configuración de Loki. Esto iniciará Loki y mostrará los registros de Loki en el terminal.

geekflare@geekflare:~/loki$ ./loki-linux-amd64 -config.file=loki-local-config.yaml
level=info ts=2021-04-30T16:08:37.990311491Z caller=main.go:130 msg="Iniciando Loki" version="(version=2.2.1, branch=HEAD, revision=babea82e)"
level=info ts=2021-04-30T16:08:37.990856871Z caller=server.go:229 http=[::]:3100 grpc=[::]:9096 msg="servidor escuchando en direcciones"
level=info ts=2021-04-30T16:08:37.991613443Z caller=shipper_index_client.go:100 msg="iniciando boltdb shipper en modo 0"
level=info ts=2021-04-30T16:08:37.992568288Z caller=mapper.go:38 msg="limpiando directorio de reglas mapeadas" path=/tmp/loki/rules-temp
level=error ts=2021-04-30T16:08:37.992623632Z caller=mapper.go:42 msg="no se puede leer el directorio rules" path=/tmp/loki/rules-temp err="open /tmp/loki/rules-temp: no such file or directory"
level=info ts=2021-04-30T16:08:37.993520927Z caller=table_manager.go:171 msg="cargando tablas"
level=info ts=2021-04-30T16:08:37.993941099Z caller=module_service.go:59 msg=inicializando módulo=almacén
level=info ts=2021-04-30T16:08:37.994011839Z caller=module_service.go:59 msg=inicializando modulo=memberlist-kv
level=info ts=2021-04-30T16:08:37.99412775Z caller=module_service.go:59 msg=inicializando modulo=servidor
level=info ts=2021-04-30T16:08:37.994379648Z caller=module_service.go:59 msg=inicializando modulo=ingester
level=info ts=2021-04-30T16:08:37.994415984Z caller=ingester.go:241 msg="recuperando del punto de control"

Para iniciar Promtail, ejecute el siguiente comando con el archivo de configuración de Promtail. Promtail es necesario para obtener los registros en Loki.

geekflare@geekflare:~/loki$ ./promtail-linux-amd64 -config.file=promtail-local-config.yaml
level=info ts=2021-04-30T16:35:52.775998059Z caller=server.go:229 http=[::]:9080 grpc=[::]:42557 msg="servidor escuchando en direcciones"
level=info ts=2021-04-30T16:35:52.776283661Z caller=main.go:112 msg="Iniciando Promtail" version="(version=2.2.1, branch=HEAD, revision=babea82e)"
level=info ts=2021-04-30T16:35:57.776226323Z caller=filetargetmanager.go:254 msg="Añadiendo objetivo" key="{job=\"varlogs\"}"
ts=2021-04-30T16:35:57.776902427Z caller=log.go:124 level=info msg="Buscado /var/log/fontconfig.log - &{Offset:11055 Whence:0}"
level=info ts=2021-04-30T16:35:57.776983546Z caller=tailer.go:125 component=tailer msg="Rutina tail: iniciada" path=/var/log/auth.log
level=info ts=2021-04-30T16:35:57.777009023Z caller=tailer.go:125 component=tailer msg="rutina tail: iniciada" path=/var/log/fontconfig.log
ts=2021-04-30T16:35:57.777094698Z caller=log.go:124 level=info msg="Buscado /var/log/lastlog - &{Offset:0 Whence:0}"
ts=2021-04-30T16:35:57.777712594Z caller=log.go:124 level=info msg="Buscado /var/log/apport.log - &{Offset:0 Whence:0}"
ts=2021-04-30T16:35:57.778200383Z caller=log.go:124 level=info msg="Buscado /var/log/alternatives.log - &{Offset:456 Whence:0}"
ts=2021-04-30T16:35:57.780467419Z caller=log.go:124 level=info msg="Buscado /var/log/syslog - &{Offset:56911 Whence:0}"
level=info ts=2021-04-30T16:35:57.780646032Z caller=tailer.go:125 component=tailer msg="Rutina tail: iniciada" path=/var/log/kern.log
level=info ts=2021-04-30T16:35:57.781289004Z caller=filetargetmanager.go:254 msg="Añadiendo objetivo" key="{job=\"varlogs\"}"
level=info ts=2021-04-30T16:35:57.787770104Z caller=tailer.go:125 component=tailer msg="Rutina tail: iniciada" path=/var/log/grafana/grafana.log
ts=2021-04-30T16:35:57.782276009Z caller=log.go:124 level=info msg="Buscado /var/log/grafana/grafana.log - &{Offset:0 Whence:0}"

Visualizar Log usando Loki y Grafana

Grafana proporciona soporte integrado para Loki. Loki ya está presente en las fuentes de datos de Grafana.

Paso 1: Vaya a Configuraciones de Grafana y haga clic en «Fuentes de datos».

grafana

Paso 2: En Fuentes de datos, puede buscar la fuente por nombre o tipo.

configuration

Paso 3: Busque por el nombre Loki. Puede ver que esta fuente de datos ya está presente en Grafana. Haga clic en Seleccionar.

add loki

Paso4: Introduzca el nombre que desea dar a la fuente de datos y ponga http://localhost:3100 (cámbielo por IP del servidor si Loki se ejecuta en un servidor diferente al de Grafana) en la URL porque hemos iniciado Loki en el puerto 3100.

loki data source

Haga clic en el botón Probar y guardar en la parte inferior. Si ha realizado la configuración de Loki correctamente, obtendrá el siguiente mensaje mostrado en un recuadro verde.

save and test

Paso 5: Haga clic en la pestaña Explorar de la parte izquierda. Seleccione Loki en el desplegable de selección de fuente de datos. Ahora, me gustaría visualizar la actividad de los registros de Grafana. Para ello, debe añadir la consulta <em>{filename="/var/log/grafana/grafana.log"}</em> en el Navegador de registros. Las barras verdes de abajo son entradas de eventos en el archivo de registro.

grafana log

Puede seleccionar el intervalo de tiempo para el que desea que aparezca la visualización en el tablero de mandos, y también puede establecer el intervalo de actualización de la consulta, tras el cual ésta volverá a ejecutarse. Para ver más detalles de los registros, desplácese hacia abajo y haga clic en una de las entradas del registro, le dará todo tipo de información relacionada con el registro.

detail log

Queda precioso, ¿verdad?

Así que eso fue todo para empezar. Le recomiendo encarecidamente que eche un vistazo al siguiente vídeo del seminario web en el que se explica la observabilidad con Loki.

Conclusión

Un sistema distribuido se compone de muchas aplicaciones o microservicios, cada uno con toneladas de registros. Usted necesitaría una forma rentable de recopilar los logs, almacenarlos y luego hacer uso de ellos. Loki es una solución perfecta para estos casos. De hecho, puede reducir alrededor del 75% de sus costes de registro y monitorización integrando Loki en su entorno de producción.

Loki también está disponible a través de Grafana Cloud, sería bueno probarlo si no quiere pasar por el proceso de instalación.

A continuación, conozca Grafana Tempo.