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.

Fonte: https://dev.to/azeemsidd3/centralized-logging-across-a-mixed-os-server-fleet-with-grafana-alloy-and-loki-51c6

Community di apprendimento opzionale: https://t.me/GyaanSetuAi