Gestisci i messaggi di registro in Systemd utilizzando Journalctl [Guida completa]
Systemd è un gestore di sistemi e servizi all'avanguardia per sistemi Linux: un sostituto del demone init destinato ad avviare processi in parallelo all'avvio del sistema. Ora è supportato in numerose distribuzioni mainstream attuali tra cui Fedora, Debian, Ubuntu, OpenSuSE, Arch, RHEL, CentOS, ecc.
In precedenza abbiamo spiegato la storia dietro “init” e “systemd”; dove abbiamo discusso cosa sono i due demoni, perché tecnicamente "init" doveva essere sostituito con "systemd" e anche le principali caratteristiche di systemd.
Uno dei principali vantaggi di systemd rispetto ad altri sistemi init comuni è il supporto per la gestione centralizzata della registrazione del sistema e dei processi utilizzando un journal. In questo articolo impareremo come gestire e visualizzare i messaggi di registro in systemd utilizzando il comando journalctl in Linux.
Importante: prima di proseguire in questa guida, potresti voler imparare come gestire i servizi e le unità "Systemd" utilizzando il comando "Systemctl" e anche creare ed eseguire nuovi unità di servizio in systemd utilizzando script di shell in Linux. Tuttavia, se sei d'accordo con tutto quanto sopra, continua a leggere.
Configurazione di Journald per la raccolta dei messaggi di registro in Systemd
journald è un demone che raccoglie e scrive voci di diario dall'intero sistema; si tratta essenzialmente di messaggi di avvio, messaggi dal kernel e da syslog o varie applicazioni e memorizza tutti i messaggi in una posizione centrale: file journal.
Puoi controllare il comportamento di journald tramite il suo file di configurazione predefinito: /etc/systemd/journald.conf che viene generato in fase di compilazione. Questo file contiene opzioni i cui valori possono essere modificati per adattarli ai requisiti dell'ambiente locale.
Di seguito è riportato un esempio di come appare il file, visualizzato utilizzando il comando cat.
cat /etc/systemd/journald.conf
See journald.conf(5) for details.
[Journal]
#Storage=auto
#Compress=yes
#Seal=yes
#SplitMode=uid
#SyncIntervalSec=5m
#RateLimitInterval=30s
#RateLimitBurst=1000
#SystemMaxUse=
#SystemKeepFree=
#SystemMaxFileSize=
#SystemMaxFiles=100
#RuntimeMaxUse=
#RuntimeKeepFree=
#RuntimeMaxFileSize=
#RuntimeMaxFiles=100
#MaxRetentionSec=
#MaxFileSec=1month
#ForwardToSyslog=yes
#ForwardToKMsg=no
#ForwardToConsole=no
#ForwardToWall=yes
#TTYPath=/dev/console
#MaxLevelStore=debug
#MaxLevelSyslog=debug
#MaxLevelKMsg=notice
#MaxLevelConsole=info
#MaxLevelWall=emerg
Tieni presente che varie installazioni di pacchetti ed estratti di configurazione di utilizzo in /usr/lib/systemd/*.conf.d/ e configurazioni di runtime possono essere trovate in /run/systemd/journald.conf. d/*.conf che potresti non necessariamente utilizzare.
Abilita l'archiviazione dei dati del journal su disco
Un certo numero di distribuzioni Linux, incluso Ubuntu e i suoi derivati come Linux Mint, non abilitano l'archiviazione persistente dei messaggi di avvio su disco per impostazione predefinita.
È possibile abilitare ciò impostando l'opzione “Archiviazione” su “persistente” come mostrato di seguito. Questo creerà la directory /var/log/journal e tutti i file journal verranno archiviati al suo interno.
sudo vi /etc/systemd/journald.conf
OR
sudo nano /etc/systemd/journald.conf
[Journal]
Storage=persistent
Per impostazioni aggiuntive, trova il significato di tutte le opzioni che dovrebbero essere configurate nella sezione "[Journal]" digitando.
man journald.conf
Impostazione dell'ora di sistema corretta utilizzando il comando Timedatectl
Per una gestione affidabile dei log in systemd utilizzando il servizio journald, assicurarsi che le impostazioni dell'ora, incluso il fuso orario, siano corrette sul sistema.
Per visualizzare le impostazioni attuali di data e ora sul tuo sistema, digita.
timedatectl
OR
timedatectl status
Local time: Thu 2017-06-15 13:29:09 EAT
Universal time: Thu 2017-06-15 10:29:09 UTC
RTC time: Thu 2017-06-15 10:29:09
Time zone: Africa/Kampala (EAT, +0300)
Network time on: yes
NTP synchronized: yes
RTC in local TZ: no
Per impostare il fuso orario corretto ed eventualmente l'ora del sistema, utilizzare i comandi seguenti.
sudo timedatectl set-timezone Africa/Kampala
sudo timedatectl set-time “13:50:00”
Visualizzazione dei messaggi di registro utilizzando il comando journalctl
journalctl è un'utilità utilizzata per visualizzare il contenuto del journal systemd (che è scritto dal servizio journald).
Per mostrare tutti i log raccolti senza alcun filtro, digitare.
journalctl
-- Logs begin at Wed 2017-06-14 21:56:43 EAT, end at Thu 2017-06-15 12:28:19 EAT
Jun 14 21:56:43 tecmint systemd-journald[336]: Runtime journal (/run/log/journal
Jun 14 21:56:43 tecmint kernel: Initializing cgroup subsys cpuset
Jun 14 21:56:43 tecmint kernel: Initializing cgroup subsys cpu
Jun 14 21:56:43 tecmint kernel: Initializing cgroup subsys cpuacct
Jun 14 21:56:43 tecmint kernel: Linux version 4.4.0-21-generic (buildd@lgw01-21)
Jun 14 21:56:43 tecmint kernel: Command line: BOOT_IMAGE=/boot/vmlinuz-4.4.0-21-
Jun 14 21:56:43 tecmint kernel: KERNEL supported cpus:
Jun 14 21:56:43 tecmint kernel: Intel GenuineIntel
Jun 14 21:56:43 tecmint kernel: AMD AuthenticAMD
Jun 14 21:56:43 tecmint kernel: Centaur CentaurHauls
Jun 14 21:56:43 tecmint kernel: x86/fpu: xstate_offset[2]: 576, xstate_sizes[2]
Jun 14 21:56:43 tecmint kernel: x86/fpu: Supporting XSAVE feature 0x01: 'x87 flo
Jun 14 21:56:43 tecmint kernel: x86/fpu: Supporting XSAVE feature 0x02: 'SSE reg
Jun 14 21:56:43 tecmint kernel: x86/fpu: Supporting XSAVE feature 0x04: 'AVX reg
Jun 14 21:56:43 tecmint kernel: x86/fpu: Enabled xstate features 0x7, context si
Jun 14 21:56:43 tecmint kernel: x86/fpu: Using 'eager' FPU context switches.
Jun 14 21:56:43 tecmint kernel: e820: BIOS-provided physical RAM map:
Jun 14 21:56:43 tecmint kernel: BIOS-e820: [mem 0x0000000000000000-0x00000000000
Jun 14 21:56:43 tecmint kernel: BIOS-e820: [mem 0x0000000000090000-0x00000000000
Jun 14 21:56:43 tecmint kernel: BIOS-e820: [mem 0x0000000000100000-0x000000001ff
Jun 14 21:56:43 tecmint kernel: BIOS-e820: [mem 0x0000000020000000-0x00000000201
Jun 14 21:56:43 tecmint kernel: BIOS-e820: [mem 0x0000000020200000-0x00000000400
Visualizza i messaggi di registro in base agli stivali
Puoi visualizzare un elenco di numeri di avvio (relativi all'avvio corrente), i loro ID e i timestamp del primo e dell'ultimo messaggio corrispondenti all'avvio con l'opzione --list-boots
.
journalctl --list-boots
-1 9fb590b48e1242f58c2579defdbbddc9 Thu 2017-06-15 16:43:36 EAT—Thu 2017-06-15 1
0 464ae35c6e264a4ca087949936be434a Thu 2017-06-15 16:47:36 EAT—Thu 2017-06-15 1
Per visualizzare le voci del journal dall'avvio corrente (numero 0), utilizzare l'opzione -b
in questo modo (uguale all'output di esempio sopra).
journalctl -b
e per vedere un diario dell'avvio precedente, utilizzare il puntatore relativo -1
con l'opzione -b
come di seguito.
journalctl -b -1
In alternativa, utilizzare l'ID di avvio in questo modo.
journalctl -b 9fb590b48e1242f58c2579defdbbddc9
Filtraggio dei messaggi di registro in base al tempo
Per utilizzare l'ora nel formato UTC (Coordinated Universal Time), aggiungi le opzioni --utc
come segue.
journalctl --utc
Per vedere tutte le voci a partire da una determinata data e ora, ad es. 15 giugno 2017 alle 8:15, digita questo comando.
journalctl --since "2017-06-15 08:15:00"
journalctl --since today
journalctl --since yesterday
Visualizzazione dei messaggi di registro recenti
Per visualizzare i messaggi di registro recenti (10 per impostazione predefinita), utilizzare il flag -n
come mostrato di seguito.
journalctl -n
journalctl -n 20
Visualizzazione dei messaggi di registro generati dal kernel
Per vedere solo i messaggi del kernel, in modo simile all'output del comando dmesg, puoi usare il flag -k
.
journalctl -k
journalctl -k -b
journalctl -k -b 9fb590b48e1242f58c2579defdbbddc9
Visualizzazione dei messaggi di registro generati dalle unità
Per visualizzare tutte le voci del diario per una particolare unità, utilizzare l'opzione -u
come segue.
journalctl -u apache2.service
Per azzerare l'avvio corrente, digitare questo comando.
journalctl -b -u apache2.service
Per mostrare i registri dell'avvio precedente, utilizzare this.
journalctl -b -1 -u apache2.service
Di seguito sono riportati alcuni altri comandi utili:
journalctl -u apache2.service
journalctl -u apache2.service --since today
journalctl -u apache2.service -u nagios.service --since yesterday
Visualizzazione dei messaggi di registro generati dai processi
Per visualizzare i log generati da un processo specifico, specifica il suo PID in questo modo.
journalctl _PID=19487
journalctl _PID=19487 --since today
journalctl _PID=19487 --since yesterday
Visualizzazione dei messaggi di registro generati dall'ID utente o gruppo
Per visualizzare i log generati da un utente o gruppo specifico, specifica il suo ID utente o gruppo in questo modo.
journalctl _UID=1000
journalctl _UID=1000 --since today
journalctl _UID=1000 -b -1 --since today
Visualizzazione dei registri generati da un file
Per mostrare tutti i log generati da un file (possibilmente un eseguibile), come l'eseguibile D-Bus o gli eseguibili bash, è sufficiente digitare.
journalctl /usr/bin/dbus-daemon
journalctl /usr/bin/bash
Visualizzazione dei messaggi di registro per priorità
Puoi anche filtrare l'output in base alle priorità dei messaggi o agli intervalli di priorità utilizzando il flag -p
. I valori possibili sono: 0 – emerg, 1 – alert, 2 – crit, 3 – err, 4 – warning, 5 – Notice, 6 – info, 7 – debug):
journalctl -p err
Per specificare un intervallo, utilizzare il formato seguente (da emergente ad avviso).
journalctl -p 1..4
OR
journalctl -p emerg..warning
Visualizza i messaggi di registro in tempo reale
Puoi praticamente osservare i log mentre vengono scritti con l'opzione -f
(simile alla funzionalità tail -f).
journalctl -f
Gestione della formattazione della visualizzazione del diario
Se vuoi controllare la formattazione dell'output delle voci del diario, aggiungi il flag -o
e usa queste opzioni: cat, export, json, json-pretty, json-sse, short, short-iso, breve-monotonico, breve-preciso e dettagliato (controlla il significato delle opzioni nella pagina man:
L'opzione cat mostra il messaggio effettivo di ciascuna voce del diario senza metadati (timestamp e così via).
journalctl -b -u apache2.service -o cat
Gestione dei giornali su un sistema
Per verificare la coerenza interna del file journal, utilizzare l'opzione --verify
. Se tutto va bene, l'output dovrebbe indicare un PASS.
journalctl --verify
PASS: /run/log/journal/2a5d5f96ef9147c0b35535562b32d0ff/system.journal
491f68: Unused data (entry_offset==0)
PASS: /run/log/journal/2a5d5f96ef9147c0b35535562b32d0ff/system@816533ecd00843c4a877a0a962e124f2-0000000000003184-000551f9866c3d4d.journal
PASS: /run/log/journal/2a5d5f96ef9147c0b35535562b32d0ff/system@816533ecd00843c4a877a0a962e124f2-0000000000001fc8-000551f5d8945a9e.journal
PASS: /run/log/journal/2a5d5f96ef9147c0b35535562b32d0ff/system@816533ecd00843c4a877a0a962e124f2-0000000000000d4f-000551f1becab02f.journal
PASS: /run/log/journal/2a5d5f96ef9147c0b35535562b32d0ff/system@816533ecd00843c4a877a0a962e124f2-0000000000000001-000551f01cfcedff.journal
Eliminazione dei vecchi file del diario
Puoi anche visualizzare l'utilizzo corrente del disco di tutti i file journal con le opzioni --disk-usage
. Mostra la somma dell'utilizzo del disco di tutti i file journal archiviati e attivi:
journalctl --disk-usage
Per eliminare i vecchi file journal (archiviati), eseguire i comandi seguenti:
sudo journalctl --vacuum-size=50M #delete files until the disk space they use falls below the specified size
sudo journalctl --vacuum-time=1years #delete files so that all journal files contain no data older than the specified timespan
sudo journalctl --vacuum-files=4 #delete files so that no more than the specified number of separate journal files remain in storage location
Rotazione dei file del diario
Ultimo ma non meno importante, puoi istruire journald a ruotare i file journal con l'opzione --rotate
. Tieni presente che questa direttiva non ritorna fino al termine dell'operazione di rotazione:
sudo journalctl --rotate
Per una guida all'uso e opzioni approfondite, visualizzare la pagina man journalctl come segue.
man journalctl
Dai un'occhiata ad alcuni articoli utili.
- Gestione del processo e dei servizi di avvio del sistema (SysVinit, Systemd e Upstart)
- Petiti: uno strumento di analisi dei log open source per amministratori di sistema Linux
- Come impostare e gestire la rotazione dei registri utilizzando Logrotate in Linux
- lnav: guarda e analizza i registri Apache da un terminale Linux
Per ora è tutto. Utilizza il feedback qui sotto per porre domande o aggiungere i tuoi pensieri su questo argomento.