Risoluzione dei problemi avanzata: Approfondimento su Log, Eventi e Metriche di Kubernetes
Kubernetes ha rivoluzionato il modo in cui distribuiamo e gestiamo le applicazioni, offrendo scalabilità e resilienza senza pari. Tuttavia, la complessità di un sistema distribuito può rendere la risoluzione dei problemi un compito arduo. Quando un pod si arresta, un deployment non riesce a scalare o un'applicazione smette di rispondere, sapere dove guardare e come interpretare i dati disponibili è fondamentale.
Questo articolo offre un'analisi approfondita dei tre pilastri dell'osservabilità di Kubernetes e della risoluzione avanzata dei problemi: log, eventi e metriche. Padroneggiando questi strumenti diagnostici, otterrete la capacità non solo di diagnosticare problemi complessi, ma anche di monitorare in modo proattivo lo stato di salute del vostro cluster, anticipare i problemi e garantire il buon funzionamento delle vostre applicazioni containerizzate. Esploreremo comandi pratici, interpreteremo gli output comuni e discuteremo strategie per correlare le informazioni al fine di individuare la causa principale anche dei problemi più sfuggenti.
Log di Kubernetes: Le Fondamenta del Debugging
I log sono i registri dettagliati di ciò che sta facendo un'applicazione o un processo di sistema. In Kubernetes, i log sono generati dai container in esecuzione all'interno dei vostri pod. Sono spesso il primo posto in cui cercare quando un'applicazione non si comporta come previsto.
Accesso ai Log dei Container
Il comando kubectl logs è il vostro strumento principale per recuperare i log dai pod. È versatile e offre diverse opzioni utili.
-
Ottieni i log da un singolo container in un pod:
bash kubectl logs <pod-name>
Se un pod ha un solo container, questo comando funziona direttamente. -
Ottieni i log da un container specifico in un pod multi-container:
bash kubectl logs <pod-name> -c <container-name> -
Visualizza i log di un'istanza precedente di un container fallito:
Se un container è stato riavviato a causa di un errore, è possibile visualizzare i suoi log precedenti al riavvio utilizzando il flag--previous:
bash kubectl logs <pod-name> --previous -
Segui i log in tempo reale:
Simile atail -f, il flag-f(o--follow) consente di trasmettere le nuove voci di log man mano che vengono generate, il che è inestimabile per il debugging di problemi in tempo reale.
bash kubectl logs -f <pod-name> -c <container-name> -
Filtra i log in base al tempo:
È possibile specificare quante righe dalla fine recuperare (--tail) o i log da una durata specifica (--since).
bash kubectl logs <pod-name> --tail=100 # Ultime 100 righe kubectl logs <pod-name> --since=1h # Log dell'ultima ora
Soluzioni di Log Centralizzate
Sebbene kubectl logs sia eccellente per il debugging immediato, non è pratico per la gestione dei log su larga scala e a lungo termine. Per gli ambienti di produzione, le soluzioni di log centralizzate sono essenziali. Queste soluzioni tipicamente coinvolgono:
- Agenti di Log: Esecuzione di un agente (es. Fluentd, Fluent Bit, Filebeat) su ciascun nodo per raccogliere i log da tutti i pod.
- Archiviazione e Indicizzazione dei Log: Archiviazione dei log in un repository centrale (es. Elasticsearch, Loki, Splunk).
- Visualizzazione e Analisi dei Log: Fornitura di un'interfaccia per cercare, filtrare e visualizzare i log (es. Kibana, Grafana, UI di Splunk).
Best Practice per la Registrazione dei Log
- Log Strutturati: Emettere i log in un formato strutturato (es. JSON) per renderli facilmente analizzabili e interrogabili dai sistemi di logging centralizzati.
- Livelli di Log Appropriati: Utilizzare diversi livelli di log (DEBUG, INFO, WARN, ERROR, FATAL) per categorizzare i messaggi e controllare la verbosità.
- Evitare Informazioni Sensibili: Non registrare direttamente dati sensibili (password, PII).
Eventi di Kubernetes: Il Narratore del Cluster
Gli eventi di Kubernetes sono registrazioni dei cambiamenti di stato e delle operazioni che si verificano all'interno del cluster. Forniscono informazioni cruciali su ciò che Kubernetes stesso sta facendo (o non sta riuscendo a fare) in risposta al vostro stato desiderato. Gli eventi sono inestimabili per capire perché i pod non vengono pianificati, le immagini non vengono estratte o i volumi non vengono montati.
Accesso agli Eventi di Kubernetes
-
Eventi a livello di cluster:
bash kubectl get events
Questo comando mostra tutti gli eventi recenti nello spazio dei nomi corrente. È possibile aggiungere--all-namespacesper visualizzare gli eventi nell'intero cluster.Un tipico output degli eventi appare così:
```
ULTIMA VISUALIZZAZIONE TIPO RAGIONE OGGETTO MESSAGGIO
3m21s Normale Scheduled pod/my-app-789c6f66-abcde Assegnato con successo default/my-app-789c6f66-abcde a node01
3m20s Normale Pulling pod/my-app-789c6f66-abcde Estrazione dell'immagine "