Come monitorare i registri del pod Kubernetes in tempo reale con Stern

0
53

Stern è uno strumento open source che semplifica lo streaming di log Kubernetes in tempo reale sul tuo terminale. Puoi utilizzare Stern per monitorare i registri di più contenitori contemporaneamente, offrendoti una visione combinata dell'attività all'interno dei Pod.

Perché utilizzare Stern?

Kubectl offre un log tailing integrato utilizzando il comando kubectl logs. Sebbene possa funzionare bene in casi semplici, manca il supporto per l'aggregazione di registri da più origini con un ulteriore filtraggio dei risultati. Questo può renderlo ingombrante da usare quando devi monitorare più Pod o stai lavorando con dati dettagliati.

Stern offre un'esperienza di log Kubernetes con supporto di prima classe per più pod e container. Ogni contenitore nel tuo flusso di log è colorato in modo univoco in modo da poter identificare rapidamente le linee che scorrono davanti a te. Stern ti consente di selezionare i Pod da includere utilizzando query complesse basate su espressioni regolari.

Sono inoltre integrate funzionalità di filtro per selezionare i log in base a timestamp, stato del contenitore e selettore Kubernetes. In questo articolo, ti mostreremo come utilizzare tutte queste funzionalità per accelerare l'accesso ai log di Kubernetes.

Per iniziare

Stern è distribuito come binari precompilati per Windows, macOS e Linux nella pagina delle versioni di GitHub del progetto. Seleziona il download appropriato per il tuo sistema e aggiungi il binario al tuo PERCORSO. Gli utenti macOS possono scegliere di installare tramite Homebrew invece eseguendo brew install stern.

Stern utilizza i file di configurazione Kubernetes esistenti per connettersi al tuo cluster. Per impostazione predefinita verrà caricato .kube/config. Usa il flag –kubeconfig o imposta la variabile d'ambiente KUEBCONFIG se devi cambiare questo percorso.

Anche i contesti Kubernetes sono supportati senza problemi. Aggiungi il flag –context per specificare un contesto particolare all'interno del file di configurazione attualmente caricato. Puoi anche utilizzare il flag –namespace per selezionare manualmente uno spazio dei nomi nel tuo cluster. Stern eseguirà solo la coda dei registri dagli oggetti all'interno del contesto e dello spazio dei nomi indicati; il flag –all-namespaces può essere utilizzato per eseguire lo streaming dei log dall'intero cluster.

Utilizzo di base

La sintassi di base di Stern richiede solo un argomento:

stern api-server

Fornisci un nome Pod per eseguire lo streaming dei log originati dai contenitori in quel Pod. Tuttavia, questo utilizzo smentisce il vero potere di Stern; il nome del pod è solo un esempio di query pod.

Query pod

Stern usa le query Pod per determinare i flussi di log da visualizzare. Le query sono espressioni regolari in modo da poter assemblare selezioni avanzate di Pod utilizzando la sintassi standard.

L'esempio di api-server stern sopra corrisponderà a qualsiasi Pod contenente api-server nel suo nome. Se lo hai modificato in stern .*-server, vedrai i log provenienti da tutti i tuoi Pod con nomi che terminano con -server. Ciò ti consente di assemblare rapidamente flussi di log che aggregano righe da più componenti nel tuo stack.

Le query interessano solo i Pod selezionati. Stern include automaticamente i log di tutti i container all'interno di quei Pod. Puoi controllarlo usando il flag –container opzionale che accetta un'altra espressione regolare che definisce i nomi dei contenitori accettabili da includere.

stern .*-server –container .*-0

Allo stesso modo, puoi escludere contenitori specifici usando il –exclude-container flag e una regex:

stern .*-server –exclude-container .*-helper

Sono supportati anche i selettori di etichette. Imposta il flag –selector con una regex che definisce le etichette con cui abbinare i pod. Il valore predefinito è .*, inclusi tutti i Pod corrispondenti alla query originale.

