GNU/Linux >> Linux Esercitazione >  >> Linux

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

systemd è l'impostazione predefinita sulla maggior parte delle principali distribuzioni Linux. Una delle caratteristiche principali di systemd è il modo in cui raccoglie i log e gli strumenti che fornisce per analizzarli.

Nel tradizionale sistema SysVinit, hai syslog che memorizza i registri in file di testo normale. La lettura e l'analisi di questi file richiedono l'uso di trova, grep, taglia e molti altri comandi.

systemd raccoglie i registri da più fonti rispetto a syslogs, mantiene i registri del journal in formato binario e fornisce uno strumento da riga di comando per leggere, analizzare e manipolare i registri. Questo è più snello rispetto ai syslog.

Cos'è journald? Che cos'è journalctl?

journald è il demone di systemd che raccoglie i log da varie fonti di log come syslog.

journalctl è lo strumento a riga di comando che ti consente di interagire con i registri del journal.

Con journalctl puoi leggere i log, monitorare i log in tempo reale, filtrare i log in base a tempo, servizio, gravità e altri parametri.

In questo tutorial, ti mostrerò come usare journalctl per leggere, monitorare e analizzare i log in Linux.

Verifica se i registri del journal sono abilitati sul tuo sistema

Alcune distribuzioni Linux, specialmente quelle desktop, non abilitano i registri del journal per impostazione predefinita.

La posizione predefinita dei registri journald è /var/log/journal directory. Dovresti assicurarti che questa directory esista. In caso contrario, crealo tu stesso.

Successivamente, nel file /etc/systemd/journald.conf assicurati che il valore Storage è impostato su auto o persistent .

Il file journald.conf mostra i valori predefiniti. Quindi, anche se c'è un # davanti alle voci, significa che quelle sono le impostazioni predefinite utilizzate. Se vuoi cambiare qualcosa, rimuovi il # da quella riga.

Utilizzo dei comandi journalctl

Lascia che ti mostri alcuni degli esempi più semplici ma utili del comando journalctl.

Leggi e cerca nei log con journalctl

Se digiti semplicemente journalctl nel terminale, mostrerà i registri del journal in ordine cronologico.

journalctl

journalctl usa less sotto per mostrarti i log. Ciò significa che puoi usare gli stessi tasti per spostarti nei registri come fai con il comando less.

Se non lo ricordi, ecco un rapido richiamo:

Chiave Descrizione
Freccia Sposta di una riga
Spazio Sposta una pagina in basso
b Sposta una pagina in alto
g Vai alla prima riga
G Vai all'ultima riga
100 g Vai alla centesima riga
/stringa Cerca la stringa dalla posizione corrente
n/N Vai alla corrispondenza di ricerca precedente o successiva
q Esci dai registri

Se non vuoi che i log vengano visualizzati in modalità di visualizzazione meno simile, puoi utilizzare il --no-pager bandiera. Verranno visualizzati interi registri direttamente sullo schermo.

journalctl --no-pager

Questo non è molto utile e inonderà lo schermo se hai un'enorme quantità di log.

Mostra i registri in ordine cronologico inverso

Come hai notato, i log sono mostrati in ordine cronologico. Ciò significa che i registri archiviati più vecchi vengono visualizzati per primi.

Se vuoi vedere prima i log recenti, puoi visualizzare i log del journal in ordine inverso con l'opzione -r :

journalctl -r

Usa ancora un comando meno simile a view. Quindi, premi q per uscire dalla modalità di visualizzazione del registro.

Visualizza solo N righe recenti di registri del journal

Invece di mostrare tutti i log, puoi scegliere di visualizzare solo un certo numero di righe dal log usando il -n opzione.

Ad esempio, il comando seguente visualizzerà le 25 righe più recenti dei registri:

journalctl -n 25

Mostra i registri del diario in tempo reale

La visualizzazione dei registri recenti è una cosa, se vuoi vedere i registri in tempo reale, puoi usare il -f opzione del comando journalctl:

journalctl -f

Come l'opzione -f del comando tail, questa visualizzerà i log in tempo reale nella modalità follow.

Usa il comando Ctrl+C per uscire dalla visualizzazione in tempo reale.

Visualizza i registri nell'ora UTC

Per impostazione predefinita, i registri del journal vengono visualizzati nell'ora locale del sistema. Se l'ora del tuo sistema è impostata su un'ora diversa da UTC e vuoi vedere i log in UTC, puoi farlo usando il --utc bandiera.

