GNU/Linux >> Linux Esercitazione >  >> Linux

Leggi e analizza i tuoi log di sistema Linux con Journalctl

Solo perché non ricevi errori sul tuo sistema non significa che tutto funzioni correttamente. Perché non leggere e analizzare i registri di sistema Linux per vedere cosa sta succedendo con il tuo sistema? Non sei sicuro di come? Fortunatamente per te, Journalctl è all'altezza del compito!

In questo tutorial imparerai come tenere d'occhio il comportamento del tuo sistema con lo strumento journalctl leggendo e analizzando i file di registro del journal di systemd.

Continua a leggere e mantieni il tuo sistema al massimo!

Prerequisiti

Questo tutorial sarà una dimostrazione pratica. Se desideri seguire, assicurati di avere quanto segue.

  • Una macchina Linux – Questa demo utilizza Ubuntu 20.04 LTS, ma puoi usare qualsiasi distribuzione.
  • Un account non root con privilegi sudo.

Impostazione dell'ora di sistema corretta

Prima di poter utilizzare Journalctl, dovrai impostare l'ora di sistema. I timestamp registrati nel diario di sistema sono in UTC, quindi è necessario selezionare il fuso orario corretto. Se il tuo tempo è scaduto di pochi secondi, alcune voci di registro potrebbero non essere visualizzate correttamente quando le utilizzerai in un secondo momento.

1. Apri il tuo terminale ed esegui timedatectl comando di seguito per ottenere un elenco dei fusi orari disponibili.

timedatectl list-timezones

Scegli e annota uno dall'elenco mostrato di seguito che corrisponde alla tua regione. Ad esempio, se vivi in ​​America, scegli il fuso orario che corrisponde a quello della tua città più vicina.

2. Quindi, esegui il comando seguente per impostare il tuo fuso orario (set-timezone ). Sostituisci your-zone con il nome del fuso orario precedentemente selezionato (passaggio uno). Questo comando imposta l'ora del sistema sul fuso orario scelto.

D'ora in poi, ogni voce di registro verrà registrata come ora locale.

sudo timedatectl set-timezone your-zone

3. Infine, esegui il comando seguente per verificare di aver impostato correttamente il fuso orario.

timedatectl status

Come mostrato di seguito, la data e l'ora del sistema corrente devono corrispondere alla regione e al fuso orario selezionati.

Mostra tutti i log

Ora l'impostazione del fuso orario è fuori mano, puoi iniziare a visualizzare i registri nel tuo sistema. Systemd System and Service Manager fornisce la gestione centralizzata dei demoni di log, che raccoglie i log da varie parti/strumenti sul sistema.

Ma come si visualizzano i log? L'utilità journalctl ti consente di visualizzare i registri della tua macchina. E la prima cosa che di solito vuoi fare è mostrare tutto quello che è successo dall'ultimo avvio.

Esegui journalctl comando seguente per mostrare tutti i log del demone journald.

L'utilità journalctl implementa l'interfaccia della riga di comando del demone journald per la raccolta e la visualizzazione del diario systemd. L'utilità journalctl consente agli utenti di esaminare l'attività e lo stato di qualsiasi unità gestita da systemd (servizio, processo e così via).

 sudo journalctl 

Il comando mostra l'intero diario mostrato di seguito ed è un po' difficile da leggere. I registri più vecchi sono in cima all'elenco, mentre i registri più recenti sono in fondo.

Probabilmente avrai centinaia o migliaia di voci se il diario di sistema ha registrato registri abbastanza a lungo.

Puoi utilizzare altri parametri per filtrare i log, ma non entrerai in questi filtri qui poiché l'argomento va oltre questo tutorial.

Dal momento che probabilmente vuoi sfogliare l'elenco in modo più selettivo, una freccia su/giù di pagina sarebbe utile. Premi K per saltare una pagina e J per saltare una pagina. Premi END per passare all'ultima pagina.

Nota che i timestamp all'inizio di ogni voce sono la tua ora locale poiché hai precedentemente impostato il tuo fuso orario nella sezione "Impostazione dell'ora di sistema corretta" (passaggio due).

Rendere persistente il diario

Hai visto come visualizzare tutti i registri, ma in genere vorresti conservare i registri per un periodo più lungo, in modo da avere più possibilità di trovare dati su problemi che si verificano raramente. Come? Rendendo il diario persistente.

Il /run/log/journal/ directory è la posizione predefinita dei dati di registro e non è persistente per impostazione predefinita. Non appena si riavvia il sistema, tutti i registri sono spariti. L'idea della registrazione persistente è di conservare tutti i file di registro, ma i registri meno recenti vengono archiviati quando diventano troppo grandi.

Per rendere il diario persistente tra un avvio e l'altro, modificherai /etc/systemd/journald.conf file e configuralo per utilizzare un percorso di archiviazione permanente.

1. Apri /etc/systemd/journald.conf file con il tuo editor di testo preferito e cerca Storage=auto direttiva, come mostrato di seguito.