stern .*-server –selector app-version=v1.*

Filtraggio Basato sullo stato del container

Stern mostra per impostazione predefinita solo i log dei container in esecuzione. Utilizzare il flag –container-state per ottenere le righe registrate da contenitori in uno stato diverso. Supporta parametri in esecuzione, in attesa e terminati:

# Mostra i registri dai contenitori interrotti stern .*-server –container-state terminato

Filtraggio di singole righe di registro

Una volta selezionato il corretto set di pod e contenitori, puoi passare al filtraggio dei dati di registro effettivi. Stern ti offre alcune opzioni per ridurre il rumore e aiutarti a concentrarti su dati significativi:

  • –dal – Ottieni registri scritti entro un intervallo di tempo relativo leggibile dall'uomo, da 5 mo 1 ora.
  • –tail– Ottieni molte righe di registro per cominciare. Il valore predefinito è -1 (nessun limite), quindi il tuo terminale viene riempito con tutti i registri preesistenti prima che inizi l'output con coda in tempo reale.
  • –exclude – Escludi le righe di registro che corrispondono a questa espressione regolare. Puoi usare questo flag più volte; le condizioni verranno combinate come una logica “e” clausola.

Ecco un esempio di recupero di una selezione limitata di log significativi recenti da un servizio web:

stern web-server –since 1h –tail 100 –exclude .*GET /robots.txt.*

Utilizzo dei modelli di output

Stern normalmente presenta log righe utilizzando il seguente formato:

<nome spazio dei nomi> <nome pod> <nome contenitore> <linea di registro originale>

Questo formato è personalizzabile utilizzando il flag –template. La sintassi dei modelli Go è supportata per accedere alle variabili Namespace, PodName, ContainerName e Message all'interno del formattatore:

stern .*-server –template 'Spazio dei nomi: {{.Spazio dei nomi}} Pod: {{.NomePod}} – {{.Message}}'

A volte potresti voler leggere le righe di registro senza alcuna formattazione aggiuntiva. L'uso di –output raw mostrerà i messaggi semplici così come sono, producendo un output simile a Kubectl.

Un'opzione alternativa è –output json per ottenere i dati di registro in un formato più adatto per consumo programmatico. Emetterà un flusso di oggetti JSON con proprietà message, namespace, podName e containerName.

Stern può anteporre automaticamente timestamp a ciascuna riga di registro se includi il flag –timestamps. Questo è disattivato per impostazione predefinita poiché molti server popolari aggiungono queste informazioni da soli, prima che venga emesso un messaggio.

Infine, Stern supporta un flag –color che può essere utilizzato per forzare o disabilitare l'uso dell'output colorato. Accetta auto, mai o sempre come valore. Quest'ultima opzione è utile se il programma non rileva correttamente il TTY della shell.

Riepilogo

Stern è uno strumento pratico di Kubernetes che rende i registri Pod più utili e accessibili. Puoi facilmente tenere sotto controllo più Pod e contenitori con il suo output colorato, i selettori complessi e i formati di output personalizzabili.

Stern è progettato per il log tail in tempo reale come parte di un debug o monitoraggio attivo processi. Se stai cercando aggregazione, indicizzazione e archiviazione a lungo termine, in genere è meglio integrare un sistema di osservabilità dedicato con il tuo cluster. Piattaforme come Prometheus ed Elastic Stack forniscono funzionalità di ispezione storica per aumentare i flussi di log in tempo reale mostrati da Stern.

LEGGI SUCCESSIVO

  • › Quanto lontano può arrivare un'auto elettrica con una sola carica?
  • › I 10 migliori film originali Netflix del 2022
  • › Recensione PrivadoVPN: sconvolgere il mercato?
  • › Questi gadget scacciano le zanzare
  • › “Atari era molto, molto difficile” Nolan Bushnell su Atari, 50 anni dopo
  • › Quanto costa ricaricare una batteria?