journalctl --utc

Mostra solo i messaggi del kernel con -k

Il diario systemd accumula registri da origini diverse. Se vuoi solo vedere i log del kernel Linux, puoi usare l'opzione -k .

journalctl -k

Suggerimento:usa sudo per vedere tutti i registri del journal

Systemd è protettivo sul tipo di log da mostrare a quale utente.

Potrebbe mostrare alcuni registri ma non tutti i registri se sei un utente normale:

[email protected]:~$ journalctl -u ssh
Hint: You are currently not seeing messages from other users and the system.
      Users in groups 'adm', 'systemd-journal' can see all messages.
      Pass -q to turn off this notice.
-- Logs begin at Mon 2020-06-22 12:05:47 UTC, end at Tue 2020-07-14 11:59:29 UTC. --
-- No entries --

Se vuoi accedere a tutti i log, dovresti usare sudo se sei un utente sudo:

sudo journalctl -u ssh

Mostra messaggi da una particolare sessione di avvio

Questa è una caratteristica eccellente di jounrald. Il comando journalctl consente di accedere ai log appartenenti a una specifica sessione di avvio utilizzando l'opzione -b .

Puoi elencare tutte le sessioni di avvio con --list-boots bandiera.

journalctl --list-boots

L'output mostrerà le sessioni di avvio con il tempo di avvio e un numero intero assegnato alle sessioni di avvio:

  -5 513008ead8464c23aab732a2feed5277 Sun 2020-07-12 20:43:38 IST—Sun 2020-07-12 22:40:02 IST
  -4 caff16e3f46a4479b5287fb9e294f610 Mon 2020-07-13 07:36:04 IST—Mon 2020-07-13 19:13:44 IST
  -3 5665f41cc50a4dec9955efacc2596d68 Mon 2020-07-13 20:30:55 IST—Mon 2020-07-13 22:20:34 IST
  -2 c7d17407b0bd476a930af503f64b6006 Tue 2020-07-14 07:58:41 IST—Tue 2020-07-14 18:50:04 IST
  -1 7ab5e04518ec455abe0e2c86fdaa46fa Tue 2020-07-14 21:19:27 IST—Tue 2020-07-14 22:42:11 IST
   0 91856e86d4ee4e828717913deb288568 Wed 2020-07-15 08:11:51 IST—Wed 2020-07-15 17:14:10 IST

La sessione di avvio 0 è la sessione di avvio corrente. Boot session -1 è l'ultima sessione avviata e così via.

journalctl -b -2

Immagina di provare a farlo nel vecchio sistema syslog!

Non puoi solo ottenere i log di avvio come quelli che vedi in /var/log/boot.log . Tuttavia, i registri di avvio si trovano sempre all'inizio dei registri se ci si trova nella visualizzazione della sessione di avvio.

Filtra i registri del journal per un servizio systemd specifico

Il filtraggio è un punto di forza dei registri del diario. Puoi filtrare i log in base ai servizi systemd.

journalctl -u service_name

Ad esempio, se vuoi vedere i log generati da SSH, puoi usarlo in questo modo:

journalctl -u ssh

Ovviamente dovrai conoscere il nome del servizio systemd.

Filtra i registri per un certo intervallo di tempo

Questo è un altro esempio della capacità di filtraggio delle stringhe dei registri del journal. Puoi filtrare i log per un certo periodo di tempo e ci sono vari modi per farlo.

Puoi usare il linguaggio naturale per filtrare i log. Vengono riconosciuti termini come ieri, oggi e domani.

journalctl --since=yesterday --until=now

Puoi anche specificare la combinazione di data o data e ora:

journalctl --since "2020-07-10"

Puoi anche specificare un periodo di tempo con le date e l'ora:

journalctl --since "2020-07-10 15:10:00" --until "2020-07-12"

L'ora inizia alle 00:00:00 e determina il giorno e la data.

Puoi anche utilizzare il tempo relativo come -1h20min per specificare 1 ora e 20 minuti nel passato.

Filtra i log in base a UID, GID e PID

Se stai eseguendo il debug di un problema, potresti voler controllare i log per un determinato processo usando il suo PID.

I registri del giornale possono anche essere filtrati in base a User ID (UID), Group ID (GID) e Process ID (PID). Di seguito un esempio:

journalctl _PID=1234

