Introduzione
Systemd registra tutti i messaggi Linux dal kernel e dai processi di sistema. Il comando journalctl consente di visualizzare e modificare i log di sistema, rendendolo un potente strumento per il debug di servizi e processi.
Questa guida mostra come leggere, controllare e mantenere i log di sistema utilizzando journalctl attraverso esempi.
Prerequisiti
- Accesso alla riga di comando/finestra del terminale.
- Un editor di testo (come nano) per modificare il file di configurazione.
- Un utente con privilegi sudo (vedi come aggiungere un utente a sudoer).
Cos'è Systemd?
Systemd è un servizio Linux e un gestore di sistema. Anche se gli utenti non invocano systemd direttamente, il manager contiene molti strumenti e demoni da eseguire individualmente per vari processi di sistema.
Una delle funzionalità di sistema più potenti è la funzionalità di registrazione. Systemd fornisce una soluzione centralizzata per la registrazione di tutti i processi del kernel e degli utenti tramite log noti come journal .
Il rivista daemon raccoglie tutti i messaggi emessi dal sistema e quindi crea i journal, indipendentemente dal programma o dal processo. Il demone raccoglie i dati da tutte le risorse di sistema disponibili e li archivia in un formato binario.
Nota: Il formato binario consente di manipolare l'output in base alle proprie esigenze, fornendo maggiore flessibilità rispetto ai tradizionali file di registro Linux.
Sintassi journalctl
Il journalctl
il comando interroga e manipola i dati del journal raccolti dal journal demone. Lo strumento è fondamentale per gli amministratori di sistema e integra altri strumenti di registrazione Linux e soluzioni software per server Syslog.
La sintassi del comando è:
journalctl <options> <matches>
Senza alcun parametro, il journalctl
il comando restituisce l'intero contenuto del giornale a partire dalla voce più vecchia. Il <match>
è uno o più argomenti separati da spazi per filtrare i campi di output. Il formato è "FIELD=VALUE"
.
Opzioni rivista
La tabella seguente riassume il comune journalctl
opzioni:
Opzione | Descrizione |
---|---|
-a --all | Mostra tutti i campi per intero, inclusi i caratteri non stampabili. |
-f --follow | Mostra le voci più recenti e ne stampa continuamente di nuove. |
--no-full | Tronca l'output. |
-e --pager-end | Va alla fine del cercapersone. |
-n <number> --lines=<number> | Mostra le voci più recenti limitate a <number> di eventi. Senza un argomento, il valore predefinito è dieci (10). |
-o <format> --output=<format> | Visualizza le registrazioni prima nota nel <format> richiesto . |
--utc | Mostra l'ora nel formato UTC (Coordinated Universal Time). |
-x --catalog | Aggiunge testo esplicativo per registrare il messaggio, ove disponibile. |
-q --quiet | Sopprime i messaggi informativi nell'output. |
-b [<ID> or <+-offset>] --boot[=<ID> or <+-offset>] | Mostra i registri di un avvio specifico. L'omissione dell'argomento mostra i log di avvio correnti. |
-k --dmesg | Mostra solo i messaggi del kernel. |
--list-boots | Visualizza una tabella di numeri di avvio e i relativi ID. |
-g <regex> --grep=<regex> | Filtra l'output in base alla sintassi grep regex. |
-S <date> , -U <date> --since=<date> , --until=<date> | Mostra le voci più recenti o precedenti alla data specificata. |
-u <unit|pattern> --unit=<unit|pattern> | Mostra i log per l'unità systemd specificata o qualsiasi unità corrispondente a <pattern> . |
--disk-usage | Calcola e visualizza la dimensione totale del journal su disco. |
--vaccuum-size=<size> | Limita la dimensione del file journal archiviato a |
--vaccuum-time=<time> | Limita i giornali archiviati a più recenti di |
--no-pager | Disabilita il cercapersone e viene visualizzato come output standard. |
Controlla il journalctl
pagina di manuale usando il comando man per un elenco completo delle opzioni.
Come leggere systemd
La sezione seguente illustra come leggere i log di sistema e utilizzare le varie opzioni di visualizzazione per il journalctl
comando. L'output è diverso per ogni macchina poiché i record per ogni sistema sono unici.
Visualizza tutte le voci del diario
Per mostrare tutte le voci del diario, utilizza il journalctl
comando senza opzioni:
journalctl
La prima riga dell'output mostra l'intervallo di tempo dei dati di registro. Le colonne contengono i seguenti dati in ordine da sinistra a destra:
- Data e ora.
- Ospite.
- Sorgente registro.
- Messaggio di registro.
I dati del diario contengono molte voci. Usa i tasti freccia (simile al comando less) per navigare.
Esci dal diario premendo q .
Mostra le voci più recenti
Il journalctl
comando mostra le voci più vecchie per impostazione predefinita. Per passare alla fine del cercapersone e visualizzare le voci più recenti, utilizza il -e
opzione:
journalctl -e
L'output mostra le ultime 1000 voci per risparmiare spazio.
Per controllare quante righe vengono visualizzate nell'output, utilizza il -n
opzione seguita dal numero di righe. Ad esempio, per mostrare le cinque voci di diario più recenti, utilizzare:
journalctl -n 5
Il -e
opzione non è necessaria ed è implicita nel -n
opzione. L'omissione del numero mostra le dieci voci più recenti per impostazione predefinita.
Limita i log all'avvio specifico
Per limitare i log all'avvio corrente, utilizza il -b
tag senza alcun parametro:
journalctl -b
Senza alcun parametro, il comando mostra i log di avvio correnti.
Passa a un avvio specifico aggiungendo un parametro di offset. Ad esempio, mostra i log di avvio precedenti con:
journalctl -b -1
In alternativa, mostra il registro di avvio più vecchio disponibile con:
journalctl -b +1
Un modo alternativo per visualizzare un avvio specifico consiste nell'utilizzare un ID di avvio. Recupera gli ID di avvio utilizzando --list-boots
con:
journalctl --list-boots
La prima colonna mostra il numero di offset negativo, mentre la seconda colonna recupera l'ID di avvio . Copia l'ID e aggiungilo come parametro al comando, ad esempio:
journalctl -b cc07702b00884ec59312ece62604cac8
L'output limita la visualizzazione del registro all'istanza ID fornita.
Visualizza i registri entro una finestra temporale specifica
Filtra il giornale specificando un limite di tempo. Le due opzioni per limitare da o fino a un tempo specificato sono:
journalctl -S <datetime>
journalctl -U <datetime>
Usa le opzioni singolarmente o combinale per creare una finestra temporale.
Il comando prevede uno dei seguenti formati di data e ora:
- Data e ora specifiche, ad esempio
2022-04-30 09:20:00
. Se si omette il parametro dell'ora, il valore predefinito è00:00:00
. - Stringhe, come
"yesterday"
,"today"
,"2 hours ago"
o"now"
.
Di seguito è riportato un esempio journalctl
comando con una finestra temporale specifica:
journalctl -S 2022-04-02 -U 2022-04-22
Il comando crea una finestra temporale dal 2 aprile 2022 al 22 aprile 2022. L'output mostra i giornali che rientrano in quel periodo di tempo.
In alternativa, usa uno schema di stringa come:
journalctl -S "50 minutes ago"
L'output mostra i registri dall'ora indicata fino all'ora corrente.
Visualizza registri per unità di sistema specifica
Filtra i log in base all'unità di sistema specifica utilizzando il -u
tag e fornendo il nome dell'unità. Ad esempio, per filtrare solo i record dell'unità di servizio Jenkins, eseguire:
journalctl -u jenkins
L'output mostra le voci del diario relative all'unità systemd specifica (in questo caso, Jenkins).
Nota: Per visualizzare tutte le unità di sistema attualmente attive, utilizzare:
systemctl list-units
Visualizza i messaggi del kernel
Per visualizzare solo i messaggi di registro del diario del kernel, utilizzare il -k
opzione:
journalctl -k
L'output mostra i messaggi del kernel solo dall'avvio corrente, applicando il -b
etichetta. Per trovare i log del kernel da una sessione di avvio diversa, aggiungi il -b
tagga e cerca un avvio specifico.
Segui log
Usa il -f
o --follow
tag per stampare continuamente i registri più recenti:
journalctl -f
L'output stampa i registri mentre vengono generati in tempo reale. L'opzione permette di monitorare i log con journalctl
come si aggiungono.
Per uscire dal visualizzatore, premi CTRL +C .
Filtra i messaggi di registro in base alla priorità
Filtra i messaggi di registro in base alla priorità utilizzando il seguente comando:
journalctl -p <number or text priority>
Esistono le seguenti priorità:
- Emergenza -
0
oemerg
- Avviso -
1
oalert
- Critico -
2
ocrit
- Errore -
3
oerr
- Avviso -
4
owarning
- Avviso -
5
onotice
- Informa -
6
oinfo
- Debug -
7
odebug
Un numero più basso indica i messaggi con la priorità più alta. Specificando una priorità a livello singolo vengono visualizzati anche tutti i registri con numero di priorità inferiore (più critici).
Ad esempio, per visualizzare gli avvisi, utilizza:
journalctl -p 1
O in alternativa:
journalctl -p alert
L'output mostra solo i messaggi a livello di avviso e quelli più importanti (se presenti).
Filtra i messaggi di registro in base a un utente specifico
Per visualizzare i log di un utente, recupera l'ID utente (UID) con:
id <user>
Per recuperare l'ID dell'utente corrente, ometti il <user>
. L'output mostra il valore UID per l'utente specificato. Utilizza il campo del diario UID per filtrare i messaggi di registro in base all'utente specifico:
journalctl _UID=<UID>
L'output filtra il registro del journal in base all'ID utente specificato.
Nota: Per un elenco completo dei campi, controlla il systemd.journal-fields
pagina manuale:
man systemd.journal-fields
Come modificare l'output del registro di sistema
Un aspetto essenziale dell'utilizzo dei registri come amministratore di sistema è la formattazione degli output dei registri. Systemd offre molti metodi per manipolare il risultato visivo e recuperare i dati nel formato desiderato.
Di seguito sono riportati alcuni esempi ed opzioni di modifica dell'output standard.
Uscita su uscita standard
Il journalctl
comando visualizza l'output utilizzando un cercapersone. Disabilita il cercapersone con:
journalctl --no-pager
L'output risultante è in output standard (stdout). Utilizzare questa opzione durante l'analisi dei dati di registro con strumenti di modifica del testo o script Bash.
Tronca o espandi l'output
Il journalctl
pager mostra gli eventi del journal espansi nell'output. Premendo il destra e tasti freccia sinistra aiuta a navigare nel testo che non si adatta alle dimensioni dello schermo.
Per limitare, troncare il journalctl
output, utilizzare il --no-full
opzione:
journalctl --no-full
L'output limita le linee alla dimensione dello schermo, aggiungendo i puntini di sospensione (...
) per indicare una visualizzazione troncata.
Formati di output
Il journalctl
comando offre varie opzioni per i formati di output. La sintassi per il formato di output è:
journalctl -o <output format>
Alcuni dei formati disponibili includono:
cat
- Visualizza solo il campo del messaggio.export
- Emette un formato binario, adatto per i backup.short
- Genera un output simile ai classici file Syslog.short-precise
- Visualizza il tempo con microsecondi.json
- Formatta le voci del diario in voci JSON a riga singola.json-pretty
- Formatta in strutture JSON su più righe.
Ad esempio, per visualizzare utilizzando il json-pretty
formato, usa:
journalctl -o json-pretty
Diversi formati consentono di utilizzare i dati di registro in database, file di script o di analizzarli tramite software di monitoraggio.
Manutenzione registro
La memorizzazione dei dati di registro ha un costo e occupa spazio. Di seguito sono riportati alcuni suggerimenti e trucchi per scoprire l'utilizzo del disco, mantenere i file di dati di registro e liberare spazio utilizzato dai vecchi file di registro.
Visualizza l'utilizzo del disco
Per controllare l'utilizzo del disco del journal, eseguire il comando seguente:
journalctl --disk-usage
L'output mostra lo spazio totale occupato dal disco dai giornali archiviati e attivi.
Elimina i vecchi registri
Elimina i vecchi archivi di registro impostando il limite di dimensione desiderato. Il comando richiede sudo per eliminare i file /var/log/journal .
Ad esempio, imposta la dimensione su 1M con:
sudo journalctl --vacuum-size=1M
Inserisci la password sudo e premi Invio . L'output stampa i nomi e le dimensioni dei file e l'ultima riga mostra la quantità di memoria liberata.
In alternativa, eliminare i registri archiviati in base all'ora. Tutti i file più vecchi del tempo impostato eliminano e liberano memoria. Ad esempio, per eliminare i file più vecchi di due mesi, eseguire:
sudo journalctl --vacuum-time=2months
I suffissi temporali sono s
, m
, h
, days
, months
, weeks
o years
.
Limita il diario
Il file di configurazione del journal consente di impostare limiti e controllare la quantità di dati journald occupata sul disco. Per modificare il file, esegui:
sudo nano /etc/systemd/journald.conf
Il file contiene campi di configurazione di esempio. I seguenti parametri riguardano la dimensione del journal e i limiti di memoria:
SystemMaxUse
- Memoria persistente massima utilizzata dal journal.SystemKeepFree
- Quantità di spazio libero lasciata da un diario quando si aggiungono voci alla memoria permanente.SystemMaxFileSize
- Imposta la dimensione massima per i file journal nella memoria persistente.RuntimeMaxUse
- Massimo spazio su disco di archiviazione volatile.RuntimeKeepFree
- Quantità di spazio libero per altri usi durante la scrittura nella memoria volatile.RuntimeMaxFileSize
- Imposta la dimensione massima per i file journal nella memoria volatile.
La dimensione del file controlla i file archiviati di destinazione per raggiungere i limiti. Decommenta le righe e imposta i limiti per ottenere un migliore controllo sulle risorse di archiviazione e consumo della macchina.
Conclusione
Questa guida ha mostrato come visualizzare, controllare e gestire i registri del diario di sistema attraverso esempi. Il journalctl
command è uno strumento prezioso che aiuta a risolvere i problemi dei servizi Linux e a scoprire gli errori di sistema.