fb-pixel
SupportHost italian

Come usare journalctl per accedere ai log di stystemd

Vuoi sapere come accedere ai log di systemd? Usando journalctl è possibile visualizzare i log e filtrarli anche in base al tipo per identificare più facilmente gli errori.

In questa guida vedremo come fare a leggere i log e filtrarli, ma anche come configurare il journal in modo da decidere se mantenere i log sul disco, fare pulizia e impostare una dimensione limite.

Iniziamo!

Cos’è journalctl

Journalctl è uno strumento accessibile da linea di comando che ci permette di visualizzare e filtrare i log di systemd. Systemd ha, infatti, integrato un suo sistema di logging che viene chiamato journal, da cui il nome journalctl.

In base alla distribuzione che stai usando e quindi anche alla configurazione di default, è possibile che i log siano memorizzati automaticamente sul disco o che siano mantenuti solo nella RAM, in quest’ultimo caso i log verranno mantenuti solo fino al riavvio. Come vedremo è possibile modificare queste impostazioni in modo da scegliere se memorizzare i log.

Come leggere i log con journalctl

Accedendo al journal possiamo identificare errori e monitorare lo stato del sistema.

Vediamo come fare a leggere i log usando delle opzioni che ci permettono di organizzare meglio i risultati che ci vengono mostrati, ad esempio mostrando prima i log più recenti.

Mostrare tutti i log

Se richiamiamo lo strumento senza usare nessuna opzione, possiamo avere la lista di tutti i log. I messaggi ci vengono mostrati dal meno recente al più recente.

Ci basta dare il comando:

journalctl

I risultati verranno mostrati in pagine, possiamo usare il tasto “Invio” per scorrere nei log e se vogliamo interrompere e uscire ci basta premere “Q“.

Journalctl Output

Per mostrare tutto il contenuto dei log nel terminale, senza dividere l’output in pagine, ci basta usare l’opzione –no-pager, in questo modo:

journalctl --no-pager

Mostrare prima i log più recenti

Possiamo visualizzare i log in ordine inverso, dal più al meno recente usando il comando in questo modo:

journalctl -r

Anche in questo caso i risultati saranno mostrati in pagine, ma stavolta andando avanti con le pagine vedremo via via i messaggi più vecchi.

Mostrare i log in tempo reale

Quando usiamo il comando journalctl, stiamo visualizzando ciò che è stato memorizzato nei log finora. Se invece vogliamo monitorare cosa sta succedendo proprio in un determinato momento, è utile visualizzare i log in tempo reale.

Per farlo usiamo il comando con l’opzione -f, così:

journalctl -f

Per terminare la visualizzazione in tempo reale usiamo “Ctrl+C” per uscire.

Visualizzare i log di un determinato avvio

Possiamo restringere i log all’ultimo avvio o anche controllare i log di un avvio specifico, ad esempio selezionandolo in base alla data.

In questo caso può essere utile prima di tutto ottenere la lista degli avvi:

journalctl –-list-boots

Questo ci mostrerà data e ora degli ultimi avvi con orario di accensione e spegnimento. Accanto a ogni voce del registro vediamo un numero e un ID possiamo usare l’uno o l’altro per vedere i log di quell’avvio, vediamolo con un esempio.

Prendendo come esempio quest’output:

-53 4e28737084254e31b39a421992016229 Sat 2026-02-07 20:58:53 CET Sat 2026-02-07 21:01:02 CET
-52 6ccd761e151b493b8e5ec668a34b6d58 Sun 2026-02-08 09:59:08 CET Sun 2026-02-08 11:23:45 CET

Per visualizzare i log dell’avvio del 07 febbraio, posso indicare il numero dell’avvio (-53) oppure l’ID.

Usando il numero dell’avvio mi basta dare il comando in questo modo:

journalctl -b -53

Altrimenti usando l’ID:

journalctl -b 4e28737084254e31b39a421992016229

Posso usare questa stessa opzione, -b, anche per visualizzare i log memorizzati dall’ultimo avvio:

journalctl -b

Oppure dell’avvio precedente a quello corrente:

journalctl -b -1

E così via andando a ritroso.

Visualizzare i log di un periodo di tempo

Oltre a filtrare i log in base agli avvii del sistema, possiamo anche restringere i risultati in base al tempo scegliendo se impostare:

  • una data di inizio, per vedere ad esempio tutti i log a partire dal 1 gennaio;
  • una data di fine, per vedere tutti i log fino al 15 febbraio;
  • entrambe le date, per creare un intervallo e poter vedere i log dal 1 gennaio al 15 febbraio.

