Logging Architecture Solution

1

Vorrei iniziare impostando brevemente il contesto.

Nella nostra organizzazione (una società di Big Data), ci sono molti sistemi diversi, inclusi siti Web, lavoratori (sistema che ascolta code e / o argomenti), processi pianificati (processi innescati) e così via scritti se tecnologie diverse come come .Net, Java, Python, ecc.

Man mano che l'organizzazione cresce, anche l'ecosistema dei microservizi e la quantità di dati coinvolti. La maggior parte dei nostri sistemi scrive registri su file locali, ma poiché alcuni di essi sono piuttosto vecchi di altri, non esiste un approccio unificato. Poiché non disponiamo di un'architettura di registrazione ben definita e la maggior parte dei nostri sistemi scrive registri su file locali, l'utilizzo di tali registri è diventato difficile. Non siamo in grado di reagire in modo proattivo e leggere i registri è complicato, spesso inutile.

Abbiamo identificato questi requisiti:

  • Ci deve essere un modo per raggruppare e tenere traccia di tutti i registri correlati
  • I log dovrebbero essere di facile lettura e query
  • Le prestazioni non devono essere degradate
  • Ogni registro dovrebbe contenere:
    • Timestamp
    • Sistema
    • Ambiente
    • istanza
    • ActivityId (fattore di raggruppamento)
    • Metodo Class +
    • Informazioni utili
      • Se si tratta di un'eccezione, chiama stack, messaggio, linea, input, ecc.

Sulla base di questi requisiti, abbiamo creato la seguente architettura:

Una pseudo-implementazione dovrebbe assomigliare approssimativamente a questo:

When a system receives a call, checks if that calls already includes an ActivityId, if not creates a unique ActivityId. Each Log then will contain that ActivityId, and every subsequent call to other systems will include that ActivityId

The logging component must smoothly send the logs (in batches or one by one) to the streaming service.

Le domande che si presentano sono:

  • Ci manchi qualcosa? L'architettura ha senso?
  • Che tipo di considerazioni dovremmo prendere in considerazione?
  • Ci sono alcuni componenti che dovrebbero essere presenti e che in realtà non lo sono?
  • Indipendentemente dagli errori di implementazione, come architettura, funzionerebbe?

Ci sono altre domande qui, ma la maggior parte di esse si riferisce all'implementazione più che a un'architettura.

Dato che siamo ancora nella fase di progettazione, non abbiamo approfondito i dettagli di implementazione, ma abbiamo visto alcuni buoni approcci utilizzando Serilog e Dataflow per .Net e Log4J per Java.

Qualsiasi suggerimento o suggerimento sono ben accetti.

    
posta Facundo La Rocca 04.08.2018 - 22:28
fonte

1 risposta

1

Alcuni pensieri.

L'immagine non mostra i confini della macchina. Se ti interessano le prestazioni, potresti voler avere un registro di servizio in un file locale, possibilmente nel suo formato, e avere qualche altro programma locale in grado di inoltrare le voci del registro a un database centrale in modo pigro, quando le cose si sono raffreddate. / p>

La mia esperienza con il logging è che viene prodotto un sacco di testo e nessuno se ne preoccupa finché non sono veramente bloccati. Più si registra il meno attraente è di guadare attraverso quel file di registro, in genere si vuole produrre uno scenario e lo si rigiocerebbe comunque, quindi il valore della cronologia sarà limitato (non stiamo parlando di riviste, percorsi, registrazione delle transazioni). Il più delle volte sarebbe uno spreco di larghezza di banda e spazio di archiviazione. Quindi vuoi filtrare qualcosa dal lato della produzione, come un livello di gravità (debug, informazioni, avviso, errore, fatale) che puoi impostare all'avvio (o magari anche al runtime), appena prima di iniziare l'analisi, per quei servizi che bisogno di attenzione

Per rendere questo lavoro / utile è necessario che tutti i servizi esistenti seguano lo stesso criterio logico di registrazione. Potrebbe essere molto lavoro, come rivedere e rielaborare tutto il codice esistente. Sembra un grande progetto a sé stante e sembra difficile da vendere.

    
risposta data 05.08.2018 - 08:57
fonte

Leggi altre domande sui tag