2. Quindi, cambia lo Archiviazione valore della direttiva da auto a persistente , quindi salva le modifiche e chiudi l'editor. Conserva lo Archiviazione direttiva in una riga e senza spazi tra la direttiva e il valore, altrimenti la configurazione non funzionerà.

3. Eseguire il comando seguente per riavviare systemd-journald servizio per attivare tutte le modifiche. Questo comando non stampa l'output, ma riavvia la macchina e apri un altro terminale una volta completato questo comando.

A questo punto, systemd ignorerà /run/log/journal e archiviare invece i dati del journal in /var/log/journal directory, in modo che il diario di registro diventi persistente tra un avvio e l'altro.

Quando avvii il systemd-journald servizio, crea automaticamente la directory /var/log/journal se non esiste.

sudo systemctl restart systemd-journald

4. Ora, esegui il comando seguente per controllare lo stato di systemd-journald.service .

sudo systemctl status systemd-journald.service

Vedrai uno stato attivo (in esecuzione) se la tua configurazione funziona, come mostrato di seguito. L'output seguente conferma che il journal sta funzionando come previsto.

5. Esegui ls comando qui sotto per vedere se il /var/log/journal directory esiste.

ls /var/log/journal

Vedrai il seguente output, che è l'UUID del diario persistente. Questo UUID non ha alcun significato particolare ed è solo una stringa univoca casuale generata durante il processo di avvio. Questa stringa è un identificatore che puoi utilizzare per fare riferimento ai dati in /var/log/journal .

Nota l'UUID poiché lo utilizzerai per elencare i diari di registro (passaggio sei).

6. Infine, eseguire il comando seguente per elencare i giornali di registrazione. Assicurati di sostituire myUUID con l'UUID precedentemente annotato (passaggio cinque).

ls /var/log/journal/myUUID

Allo stesso modo di seguito, vedrai il diario del tuo ultimo avvio. E a questo punto, ora hai un sistema di registrazione persistente!

Elencare le voci del diario dall'avvio corrente

Hai imparato come visualizzare tutte le voci di registro. Ma forse preferisci filtrare tipi specifici di log. In tal caso, potresti voler visualizzare solo le voci del registro del kernel.

Lo strumento journalctl ha una potente sintassi di filtraggio che ti consente di visualizzare tipi specifici di voci di registro. O anche mostrare informazioni correlate come l'ID del processo (PID) o il nome dell'unità del servizio di origine.

Esistono diversi modi per filtrare i registri, ma forse sei interessato solo a visualizzare i diari dal tuo avvio corrente. In tal caso, il journalctl di base il comando farà il trucco.

Esegui il journalctl comando seguente per elencare tutte le voci del diario dal tuo avvio corrente (-b ) pertinenti al sistema/ambiente corrente. Il -b flag dice al journalctl comando per visualizzare i registri archiviati da journald dall'ultimo avvio del sistema.

journalctl -b

Elencare i registri degli stivali passati

Durante l'utilizzo di journalctl per la risoluzione dei problemi, potrebbe anche essere necessario visualizzare le voci di registro di uno specifico avvio precedente. Forse hai un servizio che inizia in un avvio ma fallisce in un altro. In tal caso, devi isolare la voce di registro dal secondo avvio per vedere cosa è andato storto.

1. Esegui il comando seguente per visualizzare l'elenco degli stivali passati (–list-boots).

journalctl --list-boots

Come mostrato di seguito, poiché hai configurato la registrazione persistente nella sezione precedente, journalctl mostra tutti gli avvii passati.

  • Ogni riga nell'elenco indica una voce del registro di avvio passata. La prima colonna è l'offset dell'avvio, che puoi utilizzare per fare riferimento a ciascuna voce. Gli offset vengono visualizzati come numeri (-1, 0 ).
  • Puoi anche utilizzare la seconda colonna, l'ID di avvio, come riferimento assoluto a una voce di avvio.

2. Quindi, esegui journalctl -b -1 comando per visualizzare le voci del diario dall'avvio 1 (l'avvio precedente). Ma puoi anche visualizzare le voci del diario di altri stivali modificando il numero di avvio (ad esempio, avvio 2, avvio 3...)

journalctl -b -1

3. Infine, esegui il comando seguente per visualizzare le voci del diario dallo stesso avvio ma a cui fa riferimento il suo ID di avvio (boot_id ). Assicurati di sostituire boot_id con l'ID di avvio che hai annotato nel passaggio uno.

journalctl -b boot_id

Elencare i registri in base alle finestre temporali

Hai visto come visualizzare tutti i registri degli stivali precedenti, ma cosa succede se hai bisogno di visualizzare registri specifici in base al tempo? Aggiungendo il --since e --until le opzioni filtrano le voci del registro del diario in base alle finestre temporali.

Esegui il journalctl comando seguente per trovare tutte le voci di diario generate 24 ore fa da una data e un'ora specifiche (--since "2022-02-04 12:40:49” ).

