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 LogMonitor
Il meccanismo di raccolta dei log recupera i log dai pod Kubernetes. STDOUT/STDERR A DaemonSet
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(); } }