Come usare Journalctl per leggere i log di sistema Linux

Per molti anni, i log di sistema e del kernel sono stati gestiti da un’utilità chiamata syslogd. La maggior parte dei sistemi operativi basati su Linux è migarata a systemd, che viene fornito con un demone di log diverso, journald. Per interagire con questi log, si utilizza l’utilità journalctl.

Dare permessi agli utenti per leggere i log di sistema

Solo gli utenti appartenenti ai gruppi “adm” o “systemd-journal” possono leggere i log di systemd. Distribuzioni come Ubuntu ti aggiungono già come utente al gruppo adm.

Apri un emulatore di terminale e digita il seguente comando:

groups

journalctl-groups

Se vedi “adm” o “systemd-journal” nell’output, puoi saltare il resto dei passaggi di questa sezione. In caso contrario, aggiungiti al gruppo “adm”.

sudo adduser $USER adm

Dovrai riavviare la tua sessione di accesso affinché questa modifica abbia effetto (esci e accedi di nuovo). Se non puoi farlo per vari motivi, usa questo comando per accedere al nuovo gruppo senza riavviare la sessione grafica.

newgrp adm

Non chiudere la finestra del terminale. Ora fai parte del gruppo adm – nella sessione del terminale, ma non nella tua sessione grafica. Se apri un nuovo terminale in questo momento, il tuo utente non sarà più loggato nel gruppo adm.

Controllare se il Journal è persistente

I log di systemd possono essere persistenti o volatili. Su Ubuntu e altre distribuzioni, sono persistenti di default. Su Debian 9 sono volatili, il che significa che sono mantenuti solo in memoria (non su disco) e scompaiono durante lo spegnimento o il riavvio. Inserisci il seguente comando.

journalctl --list-boots

journalctl-list-boots

Se ci sono più voci qui, non devi fare altro. Significa che i journal sono mantenuti su disco (persistenti). Se ottieni solo un’unica voce, allora il journal è volatile. Cambialo in persistente.

sudosed-i'/Storage/ c\Storage=persistent'/etc/systemd/journald.conf

Selezionare quale voce di avvio del journal visualizzare

Di solito, vorrai vedere il log per l’avvio attuale. In rare occasioni, vorrai vedere l’avvio precedente, quando qualcosa è andato storto, ad esempio, dopo un crash di sistema.

Per visualizzare il log per l’avvio attuale:

journalctl -b0

journalctl-view-current-boot

Per l’avvio precedente, usa “-1” invece di “0,” e per due avvii fa, “-2” e così via.

journalctl -b-1

Navigare e cercare attraverso il journal di sistema

Dopo aver aperto il log con journalctl, puoi navigare attraverso il testo con i tasti freccia e i tasti PAGE UP o PAGE DOWN. Altri tasti utili sono:

  • per andare alla fine dell’output.

  • < per andare all’inizio dell’output.
  • / per cercare una stringa di testo. Dopo aver premuto il tasto slash, inserisci la stringa che vuoi trovare, seguita da Invio. La stringa è case sensitive, quindi “network” non troverà le stringhe “Network”. La ricerca inizia dalla tua posizione attuale di visualizzazione, verso il basso. Per cercare verso l’alto, usa ?.
  • n trova la corrispondenza successiva nella ricerca attuale. N trova la precedente.
  • q esce dall’utilità journalctl.

journalctl-searching

Filtrare le voci di log per priorità

A volte vuoi solo cercare errori, ignorando avvisi e messaggi di stato. Ogni voce in un log ha una priorità: emergenza, avviso, critico, errore, avviso, informazione. Questi sono elencati in ordine di importanza, l’emergenza è riservata agli scenari peggiori (sistema non utilizzabile). I messaggi informativi sono solo testo informativo, che riporta lo stato dei programmi che funzionano normalmente.

Per visualizzare solo i messaggi di errore dall’avvio attuale, inserisci:

journalctl -b0 -p err

journalctl-filter-errors

Se vuoi vedere gli errori da tutti gli avvii, basta rimuovere il parametro “-b”:

journalctl -p err

Questi sono i codici che puoi passare al parametro “-p”:

  • alert
  • crit
  • debug
  • emerg
  • err
  • info
  • notice
  • warning

Filtrare le voci di log per percorso dell’eseguibile del processo o unità di systemd

Alcuni processi vengono avviati e gestiti da cosiddetti unità systemd. Per vedere tutti i log relativi all’unità del servizio cron, inserisci:

journalctl -u cron.service

Puoi vedere quali unità hai disponibili con:

systemctl list-dependencies

journalctl-list-dependencies

Puoi navigare nella lista con i tasti freccia su e giù. Premi q per uscire.

Se preferisci usare il percorso al file eseguibile del programma (binario), passa semplicemente il suo percorso completo come argomento.

journalctl /usr/sbin/cron

Non dimenticare, puoi anche filtrare per l’entry di avvio attuale per eliminare messaggi non necessari.

journalctl -b0 /usr/sbin/cron

Conclusione

Journalctl mira a facilitare la ricerca di ciò che stai cercando. Se vuoi imparare di più sui parametri avanzati che puoi utilizzare, consulta la pagina del manuale del comando journalctl.