journalctl --since "2022-02-04 12:40:49”

Forse non ti interessa specificare data e ora. In tal caso, utilizzare invece valori relativi e durate temporali. Ad esempio, "2 minuti", "30 minuti", "1 ora" e persino giorni come "ieri" o "adesso e così via".

Esegui il comando seguente per mostrare tutte le voci del diario a partire da 24 ore fa dalla data e ora correnti (”yesterday” ).

journalctl --since "yesterday"

Ora, cosa succede se il tuo servizio SSH è in esecuzione dalle 10:10 di oggi e continua fino a quando non è stato interrotto un'ora fa? Aggiungi entrambi i --since e --until opzioni al journalctl comando per scoprire cosa è andato storto.

Esegui il comando seguente per trovare i log generati da 10:10 oggi fino al 1 hour ago .

journalctl --since 10:10 --until "1 hour ago"

Filtraggio dei log in base all'unità del processo di origine

Trovare i registri generati da e fino a una data e un'ora specifiche è utile per la risoluzione dei problemi, ma potresti comunque ottenere molti record nell'output. Come si filtrano ulteriormente i log?

Ad esempio, si desidera filtrare le voci del diario da un'unità del server Web NGINX che non è stato avviato all'avvio. Usa il journalctl comando con il -unit opzione e il nome dell'unità del servizio per visualizzare i registri.

Eseguire il comando seguente per elencare tutte le voci di giornale in base all'unità del processo di origine (-u ) (nginx.service ). Questo tipo di filtraggio è utile per conoscere i PID dei processi o servizi relativi a un particolare errore o avviso.

journalctl -u nginx.service

Forse preferisci visualizzare attivamente le modifiche man mano che si verificano, ad esempio durante la risoluzione dei problemi del servizio, e devi visualizzare i registri mentre vengono caricati da journald. In tal caso, esegui il comando seguente per elencare o seguire (-f ) tutte le modifiche non appena si verificano.

journalctl -f

Finora hai visto che journalctl è flessibile e ha molte opzioni per filtrare e visualizzare i log. È impossibile mostrare tutti i tipi di filtri e intervalli di tempo in questo tutorial, ma puoi eseguire il man journalctl comando per vedere altre opzioni offerte dallo strumento journalctl.

Personalizzazione del formato di output

Per impostazione predefinita, journalctl visualizza le voci di registro in un formato simile a un cercapersone e colora il testo del terminale sull'output. Ma probabilmente vorrai emettere i tuoi log in un formato standardizzato e più analizzabile. In tal caso, puoi utilizzare qualsiasi strumento di manipolazione del testo.

Esegui il comando seguente per sopprimere la paginazione e la colorazione. Lo strumento journalctl ti consente di specificare cosa visualizzare su stdout con una direttiva di output nel file di configurazione.

journalctl --no-pager

Ma se preferisci specificare un formato di output, aggiungi il -o opzione al comando journalctl. L'esempio seguente utilizza il formato di output JSON, ma puoi utilizzare qualsiasi altra opzione disponibile in journalctl.

Il comando seguente elenca le voci del diario dall'avvio corrente (-b ) generato per il servizio NGINX (nginx ) e restituisce l'elenco in formato JSON (-o json ).

journalctl -b -u nginx -o json

Anche se puoi anche utilizzare un formato di output personalizzato, journalctl fornisce diversi utili predefiniti, come JSON, CSV e Syslog. Ognuno di questi formati ha i suoi pregi, ma dovresti consultare le pagine degli strumenti di manipolazione del testo per ulteriori informazioni su come gestiscono il testo.

Conclusione

In questo tutorial hai imparato a usare il journalctl comando per visualizzare i registri del journal di sistema. Ma prima di utilizzare uno di questi comandi, dovresti prima selezionare le opzioni di sottocomando appropriate per specificare ciò che desideri visualizzare.

A questo punto, ora puoi individuare e individuare rapidamente informazioni specifiche all'interno dei registri di sistema tramite journalctl . Ora sei dotato delle conoscenze necessarie, quindi perché non passare alla gestione dei servizi Linux con systemctl e journalctl?


Linux
  1. Ripristina il tuo sistema con la modalità utente singolo in Linux Mint / Linux Mint 12

  2. Sicurezza Linux:proteggi i tuoi sistemi con fail2ban

  3. Scopri di più sul tuo sistema Linux con inxi

  4. Procedura:gestire i log di sistema con Journalctl

  5. Come visualizzare la data e l'ora di riavvio del sistema Linux

Monitora le risorse di sistema con Bashtop e Bpytop in Linux

Risolvi i problemi e monitora le prestazioni del sistema Linux con nmon

Controlla e scopri quanto tempo ci vuole per avviare il tuo sistema Linux

Guida per principianti all'analisi dei registri in Linux con il comando journalctl

Journalctl:come leggere e modificare i log di Systemd

Come installare e utilizzare Docker nel tuo sistema Linux