LINUX

Come utilizzare il comando Systemd journalctl per gestire i log

Nonostante la pubblicità negativa, systemd ha apportato nuove fantastiche funzionalità al sistema operativo Linux. L’accesso è uno di questi. Nei giorni precedenti a systemd, il controllo dei log e dei problemi di debug a volte era una seccatura perché i log di diversi programmi erano distribuiti in file diversi e dovevi controllare i timestamp in ciascuno di essi. Ovviamente c’era anche il file syslog, ma a volte non era così prolisso come doveva essere. Systemd ci offre il demone journal chiamato journald che consente la gestione centralizzata del journal. Questi registri possono essere filtrati e manipolati dall’utilità chiamata journalctl. In questo articolo esamineremo l’utilizzo di base delle utilità.

Cos’è journal

Journald è un servizio che raccoglie e archivia i log da più fonti e crea file di log strutturati indicizzati facili da interpretare. Alcune delle fonti utilizzate da journald

  • Messaggi di registro del kernel, tramite kmsg
  • Semplici messaggi di syslog, tramite libc syslog chiamata
  • Messaggi syslog strutturati tramite l’API Journal nativa
  • Standard output e standard error dei servizi di sistema

L’idea è di centralizzare tutti i messaggi di registro, indipendentemente dall’applicazione da cui provengono.

Impostazione dell’ora

Affinché i registri siano utili, è necessario disporre dell’ora di sistema corretta. I registri possono essere UTC o ora locale. In genere, vengono salvati entrambi i timestamp. Quindi impostiamo prima il fuso orario

sudo timedatectl set-timezone Europe/Belgrade

Questo comando imposta l’ora sul fuso orario dell’Europa centrale, ma se ti trovi in ​​qualsiasi altra parte del globo, inserisci continente e premi tab per vedere le città tra cui puoi scegliere. Non importa se non è la tua città, non vivo nemmeno a Belgrado, è solo la grande città più vicina. Successivamente, vediamo lo stato del fuso orario

miki@ThinkPad-X220T:~$ timedatectl status
Local time: Mon 2016-11-14 18:40:46 CET
Universal time: Mon 2016-11-14 17:40:46 UTC
RTC time: Mon 2016-11-14 17:40:46
Time zone: Europe/Belgrade (CET, +0100)
Network time on: yes
NTP synchronized: yes
RTC in local TZ: no

1) Visualizza i registri

Ora che abbiamo l’ora corretta, continuiamo a guardare i log. Il comando di base per la visualizzazione dei registri è

journalctl

Otterrai risultati simili a questo:

-- Logs begin at Sun 2016-11-13 17:38:07 CET, end at Mon 2016-11-14 18:42:51 CET

Nov 13 17:38:07 ThinkPad-X220T systemd-journald[344]: Runtime journal (/run/log/
Nov 13 17:38:07 ThinkPad-X220T kernel: microcode: microcode updated early to rev

Questa è la prima riga, seguita da molte righe. Vediamo che i registri iniziano dall’ultimo avvio del sistema. Ieri ho riavviato il computer l’ultima volta. Per impostazione predefinita, journald non salva i log al riavvio, in quanto ciò farebbe aumentare le dimensioni dei file di log nel tempo. Il registro è simile a syslog, ma ha molte più fonti. Ho detto che vengono salvati sia i timestamp UTC che quelli locali, quindi puoi vedere gli stessi registri con timestamp UTC.

journalctl --utc

Sì, lo so che i tronchi sono enormi. Ho detto che i registri saranno di nuovo fantastici! Ma sono troppo interessanti, quindi il registro ha una funzione di filtraggio del registro ordinata.

Se vuoi vedere i log da un certo punto fino ad ora, devi usare un comando formattato in questo modo:

miki@ThinkPad-X220T:~$ journalctl --since "2016-11-14 19:15:00"
-- Logs begin at Sun 2016-11-13 17:38:07 CET, end at Mon 2016-11-14 20:07:51 CET
Nov 14 19:17:01 ThinkPad-X220T CRON[6044]: pam_unix(cron:session): session opene
Nov 14 19:17:01 ThinkPad-X220T CRON[6049]: (root) CMD ( cd / && run-parts --re
Nov 14 19:17:01 ThinkPad-X220T CRON[6044]: pam_unix(cron:session): session close
Nov 14 19:22:51 ThinkPad-X220T nm-applet[4929]: ModemManager is not available fo

...

2) Filtrare i log in base al tempo

Questo è ancora troppo grande, quindi possiamo rimpicciolirli aggiungendo un altro operando dopo –since e questo sarà –until

miki@ThinkPad-X220T:~$ journalctl --since "2016-11-14 19:00:00" --until "2016-11-14 19:05:00"
-- Logs begin at Sun 2016-11-13 17:38:07 CET, end at Mon 2016-11-14 20:21:23 CET
Nov 14 19:01:16 ThinkPad-X220T nm-applet[4929]: ModemManager is not available fo
Nov 14 19:02:51 ThinkPad-X220T nm-applet[4929]: ModemManager is not available fo

In quei cinque minuti, ci sono stati solo due massaggi ai tronchi.

I flag since e until accettano timestamp nel formato AAAA-MM-GG HH:MM:SS, ma questo non è l’unico modo. Se, ad esempio, un utente si lamenta che il tuo server è rimasto inattivo negli ultimi 5 minuti, puoi rivedere i log in questo modo:

journalctl --since "5 minutes ago"
-- Logs begin at Sun 2016-11-13 17:38:07 CET, end at Mon 2016-11-14 20:22:21 CET
Nov 14 20:21:21 ThinkPad-X220T gnome-terminal-[7867]: Allocating size to GtkBox
Nov 14 20:21:21 ThinkPad-X220T gnome-terminal-[7867]: Allocating size to GtkBox
Nov 14 20:21:23 ThinkPad-X220T gnome-terminal-[7867]: Allocating size to GtkBox
Nov 14 20:22:20 ThinkPad-X220T apport-gtk[5977]: gdk_pixbuf_composite: assertion
Nov 14 20:22:21 ThinkPad-X220T systemd[3634]: Started Notification regarding a c

Comprende anche parole come ieri o oggi, quindi puoi cercare i registri di ieri o di oggi.

3) Configurazione dell’accesso ai riavvii

