292 lines
8.5 KiB
Markdown
292 lines
8.5 KiB
Markdown
# Journalctl
|
|
|
|
Per molti anni i log sono stati gestiti da un'utilità chiamata syslogd. La maggior parte dei sistemi operativi basati su GNU/Linux è passata a systemd,
|
|
che usa **journalctl** per gestire i log di sistema.
|
|
|
|
## Leggere i log
|
|
|
|
Solo gli utenti che appartengono ai gruppi `adm` o `systemd-journal` possono leggere i log di sistema.
|
|
|
|
Digitare il seguente comando:
|
|
|
|
```bash
|
|
groups
|
|
```
|
|
|
|
Se non viene visualizzato "adm" oppure "systemd-journal" nell'output, aggiungere l'utente al gruppo col comando:
|
|
|
|
```bash
|
|
sudo adduser $USER adm
|
|
```
|
|
Sarà necessario riavviare la sessione affinché questa modifica abbia effetto.
|
|
|
|
## Journald
|
|
|
|
journald è un demone che raccoglie e scrive tutti i log del sistema nel file journal.
|
|
|
|
Il suo file di configurazione predefinito si trova in: `/etc/systemd/journald.conf`. Eccone un esempio:
|
|
|
|
```bash
|
|
# 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
|
|
```
|
|
|
|
Un certo numero di distribuzioni non consentono l'archiviazione permanente dei log sul disco per impostazione predefinita.
|
|
|
|
È possibile abilitare questa opzione impostando "Storage" su "persistent" come mostrato di seguito. Questo creerà la directory `/var/log/journal` e tutti i file journal saranno memorizzati
|
|
al suo interno.
|
|
|
|
```bash
|
|
sudo vim /etc/systemd/journald.conf
|
|
|
|
[Journal]
|
|
Storage=persistent
|
|
```
|
|
## Journalctl
|
|
|
|
journalctl è l'utilità che permette di visualizzare il contenuto scritto dal servizio journald, all interno della directory `/var/log/journal`.
|
|
|
|
- Per mostrare tutti i messaggi di log raccolti:
|
|
|
|
```bash
|
|
journalctl -r
|
|
```
|
|
- È possibile visualizzare un codice per ogni avvio, i relativi ID e i timestamp col comando:
|
|
|
|
```bash
|
|
journalctl --list-boots
|
|
IDX BOOT ID FIRST ENTRY LAST ENTRY
|
|
-58 9899ae7a3234496caead003883e62736 Sun 2023-01-29 15:50:01 CET Sun 2023-01-29 16:29:44 CET
|
|
-57 3f9349712f9f4048a58323ceb5bee7a6 Sun 2023-01-29 16:31:45 CET Sun 2023-01-29 16:56:00 CET
|
|
-56 94b990994f0c4e9286f7a1882e1191e7 Sun 2023-01-29 16:57:49 CET Sun 2023-01-29 18:46:05 CET
|
|
-55 f3c06acc6f1c45fd8b0843c57c77ef0c Sun 2023-01-29 18:48:10 CET Sun 2023-01-29 19:13:58 CET
|
|
-54 118bfa08b2014bcf9b6768b74e2a1420 Sun 2023-01-29 19:15:25 CET Sun 2023-01-29 19:39:30 CET
|
|
-53 5a4ab4de4e0f4f4cb3e48c362a6f2114 Sun 2023-01-29 19:41:05 CET Sun 2023-01-29 20:43:06 CET
|
|
-52 8a2db867772a4fd980847f22ba414bfa Sun 2023-01-29 22:12:56 CET Sun 2023-01-29 23:19:13 CET
|
|
-51 46bcde99b8da4547b68737e768244c69 Mon 2023-01-30 20:48:18 CET Mon 2023-01-30 23:28:00 CET
|
|
-50 bec4f26fec024306bfc42ca6a0016da6 Tue 2023-01-31 21:40:48 CET Tue 2023-01-31 23:00:23 CET
|
|
-49 578137da3a374630819e9305b2891fad Thu 2023-02-02 20:36:17 CET Thu 2023-02-02 21:00:25 CET
|
|
-48 52e20d014d0b45a9b541da4ac98f2b39 Thu 2023-02-02 21:01:46 CET Thu 2023-02-02 22:01:58 CET
|
|
```
|
|
|
|
- Per visualizzare le voci dell'avvio corrente (numero 0), utilizzare l'opzione -b:
|
|
|
|
```bash
|
|
journalctl -b
|
|
```
|
|
e per vedere un boot precedente, usare l'ID relativo con l'opzione -b:
|
|
|
|
```bash
|
|
journalctl -b -1
|
|
```
|
|
In alternativa, utilizzare l'ID di avvio:
|
|
|
|
```bash
|
|
journalctl -b 9fb590b48e1242f58c2579defdbbddc9
|
|
```
|
|
|
|
- Per vedere tutte le voci da una data e un'ora particolari, ad es. 15 giugno 2017 alle 8:15, digitare questo comando:
|
|
|
|
```bash
|
|
journalctl --since "2017-06-15 08:15:00"
|
|
journalctl --since today
|
|
journalctl --since yesterday
|
|
```
|
|
|
|
- Per visualizzare gli ultimi n messaggi (10 per impostazione predefinita), utilizzare il flag -n:
|
|
|
|
```bash
|
|
journalctl -n
|
|
journalctl -n 20
|
|
```
|
|
- Per vedere solo i messaggi del kernel, simile all'output del comando dmesg, usare il flag -k:
|
|
|
|
```bash
|
|
journalctl -k
|
|
journalctl -k -b
|
|
journalctl -k -b 9fb590b48e1242f58c2579defdbbddc9
|
|
```
|
|
- Per visualizzare tutte le voci di una determinata unità, utilizzare l'opzione -u come segue.
|
|
|
|
```bash
|
|
journalctl -u apache2.service
|
|
```
|
|
|
|
- Per mostrare i log dal precedente avvio:
|
|
|
|
```bash
|
|
journalctl -b -1 -u apache2.service
|
|
journalctl -u apache2.service --since today
|
|
```
|
|
|
|
- Per visualizzare i registri generati da un utente o gruppo particolare, specificare l'ID:
|
|
|
|
```bash
|
|
journalctl _UID=1000
|
|
journalctl _UID=1000 --since today
|
|
journalctl _UID=1000 -b -1 --since today
|
|
```
|
|
|
|
- Per mostrare tutti i log generati da un file eseguibile:
|
|
|
|
```bash
|
|
journalctl /usr/bin/bash
|
|
```
|
|
|
|
- È inoltre possibile filtrare l'output in base alle priorità dei messaggi utilizzando il flag -p.
|
|
|
|
```bash
|
|
journalctl -p err
|
|
|
|
journalctl -p 3 -xe
|
|
```
|
|
dove l'opzione `-x` indica *show-priority*. Con questa opzione abilitata, il comando journalctl mostra anche il livello di priorità dei messaggi di log insieme al loro contenuto.
|
|
I messaggi possono essere contrassegnati con diverse priorità, come emergenza, avviso, errore, avviso, informazione, ecc.
|
|
|
|
L'opzione `-e` indica *pager-end*. Con questa opzione abilitata, il comando journalctl visualizza l'output dell'ultimo messaggio di log e posiziona il cursore all'ultima riga,
|
|
consentendo di scorrere rapidamente fino all'ultimo messaggio di log senza dover scorrere l'intero registro.
|
|
|
|
| Priority | Code |
|
|
|----------|---------|
|
|
| 0 | emerg |
|
|
| 1 | alert |
|
|
| 2 | crit |
|
|
| 3 | err |
|
|
| 4 | warning |
|
|
| 5 | notice |
|
|
| 6 | info |
|
|
| 7 | debug |
|
|
|
|
È possibile vedere i log in un range di gravità:
|
|
|
|
```bash
|
|
journalctl -p 4..6 -b0
|
|
```
|
|
|
|
- È possibile vedere i log mentre vengono scritti con l'opzione -f (simile alla funzionalità tail -f ):
|
|
|
|
```bash
|
|
journalctl -f
|
|
```
|
|
|
|
## Pulizia dei log
|
|
|
|
I file di log si trovano in `/var/log/journal/`
|
|
|
|
```bash
|
|
journalctl --disk-usage
|
|
```
|
|
Per ruotare i file di log, digitare il comando:
|
|
|
|
```bash
|
|
journalctl --rotate
|
|
```
|
|
|
|
### Cancellare i log più vecchi di...
|
|
|
|
```bash
|
|
journalctl --vacuum-time=2d
|
|
```
|
|
### Limitare la dimensione dei log
|
|
|
|
```bash
|
|
journalctl --vacuum-size=100M
|
|
```
|
|
|
|
## Limitare il numero dei file di log
|
|
|
|
```bash
|
|
journalctl --vacuum-files=5
|
|
```
|
|
|
|
### Cancellazione automatica dei vecchi file di log
|
|
|
|
È possibile configurare systemd per gestire automaticamente i vecchi file di log.
|
|
|
|
Il file di configurazione si trova in `/etc/systemd/journald.conf`.
|
|
|
|
```bash
|
|
│ File: /etc/systemd/journald.conf
|
|
──────┼────────────────────────────────────────────────────────────────────────────────────────────────────────────
|
|
1 │ [Journal]
|
|
2 │ #Storage=auto
|
|
3 │ #Compress=yes
|
|
4 │ #Seal=yes
|
|
5 │ #SplitMode=uid
|
|
6 │ #SyncIntervalSec=5m
|
|
7 │ #RateLimitIntervalSec=30s
|
|
8 │ #RateLimitBurst=10000
|
|
9 │ #SystemMaxUse=
|
|
10 │ #SystemKeepFree=
|
|
11 │ #SystemMaxFileSize=
|
|
12 │ #SystemMaxFiles=100
|
|
13 │ #RuntimeMaxUse=
|
|
14 │ #RuntimeKeepFree=
|
|
15 │ #RuntimeMaxFileSize=
|
|
16 │ #RuntimeMaxFiles=100
|
|
17 │ #MaxRetentionSec=
|
|
18 │ #MaxFileSec=1month
|
|
19 │ #ForwardToSyslog=no
|
|
20 │ #ForwardToKMsg=no
|
|
21 │ #ForwardToConsole=no
|
|
22 │ #ForwardToWall=yes
|
|
23 │ #TTYPath=/dev/console
|
|
24 │ #MaxLevelStore=debug
|
|
25 │ #MaxLevelSyslog=debug
|
|
26 │ #MaxLevelKMsg=notice
|
|
27 │ #MaxLevelConsole=info
|
|
28 │ #MaxLevelWall=emerg
|
|
29 │ #LineMax=48K
|
|
30 │ #ReadKMsg=yes
|
|
31 │ #Audit=yes
|
|
```
|
|
|
|
Ecco alcuni utili parametri:
|
|
|
|
| Setting | Description |
|
|
| --- | --- |
|
|
| SystemMaxUse | Max disk space logs can take |
|
|
| SystemMaxFileSize | Max size of an INDIVIDUAL log file |
|
|
| SystemMaxFiles | Max number of log files |
|
|
|
|
Una volta modificato il file, riavviare il servizio:
|
|
|
|
```bash
|
|
systemctl restart systemd-journald
|
|
```
|
|
|
|
## Collegamenti
|
|
|
|
- [https://codepre.com/it/guia-para-principiantes-para-analizar-registros-en-linux-con-el-comando-journalctl.html](https://codepre.com/it/guia-para-principiantes-para-analizar-registros-en-linux-con-el-comando-journalctl.html)
|
|
- [https://it.linux-console.net/?p=632#gsc.tab=0](https://it.linux-console.net/?p=632#gsc.tab=0)
|
|
- [https://linuxhandbook.com/journalctl-command/](https://linuxhandbook.com/journalctl-command/)
|
|
- [https://linuxhandbook.com/clear-systemd-journal-logs/](https://linuxhandbook.com/clear-systemd-journal-logs/)
|