- Journalctl centralizza e filtra i log di systemd in base a ora, unità, priorità e altro ancora.
- Consente output flessibili (JSON, ISO 8601, dettagliati) e monitoraggio in tempo reale.
- Gestione dello spazio con vuoto e limiti in journald.conf per un controllo dettagliato.
quando lavori con Linux moderno, systemd e il suo giornale centralizzato Sono il pane quotidiano per capire cosa succede sulla macchina. Ed è qui che entra in gioco journalctl, il coltellino svizzero per interrogare, filtrare ed esportare quei log con una velocità e una precisione che non si possono ottenere con file piatti sparsi.
Questo tutorial riunisce, passo dopo passo, Tutte le funzionalità essenziali e avanzate di journalctl: da quando ho visto l'ultimo Boot, filtrare per servizio, utente o priorità, gestire lo spazio su disco, modificare i formati di output o esportare in JSON. Inoltre, vedrai come abilitare la immagazzinamento persistente, elenca gli avvii precedenti e spostati tra le finestre temporali con assoluta flessibilità.
Journalctl, systemd-journald e perché sono importanti
Nei sistemi con systemd, i messaggi provenienti dal kernel, dai servizi, da initrd e dai processi utente vengono raccolti in un journal binario gestito da systemd-journalA differenza di /var/log/syslog e simili, questo formato binario consente Ricerche veloci, filtraggio dei metadati e output versatili (ad esempio in stile JSON o syslog), il tutto da un unico punto di accesso: journalctl.
Prima di tutto: controlla il fuso orario
Poiché i record vengono visualizzati in ora locale per impostazione predefinita, è consigliabile convalidare prima il fuso orario con timedatectlPuoi elencare le zone disponibili con timedatectl list-timezones
e cambiarlo con sudo timedatectl set-timezone ZONA
Per controllare lo stato, Stati Uniti d'America timedatectl status
e conferma che l'orologio locale è corretto.
Se sei interessato a lavorare in UTC, journalctl aggiunge il modificatore –utc per visualizzare timestamp universali quando ne hai bisogno. In questo modo non ci sono problemi nel confronto con i log. altri server o con dati di monitoraggio.
Per iniziare: visualizzazione, navigazione e spostamento nelle pagine
Senza argomenti, journalctl
visualizza l'intero diario dalla voce più vecchia a quella più recente utilizzando una paginazione (solitamente meno). È possibile scorrere con le frecce e, se la linea è più lunga dello schermo, vedi il resto con la freccia a destraPer invertire l'ordine (prima i più recenti), aggiungi -r
.
Se vuoi che la linea venga troncata invece di essere spostata lateralmente, usa --no-full
; e per vedere assolutamente tutto (incluso caratteri non stampabili), aggiunge -a
Quando si desidera elaborare l'output con altri strumenti, --no-pager
disattiva il cercapersone e lascia l'output in stdout.
Esistono scorciatoie più pratiche per la vita di tutti i giorni: -e
vai direttamente alla fine del diario per vedere gli ultimi avvenimenti e -x
portato aggiungere spiegazioni utile alcuni messaggi (quando disponibili) per velocizzare la diagnosi.
Filtra per avvio del sistema
L'interruttore -b
Ti mostra solo le voci del avvio corrente. Se si naviga attraverso più di un avvio, verranno visualizzate le linee "– Reboot –" che delimitano le sessioni. Per tornare a un avvio precedente, utilizzare journalctl -b -1
; per cinque partenze fa, -b -5
. Questo è l'ideale quando un problema si verifica solo dopo un riavvio o in sequenze di avvio specifiche.
Se vuoi l'elenco delle partenze che il giornale conosce, journalctl --list-boots
ne visualizzerà uno per riga con: offset relativo (0, -1, -2, …), ID_AVVIO e intervallo di tempo. È possibile effettuare la query per offset o ID assoluto: journalctl -b 0
o journalctl -b BOOT_ID
.
Importante: per far sì che gli avvii precedenti persistano tra i riavvii, abilitare l'archiviazione persistente creando /var/log/journal
(sudo mkdir -p /var/log/journal
) o modifica /etc/systemd/journald.conf con Storage=persistent
In questo modo, i registri non andranno persi a ogni avvio.
Finestre temporali potenti
Per limitare nel tempo, utilizzare --since
y --until
con il formato AAAA-MM-GG HH: MM: SSSe si omette l'ora, si presume la mezzanotte; se si omette la data, si presume il giorno corrente. Ad esempio: journalctl --since "2024-12-01 09:00" --until "2024-12-01 12:00"
.
È possibile utilizzare anche espressioni relative: ieri, oggi, domani, adesso, o frasi come "1 hour ago"
Un classico: journalctl --since 09:00 --until "1 hour ago"
per visualizzare dalla prima ora all'ora precedente a quella corrente.
Filtra per servizio, processi, utenti e altro ancora
Il filtro più comune è per unità systemd: -u
. Ad esempio, journalctl -u nginx.service
Visualizza tutto ciò che riguarda il servizio nginx. È possibile combinare più unità per vedere come interagiscono. intervallando cronologicamente voci da, ad esempio, Nginx e PHP-FPM: journalctl -u nginx.service -u php-fpm.service --since today
.
Per i servizi in esecuzione o non in esecuzione, è possibile elencare le unità con systemctl list-units -t service --all
e scopri nomi esatti (utile nei sistemi con decine di servizi). In questo modo si evitano errori di battitura e si filtra solo ciò che è necessario.
Se conosci il PID, filtra per _PID
: journalctl _PID=8088
Per utenti e gruppi, utilizzare _UID
y _GID
: Per esempio, id -u www-data
restituirà l'UID che potrai quindi utilizzare in journalctl _UID=33 --since today
per vedi cosa è stato generato da quell'utente.
Il giornale indicizza automaticamente molti campi: eseguibile, comando, trasporto, struttura, ecc. Con journalctl -F CAMPO
puoi elencare il valori diversi da un campo e quindi costruire filtri più accurati. Consultare man systemd.journal-fields
per vedere il catalogo completo dei campi filtrabili.
Alcuni filtri molto utili: per percorso eseguibile (journalctl /usr/bin/bash
), tramite la funzionalità in stile syslog (SYSLOG_FACILITY=3
corrisponde al demone), tramite ID di avvio (_BOOT_ID=...
) o tramite trasporto (_TRANSPORT=kernel|stdout|journal|syslog|driver|audit
) secondo L'origine del messaggio.
In alcuni casi è anche possibile filtrare per dispositivo, ad esempio per Rileva eventi USB in Linux oppure con journalctl /dev/sda
, utile per individuare i messaggi relativi a immagazzinamento quando si sospettano I/O o settori danneggiati.
Messaggi del kernel ed equivalenti dmesg
Per vedere solo i messaggi del kernel che hai -k
o --dmesg
Per impostazione predefinita, sono limitati all'avvio corrente, ma è possibile combinarli con -b
per altri stivali: journalctl -k -b -5
mostrerà il kernel di cinque avvii fa.
Questo filtro è molto utile per rilevare conflitti di driver, problemi di hardware o panico del kernel o eventi di basso livello che non compaiono nei servizi utente. È l'alternativa moderna al vecchio comando dmesg
con contesto temporale e metadati.
Priorità del registro: da 0 a 7 o per nome
Journalctl riconosce i livelli di priorità standard: 0 emergenza, 1 avviso, 2 critico, 3 errore, 4 avviso, 5 avviso, 6 informazione, 7 debug. È possibile filtrare con -p
utilizzando il nome o il numero e per impostazione predefinita include il livello scelto e tutti quelli più severi.
Esempi: journalctl -p err -b
(errore e massimo nell'avvio corrente) o journalctl -p 3
Se vuoi restringere il campo intervallo esatto, usa il formato desde..hasta
: ad esempio, solo avviso, errore e critico con journalctl -p warning..crit
o in numeri journalctl -p 4..2
.
Segui in tempo reale le ultime linee e ricerche
Per “ascoltare” il giornale in diretta, -f
funziona come coda -fPerfetto quando si riavvia un servizio e si vuole vedere subito cosa produce. Se si preferisce un campionamento, -n
mostra le ultime N righe (predefinite 10): journalctl -n
, journalctl -n 20
o journalctl -n12
nella sua forma compatta.
Oltre al sempre utile pipe per grep, journalctl integra --grep
per modelli di espressioni regolari direttamente nella query. Ad esempio, per individuare voci contenenti GnuPG: journalctl --grep GnuPG
. In combinazione con il tempo, la guida o la priorità, la ricerca è chirurgico.
Formati di output ed esportazione
Con -o
si modifica il formato di output. Hai short
(stile syslog predefinito), short-iso
(marca temporale ISO 8601), short-monotonic
(segno monotono), short-precise
(microsecondi) e verboso (mostra tutti i campi, compresi quelli interni).
Per le integrazioni, json
y json-pretty
sono ideali (quest'ultimo è più leggibile dall'uomo), e json-sse
incapsula l'output per eventi inviati dal serverIl formato cat
stampa solo il campo MESSAGE
, utile per letture pulite, e export
Viene utilizzato per trasferire o record di backup in binario.
Se si intende elaborare con altri strumenti, ricordarsi di combinare --no-pager
e reindirizza: journalctl -b -u nginx -o json --no-pager > nginx.json
o semplicemente journalctl > mensajes.log
quando hai bisogno di uno scarico veloce.
Permessi e sicurezza
Per impostazione predefinita, ogni utente può eseguire query i propri recordPer vedere il sistema, è necessario essere radice o appartengono a gruppi come adm
, wheel
o systemd-journal
Ciò impedisce la fuga di informazioni sensibili e rispetta il principio di minimo privilegio.
Controllo dell'utilizzo del disco
Per misurare quanto spazio occupa il giornale: journalctl --disk-usage
. Vedrai un riepilogo dei MiB/GiB consumati dai file di registro nell'archiviazione persistente e volatile, qualcosa di fondamentale per evitare le paure in piccole partizioni.
Se hai bisogno di ridurre o liberare spazio in LinuxSono disponibili tre strategie di svuotamento: in base alle dimensioni, al tempo e al numero di file. Esempi: sudo journalctl --vacuum-size=1G
, sudo journalctl --vacuum-time=2weeks
o sudo journalctl --vacuum-files=10
per preservare il più possibile 10 file archiviati.
Per impostare limiti permanenti, modifica /etc/systemd/journald.conf
I tasti più utili: SystemMaxUse=
y RuntimeMaxUse=
(limite totale su persistente e volatile), SystemKeepFree=
y RuntimeKeepFree=
(spazio da riservare nel FS), SystemMaxFileSize=
y RuntimeMaxFileSize=
(dimensione del file individuale) e SystemMaxFiles=
y RuntimeMaxFiles=
(numero massimo di file archiviati). Le dimensioni accettano i suffissi K, M, G, T, P, E.
Tieni presente che i limiti di dimensione del file guidano la rotazione per raggiungere il valore contrassegnato e che, per impostazione predefinita, se non configuri nulla, il journal di solito autolimitazione a circa il 10% del file system in cui risiede. Dopo aver modificato la configurazione, riavviare il servizio con sudo systemctl restart systemd-journald
.
Ricette veloci e trucchi
Per visualizzare solo gli errori più gravi dell'ultimo avvio: journalctl -p err -b
Se vuoi esattamente avvertimento, errore e critico: journalctl -p warning..crit
o journalctl -p 4..2
per esprimerlo in numeri.
Elenca tutti i valori in un campo e perfeziona i filtri: journalctl -F _GID
(o -F _UID
, -F _EXE
, ecc.). È perfetto per scoprire ID reali prima di creare la query finale.
Separati per eseguibile o comando: journalctl _EXE=/usr/bin/sudo
o journalctl _COMM=sudo
Se è necessario isolare ciò che proviene dall'output dei servizi standard, filtrare per _TRANSPORT=stdout
.
Filtra per host in ambienti con nome host condiviso: journalctl _HOSTNAME=debian
E per richiedere biglietti a un utente specifico conoscendone l'UID: journalctl _UID=0
(radice) o il numero che corrisponde al tuo caso.
Hai bisogno di visualizzare solo i messaggi a livello "utente" dal syslog della struttura? journalctl SYSLOG_FACILITY=1
(e ricorda che 3 corrisponde a demone). Questi filtri aiutano a emulare le viste syslog classiche durante la migrazione a systemd.
Lavorando in UTC, ISO 8601 e precisione in microsecondi
Se hai sistemi in più zone o li confronti con le metriche, aggiungi --utc
per standardizzare il tempo. Per formati chiari e ordinati, -o short-iso
È un'ottima scelta; se sei interessato all'ordinamento monotono dell'orologio (per il debug di sequenze relative), -o short-monotonic
è tuo amico.
Quando un incidente richiede la massima granularità, -o short-precise
aggiunge microsecondi al timestamp. È una gemma quando si correla con tracce, profili o acquisizioni di rete.
Buone pratiche per l'uso quotidiano
Abilita la persistenza se ti interessa la cronologia: crea /var/log/journal
o configurare Storage=persistent
e riavvia journald. Se lavori con molta rotazione, definisci SystemMaxUse
y SystemKeepFree
in modo che non anneghi mai la partizione.
Per eseguire il debug dei servizi, combinare: -u servicio
+ -f
+ filtri di priorità e tempo. Aggiungi -x
quando sospetti messaggi criptici; a volte fornisce indizi aggiuntivi che ti salvano minuti preziosi.
Nelle condutture e nelle esportazioni, utilizzare --no-pager
e formati come json
o export
a seconda dello strumento di destinazione. Non dimenticare la sicurezza: limita l'accesso ai gruppi appropriati e controllare i permessi se condividi output che potrebbero contenere dati sensibili.
Padroneggiare journalctl cambia il modo in cui si comprende il sistema: con filtri per unità, PID, utente, priorità o tempo, con output avanzati e controllo dell'utilizzo del disco, Avrai sempre la storia precisa a portata di mano di ciò che sta accadendo. È uno strumento solido per monitorare, verificare e correggere in modo intelligente, senza perdersi in migliaia di righe.
Scrittore appassionato del mondo dei byte e della tecnologia in generale. Adoro condividere le mie conoscenze attraverso la scrittura, ed è quello che farò in questo blog, mostrarti tutte le cose più interessanti su gadget, software, hardware, tendenze tecnologiche e altro ancora. Il mio obiettivo è aiutarti a navigare nel mondo digitale in modo semplice e divertente.