Tutto ciò è più utile se si dispone di registri persistenti durante i riavvii. Se si desidera che i registri rimangano dopo l’avvio, è necessario abilitarlo manualmente. Per prima cosa crea la directory in cui verrà registrato

sudo mkdir -p /var/log/journal

Quindi modificare il file di configurazione per registrarsi in modo permanente.

sudo sed -i.orig 's/#Storage=auto/Storage=persistent/g' /etc/systemd/journald.conf

Successivamente, puoi riavviare la macchina e verificare se i caricamenti si estendono tra i riavvii con il seguente comando:

miki@ThinkPad-X220T:~$ journalctl --list-boots
-1 7917f2c3498d4de89e94701ca8049245 Mon 2016-11-14 20:47:49 CET—Mon 2016-11-14 2
0 438c0a9258aa47fcbf88daf91106aaa3 Mon 2016-11-14 20:56:55 CET—Mon 2016-11-14 2
elenco di avvio

Ho riavviato il computer due volte ed entrambi gli stivali sono registrati. Pensavo che il caricamento precedente sarebbe stato salvato, ma non lo era. Pertanto, verranno registrati solo i riavvii eseguiti dopo aver impostato i registri persistenti.

4) Gestione dei registri da diversi stivali

Se ora vuoi vedere i log solo da questo avvio, usa il comando

journalctl -b

È possibile utilizzare il numero di avvio per scegliere un avvio specifico

journalctl -b -1

Oppure potresti usare l’ID di avvio

journalctl -b 7917f2c3498d4de89e94701ca8049245

Funzionerà anche il filtraggio basato sul tempo

journalctl -b 0 --since "15 minutes ago"

5) Filtraggio per servizio e id

Diciamo che vuoi vedere i registri per un solo programma. Cercherò i registri fprintd

journalctl -u fprintd.service
-- Logs begin at Mon 2016-11-14 20:47:49 CET, end at Mon 2016-11-14 21:28:03 CET
Nov 14 20:48:32 ThinkPad-X220T systemd[1]: Starting Fingerprint Authentication D
Nov 14 20:48:32 ThinkPad-X220T systemd[1]: Started Fingerprint Authentication Da
Nov 14 20:48:32 ThinkPad-X220T fprintd[3413]: user 'miki' claiming the device: 0
Nov 14 20:48:32 ThinkPad-X220T fprintd[3413]: now monitoring fd 15
Nov 14 20:48:32 ThinkPad-X220T fprintd[3413]: device 0 claim status 0
Nov 14 20:48:33 ThinkPad-X220T fprintd[3413]: no longer monitoring fd 15
Nov 14 20:48:33 ThinkPad-X220T fprintd[3413]: released device 0
-- Reboot --

Puoi anche filtrare i log in base all’UID. Per prima cosa devi ottenere il tuo UID utente

miki@ThinkPad-X220T:~$ id -u miki
1000

E poi puoi usare quell’uid per filtrare i log

journalctl _UID=1000 --since "25 minutes ago"

Puoi anche filtrare per GID

miki@ThinkPad-X220T:~$ journalctl -F _GID
30
102
130
1000
114
118
104
126
109
0

Ora puoi filtrare in base a uno qualsiasi di questi GID

journalctl _GID=114

Filtra i log in base al percorso dell’eseguibile:

journalctl /usr/bin/sudo

Visualizza i log in tempo reale

journalctl -f

Se desideri che i tuoi registri vengano visualizzati nel testo del piano per un facile copia e incolla, puoi utilizzare l’opzione “nessuna impaginazione”

journalctl --no-pager

6) Visualizza i messaggi del kernel ed elimina i vecchi log

Journalctl può anche visualizzare i messaggi del kernel. Per impostazione predefinita, verrà visualizzato dall’avvio corrente

journalctl -k

Se vuoi i messaggi del kernel dall’avvio precedente, usa il flag -b -1.

journalctl -k -b -1

Per verificare quanto spazio su disco utilizzano i tuoi log, puoi utilizzare questo comando

journalctl --disk-usage
Archived and active journals take up 24.0M on disk.

Se i tuoi tronchi sono cresciuti di dimensioni, puoi usare un aspirapolvere per rimuovere quelli più vecchi. Beh, non proprio un aspirapolvere, ma il comando si chiama aspirapolvere.

sudo journalctl --vacuum-size=16M

Ciò ridurrà la dimensione del registro a 16 MB.

Conclusione

Ho esaminato i comandi journald di base che rendono di nuovo eccezionale la registrazione. Questo ti aiuterà molto la prossima volta che dovrai risolvere un problema persistente con il tuo server Linux o computer desktop con systemd. Systemd ci offre ottimi strumenti e la pubblicità negativa che ha ricevuto all’inizio è stata solo una reazione contro la modifica dei vecchi strumenti che anche le persone usavano. Sono già abituato a systemd e non so come ho vissuto senza di esso. Questo è tutto per questo articolo, grazie per aver letto e buona giornata.

Related Articles

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Back to top button
Close