Per farlo usiamo le opzioni -S (che sta per –since e si usa per la data di inizio) e -U (che sta per –until e indica la data di fine). Dovremo indicare la data seguendo questo formato:

YYYY-MM-DD HH:MM:SS

Nota: non è necessario specificare l’orario, se non lo indichiamo verrà usato l’orario di default 00:00:00.

In alternativa possiamo anche usare delle stringhe comuni per indicare la data, come “yesterday” o “today”.

Chiariamo il tutto meglio con degli esempi.

Visualizzare i log a partire dal 10 febbraio:

journalctl -S 2026-02-10

Mostrare i log fino al 15 febbraio:

journalctl -U 2026-02-15

Mostrare i log dal 10 al 12 febbraio:

journalctl -S 2026-02-10 -U 2026-02-12

Mostrare i log a partire da ieri:

journalctl -S yesterday

Altri modi di filtrare i log con journalctl

Finora abbiamo visto come filtrare i log usando journactl con opzioni che ci permettono di restringere gli avvisi a determinati periodi di tempo ad esempio visualizzando solo i log più recenti o quelli fino a una certa data.

In questa sezione andremo a vedere come applicare altri filtri che ci permettono di trovare più facilmente gli avvisi che vogliamo verificare.

Mostrare i log del kernel

L’opzione -k di journalctl ci permette di avere come output solo i log del kernel.

journalctl -k

L’output sarà la lista dei log del kernel e mostrerà solo i risultati dell’ultimo avvio. Se vogliamo mostrare i log di un avvio specifico possiamo usare l’opzione -b come abbiamo visto prima, ad esempio per mostrare i dati dell’avvio precedente a quello corrente, possiamo usare il comando:

journalctl -k -b -1

Filtrare i log in base al tipo

A ogni messaggio nel journal viene associata una priorità in base alla gravità dell’avvio stesso, in particolare il valore più basso indica la priorità maggiore e quindi un avviso che può avere un impatto più critico:

  • 0 per Emergency (emerg)
  • 1 per Alert (alert)
  • 2 per Critical (crit)
  • 3 per Error (err)
  • 4 per Warning (warning)
  • 5 per Notice (notice)
  • 6 per Inform (info)
  • 7 per Debug (debug).

Se vogliamo visualizzare solo i log di una certa priorità, ci basta usare l’opzione -p seguita dal valore di priorità come valore numerico o con l’abbreviazione (puoi vederle tra parentesi nella lista qui sopra).

Per esempio per visualizzare solo gli errori critici possiamo usare uno dei due comandi:

journalctl -p 2
journalctl -p crit

Filtrare i log per processo, utente o gruppo

Possiamo anche restringere i log in base a un servizio, a un processo specifico, a un utente o ad un gruppo.

Per filtrare per servizio, ci basta usare l’opzione -u, per esempio:

journalctl -u ssh

Passiamo ora ai processi, usando i comandi per gestire i processi, ad esempio top, possiamo identificare l’ID dei processi.

Una volta che conosciamo il PID, cioè l’ID del processo che vogliamo monitorare, possiamo filtrare i log per quello specifico processo (o sottoprocesso di un’applicazione), ci basterà indicare il PID come in questo esempio:

journalctl _PID=1255
Journalctl Filtrare Per Processo

Per identificare utenti e gruppi possiamo usare rispettivamente uid e gid. Se non conosciamo gli ID possiamo usare il comando id come abbiamo visto nella guida per gestire gli utenti su Linux.

Una volta ottenuto uid o gid, possiamo filtrare i log.

Per vedere i log di uno specifico utente usiamo il comando specificando l’uid, in questo modo:

journalctl _UID=1001

Per un gruppo, specifichiamo l’id del gruppo (gid), come in questo esempio:

journalctl _GID=1001

Se uno di questi comandi ci restituisce un avviso “No entries”, vuol dire che non ci sono log per quell’utente o gruppo. Può darsi che l’ID che abbiamo indicato non sia corretto o che non ci siano log per quell’utente o gruppo.

Possiamo sapere gli ID di tutti gli utenti che sono registrati nei log usando l’opzione field che ci permette di vedere tutti i possibili valori per uno specifico campo.

Con il comando seguente possiamo conoscere tutti gli ID degli utenti nel journal:

journalctl -F _UID

Mentre con questo possiamo conoscere gli ID dei gruppi:

journalctl -F _GID

Come gestire i log

Possiamo scegliere se far sì che i log siano scritti sul disco o mantenuti solo nella RAM, inoltre possiamo controllare qual è lo spazio occupato sul disco e fare pulizia dei log più vecchi. Vediamo come fare.

