Logging centralizzato con Grafana Alloy e Loki
Trovare i log un tempo significava connettersi via SSH a server specifici ed eseguire grep.
Durante un incidente, spesso non si sa quale macchina contenga l'errore. Si finisce per saltare da un host all'altro cercando di far corrispondere i timestamp a occhio. Questo processo fallisce quando la velocità è fondamentale.
Sono passato al logging centralizzato. Ora, ogni riga di log di ogni server risiede in un unico posto. Utilizzo Grafana Alloy su ogni host per inviare i log a Loki.
Perché questo stack?
- ELK è pesante. Elasticsearch richiede troppa manutenzione e hardware.
- Loki indicizza le label invece del testo completo. Questo lo rende più economico e facile da gestire.
- Gli strumenti SaaS diventano costosi rapidamente con la crescita della flotta.
- Alloy è il nuovo agente standard di Grafana. È efficiente e affidabile.
La configurazione
Alloy legge i file su ogni host. Aggiunge label come host, environment e service. Successivamente, le invia a Loki. Ho anche creato un bot per Slack. Interroga l'API di Loki in modo che il team possa recuperare i log senza lasciare il proprio canale di chat.
Sfide del mondo reale che ho affrontato:
- Permessi: Alloy viene eseguito con un proprio utente. Se i log della tua applicazione sono limitati, Alloy fallisce silenziosamente. Devi aggiungere l'utente alloy ai gruppi della tua applicazione.
- Flotte con OS misti: avrai macchine Debian, Ubuntu e RHEL. Dovrai utilizzare i gestori di pacchetti corretti per ciascuna.
- Agenti legacy: i vecchi log shipper possono causare l'invio duplicato dei dati. Devi individuarli e rimuoverli durante il rollout.
- Log multilinea: gli stack trace di Java si estendono su molte righe. Senza una regex multilinea, un singolo errore diventa quaranta voci separate e inutili.
La regola d'oro delle label
Non inserire dati ad alta cardinalità nelle label. Non usare mai gli ID delle richieste o gli ID degli utenti come label. Questo comprometterebbe l'indice. Usa le label per elementi come il nome del servizio o l'ambiente. Usa i filtri per tutto il resto.
Il risultato
Il logging centralizzato trasforma i log in metriche. È possibile impostare avvisi sui tassi di errore invece di aspettare che un essere umano si accorga di un problema. Quando si verifica un incidente, la soluzione è a portata di comando su Slack.
Community di apprendimento opzionale: https://t.me/GyaanSetuAi
