Nessun registro andrà perso

La registrazione è sempre una parte cruciale di qualsiasi sistema complesso. I registri ti aiutano a identificare e correggere gli errori, tenere traccia delle statistiche di sistema e migliorare l’applicazione. Tuttavia, se il sistema cresce rapidamente, è molto facile finire in un pasticcio di dozzine di canali di registro, formati di messaggi di registro o persino diversi sistemi di registrazione.

In questo articolo, parleremo di due aspetti della registrazione. Nella prima parte verrà spiegata l’infrastruttura di registrazione Billie. Nella seconda parte, parleremo del modo in cui abbinare i log con la richiesta (e con altri log): l’ID richiesta.

Qui a Billie, abbiamo implementato una soluzione personalizzata per produrre, mantenere e recuperare i registri in modo rapido e affidabile.

Come si può vedere dal grafico, tutti i servizi inviano i log alla stessa coda, dove i messaggi di log vengono elaborati dal consumatore RabbitMQ. La destinazione finale per i registri è Google Stackdriver, un potente archivio e set di strumenti di visualizzazione per i registri (e non solo). Questo approccio ci offre i seguenti vantaggi:

  • tutti i registri in un unico posto, non come altri sistemi, in cui i registri vengono scritti in file di testo e quindi sottoposti a scansione e aggregati;
  • un protocollo per tutti i servizi – indipendentemente dalla tecnologia, tutti i servizi e le applicazioni inviano i log nella stessa coda;
  • possibilità di implementare l’ID richiesta, che sarà descritto nel capitolo seguente.

… o RID è un modo per associare ogni richiesta a un identificatore univoco. In questo modo e inserendo questo identificatore in ciascun record di registro, saremo in grado di trovare tutte le voci di registro di tutti i servizi e canali che sono stati prodotti esattamente durante tale richiesta. Il RID può essere generato ad ogni richiesta o solo quando si verifica la prima registrazione. Poiché utilizziamo Monolog per la nostra app principale, l’unica cosa che dobbiamo fare è scrivere e registrare un nuovo processore di registro:

… e un provider RID:

Perché il metodo getRid () è statico? A causa dell’integrazione con il pacchetto Sentry, che non supporta iniezioni di dipendenza extra.

Che dire delle richieste secondarie ai microservizi? Il RID viene inviato ai microservizi nelle intestazioni utilizzando Guzzle EventListener. Quindi, spetta al servizio includere questo identificatore nei registri.

E la CLI? Funziona immediatamente, poiché generiamo RID sul registro, non sulla richiesta HTTP.

Casi d’uso comuni per il RID:

  • Cerca tutti i registri relativi alla richiesta specifica;
  • Integrare gli strumenti di tracciamento delle eccezioni (ad es. Sentry) con il RID per fornire accesso diretto ai registri;
  • Mostra RID (o la sua versione abbellita) all’utente quando colpisce l’eccezione in modo che possa comunicarlo al supporto.

Non sottovalutare la registrazione. A volte questo può essere il tuo unico amico nella terra del terrore e dei 500.