Scegliere se memorizzare i log

Possiamo decidere se scrivere i log sul disco e quindi averli a disposizione anche dopo lo spegnimento oppure se tenerli solo in RAM. Nella seconda ipotesi i log verranno eliminati ogni volta che si spegne il computer.

Per modificare questa opzione possiamo modificare il file di configurazione, journald.conf che si trova, in genere, a questo percorso:

/etc/systemd/journald.conf

L’opzione da modificare è “Storage=”.

Possiamo impostare uno di questi valori in base a come decidiamo di memorizzare i log:

  • persistent – con questa opzione i log verranno memorizzati sul disco, in genere in /var/log/journal.
  • volatile – se impostiamo questo valore, i log saranno memorizzati solo nella RAM.
  • auto – con questa opzione i dati saranno memorizzati sul disco se esiste la cartella /var/log/journal, altrimenti saranno mantenuti solo nella RAM;
  • none – permette di disattivare completamente la memorizzazione dei log.

Nell’esempio qui sotto, l’opzione è impostata come Storage=persistent in modo da memorizzare i log sul disco.

File Configurazone Journald Memorizzare Log

Se necessario possiamo spostare i dati memorizzati nella RAM e scriverli sul disco usando questo comando:

journalctl --flush

Come conoscere lo spazio occupato dai log

Per sapere quanto spazio occupano i log sul disco, possiamo usare il comando seguente:

journalctl --disk-usage

L’output ci indicherà la dimensione dei journal.

Journalctl Spazio Occupato Su Disco

Come eliminare i log più vecchi

Se vogliamo ridurre la dimensione dei journal, possiamo ripulire i log andando ad eliminare i messaggi più vecchi. Possiamo farlo con due metodi diversi:

  • impostare una dimensione limite ed eliminare tutti i log più vecchi finché il file non raggiunge le dimensioni da noi indicate;
  • eliminare i messaggi più vecchi rispetto al periodo specificato.

Vediamo come.

Per impostare una dimensione limite e andare ad eliminare tutte le entry più vecchie fino a raggiungere la dimensione richiesta per i file di journal, usiamo l’opzione --vacuum-size, in questo modo:

sudo journalctl --vacuum-size=100M

Se l’operazione va a buon fine, l’output ci indicherà quanto spazio è stato liberato con un messaggio come questo:

Vacuuming done, freed 221.1M of archived journals from /var/log/journal/[...]

Possiamo anche conservare solo i log più recenti andando ad eliminare quelli precedenti a una determinata data, in questo caso dovremo usare l’opzione --vacuum-time, in questo modo:

sudo journalctl --vacuum-time=1month

Nell’esempio qui sopra stiamo eliminando i log più vecchi di un mese, possiamo anche indicare il tempo in:

  • secondi con s
  • minuti con m
  • ore con h
  • giorni con days
  • settimane con weeks
  • anni con years.

Come impostare una dimensione massima per i file di log

Dal file di configurazione che abbiamo visto prima, journald.conf, possiamo anche impostare dei limiti per la dimensione dei file di journal sul disco e un limite di memoria nel caso in cui la memorizzazione avvenga solo nella RAM.

Queste sono le opzioni che vengono applicate quando i file sono memorizzati su disco (persistent):

  • SystemMaxUse: indica quanto spazio sul disco può occupare il journal.
  • SystemKeepFree: indica quanto spazio sul disco deve lasciare libero.
  • SystemMaxFileSize: serve a impostare una dimensione massima per i singoli file di journal.
  • SystemMaxFiles: specifica quanti file di journal possono essere mantenuti. Di default è impostato a 100.

Se vogliamo controllare le impostazioni per i journal memorizzati solo nella RAM (volatile), andiamo a modificare queste opzioni:

  • RuntimeMaxUse: spazio massimo che può essere usato (nella memoria volatile).
  • RuntimeKeepFree: spazio che deve essere lasciato libero.
  • RuntimeMaxFileSize: dimensione massima dei singoli file.
  • RuntimeMaxFiles: numero massimo di file, di default sono 100.

Conclusioni

Esaminando il journal, cioè il registro dei log, è possibile fare debug delle applicazioni e trovare errori. Abbiamo visto come si usa il comando journalctl sia per accedere semplicemente ai log più recenti che per filtrarli. Inoltre abbiamo visto come fare a fare pulizia dei log più vecchi in modo da non occupare troppo spazio.

E tu conoscevi già questa utility di Linux? Facci sapere nei commenti.

Categorie
Indice dei contenuti

    🚀

    Articoli correlati

    Commenti

    Lascia un commento

    Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *