Registrazione - Amazon EKS

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Registrazione

Le applicazioni containerizzate in genere indirizzano i log delle applicazioni a STDOUT. Il runtime del contenitore intercetta questi registri e li utilizza, in genere li scrive su un file. La posizione in cui vengono archiviati questi file dipende dal runtime e dalla configurazione del contenitore.

Una differenza fondamentale con i pod Windows è che non generano STDOUT. È possibile eseguire l'operazione LogMonitorper recuperare i registri ETW (Event Tracing for Windows), i registri degli eventi di Windows e altri registri specifici dell'applicazione dall'esecuzione di contenitori Windows e reindirizza l'output di registro formattato a STDOUT. Questi log possono quindi essere trasmessi in streaming utilizzando fluent-bit o fluentd verso la destinazione desiderata, ad esempio Amazon. CloudWatch

Il meccanismo di raccolta dei log recupera i log dai pod Kubernetes. STDOUT/STDERR A DaemonSetè un modo comune per raccogliere i log dai contenitori. Ti dà la possibilità di gestire i log routing/filtering/enrichment indipendentemente dall'applicazione. DaemonSet È possibile utilizzare un fluentd per trasmettere questi registri e qualsiasi altro registro generato dall'applicazione all'aggregatore di log desiderato.

Informazioni più dettagliate sullo streaming dei log dai carichi di lavoro Windows a sono spiegate qui CloudWatch

Raccomandazioni per la registrazione

Le migliori pratiche generali di registrazione non sono diverse quando si utilizzano carichi di lavoro Windows in Kubernetes.

  • Registra sempre le voci di registro strutturate (JSON/SYSLOG), il che semplifica la gestione delle voci di registro in quanto esistono molti parser predefiniti per tali formati strutturati.

  • Centralizza i log: i contenitori di registrazione dedicati possono essere utilizzati specificamente per raccogliere e inoltrare messaggi di log da tutti i contenitori a una destinazione

  • Riduci la verbosità dei log tranne durante il debug. La verbosità pone molto stress sull'infrastruttura di registrazione e nel rumore si possono perdere eventi significativi.

  • Registra sempre le informazioni sull'applicazione insieme all'ID della transazione/richiesta per la tracciabilità. Gli oggetti Kubernetes non hanno il nome dell'applicazione, quindi, ad esempio, il nome di un pod potrebbe non avere alcun significato durante il windows-twryrqyw debug dei log. Ciò facilita la tracciabilità e la risoluzione dei problemi delle applicazioni con i log aggregati.

    Il modo in cui vengono generati questi transaction/correlation ID dipende dal costrutto di programmazione. Ma uno schema molto comune consiste nell'utilizzare un Aspect/Interceptor di registrazione, che può utilizzare MDC (Mapped diagnostic context) per iniettare un ID univoco a ogni richiesta in arrivo, in questo modo: transaction/correlation

import org.slf4j.MDC; import java.util.UUID; Class LoggingAspect { //interceptor @Before(value = "execution(* *.*(..))") func before(...) { transactionId = generateTransactionId(); MDC.put(CORRELATION_ID, transactionId); } func generateTransactionId() { return UUID.randomUUID().toString(); } }