Suggerimento:combina più opzioni per una visualizzazione del registro più personalizzata

Puoi combinare diverse opzioni per visualizzare i registri desiderati.

Ad esempio, se desideri visualizzare solo i log SSH di ieri con timestamp UTC, puoi utilizzare:

sudo journalctl -u ssh --since=yesterday --utc

Un altro utilizzo comune consiste nel filtrare i registri in base alle sessioni di avvio. Se vuoi vedere solo i log SSH nella sessione corrente, puoi usare:

sudo journalctl -u ssh -b0

Le possibilità sono infinite e puoi combinare le opzioni in base alle tue esigenze.

Utilizzo di journalctl -xe per visualizzare gli ultimi registri

Troverai spesso persone che suggeriscono di usare journalctl -xe comando.

  • -e :Salta alla fine dei registri del diario
  • -x :Mostra informazioni aggiuntive sulle voci di registro (se disponibili)

Alcune voci del registro contengono informazioni aggiuntive che non vengono visualizzate nella normale visualizzazione del registro. Usando il -x opzione può visualizzare tali informazioni.

Quello che vedi come una singola riga come questa:

Jul 09 16:33:40 itsfoss systemd[1]: Started Run anacron jobs.

Potrebbe visualizzare più informazioni come questa:

Jul 09 16:33:40 itsfoss systemd[1]: Started Run anacron jobs.
-- Subject: A start job for unit anacron.service has finished successfully
-- Defined-By: systemd
-- Support: http://www.ubuntu.com/support
-- 
-- A start job for unit anacron.service has finished successfully.
-- 
-- The job identifier is 3702.

Le informazioni aggiuntive aiutano a spiegare il contesto di un errore o un evento di registro e le possibili soluzioni.

Mostra solo errori nei log con journalctl

Per mostrare tutti gli errori nella sessione corrente, puoi utilizzare:

journalctl -p 3 -xb
  • -p 3 :filtra i log per la priorità 3 (che è un errore)
  • -x :fornisce informazioni aggiuntive sul registro (se disponibile)
  • b :dall'ultimo avvio (che è la sessione corrente)

Puoi anche utilizzare un altro livello di priorità per ottenere i log di debug, di avviso o persino di livello critico. Questa tabella elenca tutti i livelli di priorità.

Priorità Codice
0 emerge
1 avviso
2 critico
3 err
4 avviso
5 avviso
6 informazioni
7 debug

È inoltre possibile visualizzare i registri per un intervallo di gravità. Ad esempio, se desideri visualizzare tutti i registri di avviso, avviso e informazioni della sessione corrente, puoi utilizzare:

journalctl -p 4..6 -b0

Potresti anche aver usato warning..info nel comando sopra invece di 4..6 .

Controlla quanto spazio su disco stanno occupando i registri

Il journald raccoglie i registri da varie fonti e memorizza i registri di vari livelli, inclusi i registri di debug. Fidati di me, mentre la conservazione dei registri aiuta nell'analisi e nel controllo, possono richiedere una notevole quantità di spazio su disco.

Puoi controllare quanto spazio su disco stanno occupando i registri del journal con questo comando journalctl:

journalctl --disk-usage

Potresti ricevere una sorpresa (o uno shock) quando vedi l'output:

[email protected]:~$ journalctl --disk-usage 
Archived and active journals take up 2.8G in the file system.

2,8 GB? Questo è molto. Potresti voler cancellare i registri del diario.

Goditi l'analisi del registro con il comando journalctl

Ci sono molte più opzioni e utilizzo del comando journalctl e non posso assolutamente coprirle tutte. Ti consiglio di leggere la sua manpage se vuoi maggiori dettagli su di esso.

Credo di averti dato abbastanza per usare il comando journalctl per l'analisi regolare del registro. Spero che questo tutorial dettagliato su journald ti piaccia.

Se hai suggerimenti o domande, non esitare a lasciare un commento.


Linux
  1. Una guida per principianti ai permessi di Linux

  2. Comando Tee Linux con esempi

  3. Comando testa di Linux con esempi

  4. Nozioni di base su Linux:una guida per principianti alla modifica del testo con vim

  5. Comando JQ in Linux con esempi

Comando Tr in Linux con esempi

Comandi Linux - Guida completa

15 Comando Linux ps con esempi

Comando CD Linux con esempi

Comando Linux watch con esempi

Una guida per principianti alla navigazione nel filesystem Linux