Demistificare journalctl: La tua guida ai log di sistema di Linux
Impara i comandi journalctl per visualizzare, filtrare, seguire e pulire i log del journal di systemd di Linux.
Demistificare journalctl: La tua guida ai log di sistema di Linux
L'utilità journalctl è il comando principale per visualizzare i log raccolti da systemd-journald. Quando un servizio fallisce, un avvio si blocca o un messaggio del kernel scorre troppo velocemente, journalctl è di solito dove trovi i dettagli.
A differenza dei file di log di testo semplice in /var/log, il journal memorizza voci strutturate con metadati come nome dell'unità, priorità, ID di avvio e timestamp. Questo ti permette di filtrare i log con precisione invece di aprire diversi file e indovinare.
Comprendere il Journal di Systemd
Prima di immergerci nei comandi, è utile sapere cosa sta gestendo journalctl. Il journal di systemd raccoglie log dal kernel, dai servizi (unità), dalle applicazioni e persino dal processo di avvio del sistema. Questi log sono tipicamente memorizzati in file binari strutturati, rendendoli molto più veloci da cercare e filtrare rispetto ai tradizionali file flat.
Concetti Chiave:
- Persistenza: I log possono essere configurati per essere memorizzati permanentemente tra i riavvii (modalità persistente) o solo mantenuti in memoria (modalità volatile).
- Dati Strutturati: I log contengono metadati (come nome dell'unità, priorità, ID di avvio) che
journalctlsfrutta per il filtraggio.
Comandi Essenziali di Visualizzazione
La necessità più comune è semplicemente visualizzare i log. Ecco i comandi fondamentali per iniziare a esplorare la cronologia del tuo sistema.
1. Visualizzare Tutti i Log
Per vedere ogni voce raccolta dal journal da quando il sistema ha iniziato a registrare i log, usa il comando senza alcun argomento:
journalctl
Per impostazione predefinita, questo output è impaginato usando uno strumento come less, permettendoti di navigare su e giù usando i tasti freccia o la barra spaziatrice.
2. Visualizzare i Log in Tempo Reale (Seguire)
Simile all'uso di tail -f, puoi monitorare i log mentre vengono scritti nel journal. Questo è prezioso quando si avvia o si esegue il debug di un servizio specifico:
journalctl -f
Per uscire dalla visualizzazione in tempo reale, premi Ctrl+C.
3. Limitare l'Output per Numero di Righe
Se hai bisogno solo delle voci più recenti, usa il flag -n per specificare il numero di righe:
# Mostra le ultime 20 voci di log
journalctl -n 20
4. Visualizzare i Log da un Momento Specifico
Filtrare per tempo è una delle caratteristiche più potenti di journalctl. Puoi usare timestamp relativi o assoluti.
Esempi di Tempo Relativo:
| Comando | Descrizione |
|---|---|
journalctl --since "1 hour ago" |
Log dell'ultima ora. |
journalctl --since "yesterday" |
Log dall'inizio del giorno di calendario precedente. |
journalctl --since "2023-10-26 14:30:00" |
Log dopo una data e ora specifiche. |
Consiglio: Puoi combinare --since e --until per specificare un intervallo preciso, ad esempio: journalctl --since "2023-10-26" --until "2023-10-27 00:00:00".
Filtrare i Log per Unità, Servizio o Processo
Uno degli usi più critici di journalctl è isolare i messaggi relativi a una specifica unità systemd (servizio).
Filtrare per Nome del Servizio
Usa il flag -u (o --unit) seguito dal nome del servizio (ad es., sshd.service, nginx.service):
# Visualizza i log solo per il servizio del server web Apache
journalctl -u apache2.service
# Segui i log per il servizio Docker
journalctl -u docker.service -f
Filtrare per ID di Avvio
Systemd tiene traccia dei log attraverso diversi avvii del sistema. Per vedere i log da un avvio precedente, elenca prima gli avvii disponibili:
journalctl --list-boots
Questo produce un elenco indicizzato (ad es., -1, -2, 0 per l'avvio corrente). Puoi quindi usare l'indice o l'ID di avvio completo:
# Mostra i log dall'avvio immediatamente precedente
journalctl -b -1
# Mostra i log da un ID di avvio specifico (usa l'ID lungo elencato sopra)
journalctl -b a1b2c3d4e5f6...
Filtrare per Messaggi del Kernel
Per visualizzare solo i messaggi provenienti dal kernel (simile all'uso di dmesg):
journalctl -k
# O, equivalentemente:
journalctl -b -k
Filtraggio Avanzato e Controllo dell'Output
Una risoluzione dei problemi efficace richiede spesso la combinazione di filtri e il controllo del formato dell'output.
1. Filtrare per Livello di Priorità
Ai log vengono assegnati livelli di priorità da 0 (emerg) a 7 (debug). Puoi usare il flag -p o --priority per visualizzare i messaggi con la gravità selezionata e livelli più severi:
| Livello di Priorità | Valore Numerico |
|---|---|
err o error |
3 |
warning |
4 |
notice |
5 |
info |
6 |
# Mostra tutti gli errori, critici e messaggi di emergenza dal servizio SSH
journalctl -u sshd.service -p err
2. Cercare Testo Specifico
Quando il filtraggio standard non è sufficiente, puoi reindirizzare l'output a grep o usare --grep sui sistemi la cui versione di journalctl lo supporta:
# Cerca in tutti i log le righe contenenti la parola 'failed'
journalctl | grep failed
# Oppure, usa l'opzione --grep per un filtraggio più semplice (se disponibile/preferito)
journalctl --grep=failed
3. Cambiare il Formato dell'Output
Per script o per spostare i log in altri strumenti, cambiare il formato dell'output è essenziale. Il predefinito è pretty (leggibile dall'uomo).
--output=json: Restituisce le voci come oggetti JSON strutturati.--output=short: Simile a pretty ma meno colorato.--output=export: Restituisce voci di journal grezze per l'archiviazione.
# Restituisce i log recenti come JSON
journalctl -n 5 --output=json
4. Combinare i Filtri
I filtri si accumulano in modo moltiplicativo. Per vedere tutti gli errori da Nginx registrati negli ultimi 10 minuti:
journalctl -u nginx.service --since "10 minutes ago" -p err
Gestire la Dimensione e la Persistenza del Journal
Col tempo, il journal può consumare spazio su disco significativo, specialmente se configurato per la registrazione persistente. Gli amministratori di sistema devono gestirne la dimensione.
Controllare l'Utilizzo Corrente
Per vedere quanto spazio su disco stanno occupando i file di journal correnti:
journalctl --disk-usage
Pulire i Log Vecchi
Puoi cancellare i log in base al tempo o alla dimensione totale.
Pulizia per Tempo:
# Mantieni solo i log degli ultimi 7 giorni
journalctl --vacuum-time=7d
Pulizia per Dimensione:
# Riduci la dimensione totale del log a un massimo di 500 Megabyte
journalctl --vacuum-size=500M
Attenzione: Fai attenzione quando cancelli i log, specialmente quelli da avvii precedenti (
-b). Assicurati che le informazioni diagnostiche critiche non vengano rimosse prematuramente.
Conclusione
Per la risoluzione dei problemi quotidiana, inizia con journalctl -u <servizio> -n 50 --no-pager, aggiungi -f quando hai bisogno di output in tempo reale, e usa --since o -b quando il problema è legato a una finestra temporale o a un avvio. Prima di cancellare i log, controlla journalctl --disk-usage e mantieni abbastanza cronologia per il rollback e la revisione degli incidenti.