GNU/Linux >> Linux Esercitazione >  >> Linux

Journalctl:come leggere e modificare i log di Systemd

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 o emerg
  • Avviso - 1 o alert
  • Critico - 2 o crit
  • Errore - 3 o err
  • Avviso - 4 o warning
  • Avviso - 5 o notice
  • Informa - 6 o info
  • Debug - 7 o debug

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.


Linux
  1. Variabili d'ambiente Linux:come leggere e impostare su un VPS Linux

  2. Come leggere e correggere i messaggi di negazione di SELinux

  3. Come cancellare Journalctl?

  4. Come eseguire il debug del processo di avvio di sistema in CentOS/RHEL 7 e 8

  5. Come abilitare systemd su WSL2:Ubuntu 20 e CentOS 8

Come ho imparato a smettere di preoccuparmi e ad amare systemd

Come leggere l'output e gli usi dei comandi principali di Linux

Come configurare e leggere la webmail

Come cancellare i registri del diario di Systemd

Come utilizzare journalctl per visualizzare e manipolare i log di Systemd

Leggi e analizza i tuoi log di sistema Linux con Journalctl