Registro centralizado con Grafana Alloy y Loki
Encontrar logs solía significar conectarse por SSH a servidores específicos y ejecutar grep.
Durante un incidente, a menudo no sabes qué máquina contiene el error. Terminas saltando entre hosts e intentando comparar marcas de tiempo a ojo. Este proceso falla cuando necesitas rapidez.
Me pasé al registro centralizado. Ahora, cada línea de log de cada servidor reside en un solo lugar. Utilizo Grafana Alloy en cada host para enviar los logs a Loki.
¿Por qué este stack?
- ELK es pesado. Elasticsearch requiere demasiado mantenimiento y hardware.
- Loki indexa etiquetas (labels) en lugar de texto completo. Esto lo hace más económico y fácil de ejecutar.
- Las herramientas SaaS se vuelven caras rápidamente a medida que tu flota crece.
- Alloy es el nuevo agente estándar de Grafana. Es eficiente y confiable.
La configuración
Alloy lee archivos en cada host. Añade etiquetas como host, entorno y servicio. Luego, las envía a Loki. También construí un bot de Slack. Este consulta la API de Loki para que el equipo pueda extraer logs sin salir de su canal de chat.
Desafíos del mundo real que enfrenté:
- Permisos: Alloy se ejecuta con su propio usuario. Si los logs de tu aplicación están restringidos, Alloy fallará silenciosamente. Debes añadir el usuario alloy a los grupos de tu aplicación.
- Flotas de sistemas operativos mixtos: Tendrás máquinas Debian, Ubuntu y RHEL. Debes usar los gestores de paquetes correctos para cada una.
- Agentes heredados: Los antiguos enviadores de logs pueden causar un envío duplicado. Debes encontrarlos y eliminarlos durante el despliegue.
- Logs multilínea: Los stack traces de Java abarcan muchas líneas. Sin una expresión regular (regex) multilínea, un solo error se convierte en cuarenta entradas separadas e inútiles.
La regla de oro de las etiquetas (labels)
No pongas datos de alta cardinalidad en las etiquetas. Nunca uses IDs de solicitud o IDs de usuario como etiquetas. Esto romperá tu índice. Usa las etiquetas para cosas como el nombre del servicio o el entorno. Usa filtros para todo lo demás.
El resultado
El registro centralizado convierte los logs en métricas. Puedes configurar alertas sobre las tasas de error en lugar de esperar a que un humano note un problema. Cuando ocurre un incidente, la respuesta está a solo un comando de Slack de distancia.
Comunidad de aprendizaje opcional: https://t.me/GyaanSetuAi
