¿Qué es Grafana Loki y Promtail?
Grafana Loki es un sistema de agregación de logs, más concretamente como se indica en su página web «es un sistema de agregación de logs horizontalmente escalable, altamente disponible y multi-tenant inspirado en Prometheus. Está diseñado para ser muy rentable y fácil de operar. No indexa el contenido de los registros, sino un conjunto de etiquetas para cada flujo de registro». Es un proyecto de código abierto bastante nuevo que se inició en 2018 en Grafana Labs.
Loki utiliza Promtail para agregar registros. Promtail es un agente recolector de logs que recopila, (re)etiqueta y envía logs a Loki. Está construido específicamente para Loki – una instancia de Promtail se ejecutará en cada nodo Kubernetes. Utiliza exactamente el mismo descubrimiento de servicios que _Prometheus _ y admite métodos similares para etiquetar, transformar y filtrar registros antes de su ingestión en Loki.
Loki no indexa el texto real de los registros. Las entradas de registro se agrupan en flujos y luego se indexan con etiquetas. De este modo, Loki no sólo reduce los costes totales, sino también el tiempo que transcurre entre la ingestión de las entradas de registro y su disponibilidad en las consultas.
Viene con su propio lenguaje de consulta, LogQL, que se puede utilizar desde su propia interfaz de línea de comandos o directamente desde Grafana. Por último, pero no menos importante, se puede integrar estrechamente con el Gestor de Alertas de Prometheus – aunque, los dos últimos están fuera del alcance de este artículo.
Usted tiene que pensar como el equivalente (no 1-1, pero en un contexto más amplio) de Elasticsearch en la pila ELK.
Loki, consta de múltiples componentes/microservicios:
Pueden ser desplegados en 3 modos diferentes:
- Modo Monolítico, todos los componentes microservicios de Loki se ejecutan dentro de un único proceso como un único binario.
- Modo escalable simple, si desea separar las rutas de lectura y escritura.
- Modo Microservicios, cada componente de Loki se ejecuta como un proceso distinto.
La instalación escalable requiere un almacén de objetos compatible con S3 como AWS S3, Google Cloud Storage o un almacén autoalojado como MinIO. En el modo de despliegue monolítico sólo se puede utilizar el sistema de archivos para el almacenamiento. Para más información sobre cómo configurar el almacenamiento de Loki consulta este enlace.
La instalación (y esencialmente la configuración) de Loki y Promtail se realiza mediante dos charts distintas e independientes.
En primer lugar, vamos a descargar los valores por defecto de cada chart y a realizar los cambios necesarios. Para Loki (dado que también elegiste ir con la chart loki-distributed)
helm show values grafana/loki-distributed > loki-distributed-overrides.yaml
Si estás planeando ir con un almacenamiento compatible con S3 y no con el sistema de archivos, haz los siguientes cambios en los valores de tu chart:
El formato del punto final de S3 es
s3://{AK}:{SK}@{endpoint}/{region}/{bucket}
A continuación vamos a habilitar y configurar el compactor:
Los valores de Loki ya están configurados, vamos a instalarlo y pasar a Promtail:
helm upgrade --install --values loki-distributed-overrides.yaml loki grafana/loki-distributed -n grafana-loki --create-namespace
helm show values grafana/promtail > promtail-overrides.yaml
Obtenemos todos los componentes que hemos instalado de la gráfica de Loki:
kubectl get all -n grafana-loki
Vamos a necesitar el endpoint de la pasarela de Loki como endpoint designado que Promtail utilizará para enviar logs a Loki. En nuestro caso sería loki-loki-distributed-gateway.grafana-loki.svc.cluster.local, así que vamos a añadirlo en los valores de la tabla de Promtail:
Ya estamos listos para desplegar Promtail. Ejecuta el comando y espera un poco hasta que todos los pods estén listos.
helm upgrade --install --values promtail-overrides.yaml promtail grafana/promtail -n grafana-loki