Sur Linux, les journaux (logs) sont une partie importante du système car elles vous permet d’audit, surveiller le système.
On peut aussi les utiliser pour dépanner le système ou un service qui ne fonctionne pas correctement.
Linux créé par défaut beaucoup de journaux (syslog, messages, auth, daemon, …) dans le répertoire /var/log.
Cette journalisation centralisée s’effectue à travers SystemD qui recueille et stocke des données de journalisation des noyaux, des messages de journal système, une sortie standard et une erreur pour les divers services.
Plus particulièrement, c’est le daemon journald qui gère les sources des journaux pour une sortie format syslog, JSON, …
Enfin la commande journalctl permet à l’administrateur d’interroger et consulter les journaux.
Elle permet aussi de manipuler les journaux, comme par exemple vider les journaux.
journalctl est donc important à connaître pour le débogage du système.
Dans ce tutoriel, je vous explique comment utiliser la commande journalctl afin de voir et manipuler les journaux Systemd.

Table des matières
- 1 Comment utiliser journalctl pour voir et manipuler les journaux Systemd
- 1.1 Comment consulter les journaux Linux avec journalctl
- 1.2 Afficher les journaux en inversé
- 1.3 Lire le journal de démarrage du système linux
- 1.4 Filtrer les journaux sur le temps
- 1.5 Afficher les entrées dont le MESSAGE correspond à un PATTERN
- 1.6 Afficher les journaux d’un daemon
- 1.7 Filtrer les journaux sur un utilisateur
- 1.8 Visualiser les journaux du noyau Linux
- 1.9 Afficher les erreurs dans les journaux
- 1.10 Afficher les journaux d’un service/daemon en particulier
- 1.11 Utiliser l’option tail avec journalctl
- 1.12 Changer le format de sortie
- 1.13 Visualiser l’espace disque utilisé par les journaux
- 1.14 Fixer la taille et le nombre de journaux
- 2 Liens
Comment utiliser journalctl pour voir et manipuler les journaux Systemd
Comment consulter les journaux Linux avec journalctl
Enfin de commencer, il est judicieux de comprendre ce qu’est SystemD en suivant ce tutoriel :
La commande par défaut affiche tous les journaux.
Bien entendu, on peut appliquer toutes sortes d’options pour filtrer les journaux sur une date, un service en particulier.
journalctl
Cela va retourner beaucoup de lignes.
JournalCtl utilise la commande less pour vous montrer les journaux.
Ce qui signifie que vous pouvez utiliser les mêmes raccourcis clavier pour vous déplacer dans les journaux que vous le faites avec la commande less.
Si vous ne voulez pas que les journaux soient affichés avec less, utilisez l’option –no-pager :
journalctl --no-pager
Cela permet notamment d’utiliser la commande grep pour filtrer.
Afficher les journaux en inversé
Comme vous l’avez remarqué, les journaux sont montrés dans l’ordre chronologique. Cela signifie que les journaux stockés les plus anciens sont affichés en premier.
Si vous souhaitez d’abord voir les journaux récents, vous pouvez afficher les journaux de journal dans l’ordre inverse avec l’option -r:
journalctl -r
Lire le journal de démarrage du système linux
Pour afficher les journaux du dernier démarrage de Linux (boot) :
journalctl -b
Pour afficher la liste des journaux de démarrages disponibles :
journalctl --list-boots
Cela retourne la liste des journaux disponible avec un identifiant :
-2 ezsdfzeerg8fds9qger4ger8ede9ver Sun 2021-08-08 22:12:23 UTC—Mon 2021-08-08 22:12:23 UTC
-1 e5f4ds5ferhtrh4tyj5trez6ezfer8d Mon 2021-08-09 11:22:13 UTC—Mon 2021-08-09 11:22:13 UTC
0 cf61e3c7347b41308468e0431ee77ade Mon 2021-08-09 16:39:41 UTC—Mon 2021-08-09 16:42:27 UTC
Pour voir les journaux du démarrage précédent de Linux, on utilise l’option -b=-X.
Réduisez le chiffre pour remontrer aux journaux des boots précédents selon les disponibilités.
Par exemple :
journalctl -b=-1
Notez que l’on peut aussi afficher les logs du démarrage de Linux via l’identifiant :
journalctl -b e5f4ds5ferhtrh4tyj5trez6ezfer8d
Filtrer les journaux sur le temps
Mais on peut aussi remonter dans les logs précédents pour un service en particulier grâce à l’option -S (Since).
Par exemple, vous pouvez visualiser les journaux du jour, de la veille, 1h ou deux jours avant.
journalctl -S today
journalctl -S yesterday
journalctl --since "5 minutes ago"
journalctl --since "25 minutes ago"
journalctl -S "1 hour ago"
journalctl -S "2 days ago"
Enfin vous pouvez spécifier un intervalle de date avec l’option -S (since) et -U (until).
journalctl -S "2020-01-16 18:00:00" -U "2020-01-17 23:00:00"
Notez que l’on peut aussi utiliser les options avec le nom complet, par exemple :
journalctl --since=yesterday --until=now
Afficher les entrées dont le MESSAGE correspond à un PATTERN
Vous pouvez utiliser l’option -g si vous souhaitez afficher les journaux avec un mot en particulier.
Par exemple, ci-dessous, je souhaite afficher que les journaux correspondant au mot nvidia :
journalctl -b -g nvidia
Afficher les journaux d’un daemon
Vous pouvez filtrer les journaux pour n’afficher que les logs d’un daemon et service spécifique.
Par exemple, pour ne voir que les journaux du service ssd avec l’option -u (pour unit) :
journalctl -u ssh
Ou encore pour afficher les journaux de nginx :
journalctl -u nginx
Au besoin pour lister les units :
systemctl list-dependencies
Bien entendu, on peut combiner avec les options précédentes :
sudo journalctl -u ssh --since=yesterday
sudo journalctl -u ssh -b0
On peut aussi filtrer les logs par GID.
Pour afficher les GID :
journalctl -F _GID
1000
65534
0
115
112
Puis on utilise l’option _GID pour filtrer sur ce dernier.
journalctl _GID=115
-- Logs begin at Mon 2021-08-09 16:39:41 UTC, end at Tue 2021-08-10 07:31:56 UTC. --
Aug 09 16:39:55 ns320684 mysqld[622]: 2021-08-09 16:39:55 0 [Note] /usr/sbin/mysqld (mysqld 10.3.29-MariaDB-0+deb10u1) starting as process 622 ...
Filtrer les journaux sur un exécutable :
journalctl /usr/bin/sudo
-- Logs begin at Mon 2021-08-09 16:39:41 UTC, end at Tue 2021-08-10 07:32:40 UTC. --
Aug 09 16:42:27 ns320684 sudo[1074]: debian : TTY=pts/0 ; PWD=/home/debian ; USER=root ; COMMAND=/usr/bin/journalctl --list-boots
Aug 09 16:42:27 ns320684 sudo[1074]: pam_unix(sudo:session): session opened for user root by debian(uid=0)
Aug 09 16:42:27 ns320684 sudo[1074]: pam_unix(sudo:session): session closed for user root
Aug 10 07:16:52 ns320684 sudo[19215]: debian : TTY=pts/0 ; PWD=/home/debian ; USER=root ; COMMAND=/usr/bin/journalctl --vacuum-time=2d
Aug 10 07:16:52 ns320684 sudo[19215]: pam_unix(sudo:session): session opened for user root by debian(uid=0)
Aug 10 07:16:52 ns320684 sudo[19215]: pam_unix(sudo:session): session closed for user root
Aug 10 07:16:57 ns320684 sudo[19218]: debian : TTY=pts/0 ; PWD=/home/debian ; USER=root ; COMMAND=/usr/bin/journalctl --vacuum-time=1d
Aug 10 07:16:57 ns320684 sudo[19218]: pam_unix(sudo:session): session opened for user root by debian(uid=0)
Aug 10 07:16:57 ns320684 sudo[19218]: pam_unix(sudo:session): session closed for user root
Filtrer les journaux sur un utilisateur
On récupérer l’ID de l’utilisateur avec la commande id :
debian@linux:~$ id -u debian
1000
Puis pour filtrer les journaux sur un utilisateur sur les 25 dernières minutes :
debian@linux:~$ journalctl _UID=1000 --since "25 minutes ago"
-- Logs begin at Mon 2021-08-09 16:39:41 UTC, end at Tue 2021-08-10 07:33:29 UTC. --
Aug 10 07:11:58 ns320684 systemd[19113]: Listening on GnuPG cryptographic agent and passphrase cache (restricted).
Aug 10 07:11:58 ns320684 systemd[19113]: Listening on GnuPG cryptographic agent (ssh-agent emulation).
Aug 10 07:11:58 ns320684 systemd[19113]: Listening on GnuPG cryptographic agent and passphrase cache (access for web browsers).
Aug 10 07:11:58 ns320684 systemd[19113]: Reached target Timers.
Aug 10 07:11:58 ns320684 systemd[19113]: Listening on GnuPG cryptographic agent and passphrase cache.
Aug 10 07:11:58 ns320684 systemd[19113]: Listening on GnuPG network certificate management daemon.
Aug 10 07:11:58 ns320684 systemd[19113]: Reached target Sockets.
Aug 10 07:11:58 ns320684 systemd[19113]: Reached target Paths.
Aug 10 07:11:58 ns320684 systemd[19113]: Reached target Basic System.
Aug 10 07:11:58 ns320684 systemd[19113]: Reached target Default.
Aug 10 07:11:58 ns320684 systemd[19113]: Startup finished in 28ms.
Visualiser les journaux du noyau Linux
Pour afficher les journaux du noyaux Linux (kernel), équivaut à la commande dmesg :
journalctl -k
Afficher les erreurs dans les journaux
Afficher les erreurs dans les journaux où -p 3 signifie priorité ERR, -X fournit des informations de message supplémentaires et -b signifie depuis le dernier démarrage.
journalctl -p 3 -xb
Il s’agit en fait de filtrer sur les niveaux de priorité :
Priorité | Code |
---|---|
0 | emerg |
1 | alert |
2 | crit |
3 | err |
4 | warning |
5 | notice |
6 | info |
7 | debug |
L’option -p prenant les intervalles de priorité, par exemple pour avoir les alertes, critiques, erreur et warning :
journalctl -p 1..3
Afficher les journaux d’un service/daemon en particulier
Pour afficher les erreurs des journaux pour un service en particulier, utilisez l’option -u :
journalctl -u sshd.service
Filtrer sur un service avec l’option –no-pager et en récupérant les erreurs :
journalctl -u docker.service --no-pager | grep -i error
Utiliser l’option tail avec journalctl
Afficher les 100 lignes de Systemd Logs pour un service particulier (Equiv. Tail-N 100):
sudo journalctl -u nginx -n 100 --no-pager
Suivez les journaux SystemD pour le service (Equiv. Tail -F).
Les nouvelles lignes du journal pour le service vont alors s’afficher au fur et à mesure.
sudo journalctl -u nginx -f
Pour afficher les derniers journaux :
journalctl -xe
Changer le format de sortie
L’option -o permet de modifier le format de sortie.
Par exemple pour afficher les journaux au format JSON :
journalctl -b -u nginx -o json
Journalctl gère plusieurs format dont :
- cat : texte plein
- export : un format binaire adapté au transfert ou à la sauvegarde de données.
- json : en JSON
- json-pretty : JSON formaté pour une meilleure lisibilité par l’homme
- json-sse : résultat formaté sous JSON enveloppé pour que l’événement add server-sen soit compatible
- short : la sortie de style syslog par défaut
- short-iso : affiche les horodatages d’horloge murale ISO 8601
- short-monotonic : le format par défaut avec des horodatages monotones.
- short-precise : le format par défaut avec précision à la microseconde près
- verbose : affiche chaque champ de journal disponible pour l’entrée, y compris ceux généralement cachés en interne.
Visualiser l’espace disque utilisé par les journaux
journalctl --disk-usage
Fixer la taille et le nombre de journaux
Vous pouvez limiter le nombre de fichiers journaux d’archive. Disons que vous voulez avoir seulement cinq fichiers journaux.
Il supprimera les fichiers journaux d’archive les plus âgés ne laissant que le nombre spécifié de fichiers journaux.
journalctl --vacuum-files=5
Une autre façon est de limiter la taille du journal. Avec cela, il supprimera les fichiers journaux de journal jusqu’à ce que l’espace disque pris par les journaux de journal tombe en dessous de la taille que vous avez spécifiée.
sudo journalctl --vacuum-size=100M
Liens
- Quels sont les journaux Linux de /var/log/ et comment les lire
- Comment utiliser journalctl pour voir et lire les journaux Linux Systemd
- rsyslog et logrotate : gérer les logs et journaux linux
- Comment utiliser la commande dmesg sur Linux
- Comment lire les logs sur Linux en temps réel avec tail, multitail
- Daemon et Service linux : Configuration et fonctionnement
- Systemd : Configuration et fonctionnement des services Linux (daemon)
- Comment fonctionnement les services init.d Linux
- Comment créer un service Linux (systemd)
- Systemctl Linux : utilisation et exemples
- Comment démarrer, arrêter, redémarrer un service sur Linux
- Comment utiliser journalctl pour voir les journaux Linux dans systemd
- Quels sont les journaux Linux de /var/log/ et comment les lire
- Crontab et cron Linux : utilisations et exemples