Démystifier journalctl : Votre guide des journaux système Linux

Apprenez les commandes journalctl pour visualiser, filtrer, suivre et nettoyer les journaux du système systemd Linux.

Démystifier journalctl : Votre guide des journaux système Linux

L'utilitaire journalctl est la commande principale pour visualiser les journaux collectés par systemd-journald. Lorsqu'un service échoue, un démarrage bloque ou un message du noyau défile trop rapidement, journalctl est généralement l'endroit où vous trouverez les détails.

Contrairement aux fichiers journaux texte brut dans /var/log, le journal stocke des entrées structurées avec des métadonnées telles que le nom de l'unité, la priorité, l'ID de démarrage et l'horodatage. Cela permet de filtrer les journaux avec précision au lieu d'ouvrir plusieurs fichiers et de deviner.


Comprendre le journal systemd

Avant de plonger dans les commandes, il est utile de savoir ce que journalctl gère. Le journal systemd collecte les journaux du noyau, des services (unités), des applications et même du processus de démarrage du système. Ces journaux sont généralement stockés dans des fichiers binaires structurés, ce qui les rend beaucoup plus rapides à rechercher et à filtrer que les fichiers plats traditionnels.

Concepts clés :

  • Persistance : Les journaux peuvent être configurés pour être stockés en permanence entre les redémarrages (mode persistant) ou uniquement conservés en mémoire (mode volatile).
  • Données structurées : Les journaux contiennent des métadonnées (comme le nom de l'unité, la priorité, l'ID de démarrage) que journalctl exploite pour le filtrage.

Commandes de visualisation essentielles

Le besoin le plus courant est simplement de visualiser les journaux. Voici les commandes fondamentales pour commencer à explorer l'historique de votre système.

1. Visualiser tous les journaux

Pour voir chaque entrée collectée par le journal depuis que le système a commencé à enregistrer les journaux, utilisez la commande sans aucun argument :

journalctl

Par défaut, cette sortie est paginée à l'aide d'un outil comme less, vous permettant de naviguer de haut en bas à l'aide des touches fléchées ou de la barre d'espace.

2. Visualiser les journaux en temps réel (suivi)

Similaire à l'utilisation de tail -f, vous pouvez surveiller les journaux au fur et à mesure qu'ils sont écrits dans le journal. Cela est inestimable lors du démarrage ou du débogage d'un service spécifique :

journalctl -f

Pour quitter la vue en temps réel, appuyez sur Ctrl+C.

3. Limiter la sortie par nombre de lignes

Si vous n'avez besoin que des entrées les plus récentes, utilisez l'option -n pour spécifier le nombre de lignes :

# Afficher les 20 dernières entrées du journal
journalctl -n 20

4. Visualiser les journaux depuis une heure spécifique

Le filtrage par heure est l'une des fonctionnalités les plus puissantes de journalctl. Vous pouvez utiliser des horodatages relatifs ou absolus.

Exemples d'heure relative :

Commande Description
journalctl --since "1 hour ago" Journaux de la dernière heure.
journalctl --since "yesterday" Journaux depuis le début du jour calendaire précédent.
journalctl --since "2023-10-26 14:30:00" Journaux après une date et une heure spécifiques.

Astuce : Vous pouvez combiner --since et --until pour spécifier une plage précise, par exemple : journalctl --since "2023-10-26" --until "2023-10-27 00:00:00".


Filtrer les journaux par unité, service ou processus

L'une des utilisations les plus critiques de journalctl est d'isoler les messages liés à une unité systemd spécifique (service).

Filtrer par nom de service

Utilisez l'option -u (ou --unit) suivie du nom du service (par exemple, sshd.service, nginx.service) :

# Voir les journaux uniquement pour le service du serveur web Apache
journalctl -u apache2.service

# Suivre les journaux pour le service Docker
journalctl -u docker.service -f

Filtrer par ID de démarrage

Systemd suit les journaux à travers différents démarrages du système. Pour voir les journaux d'un démarrage précédent, listez d'abord les démarrages disponibles :

journalctl --list-boots

Cela affiche une liste indexée (par exemple, -1, -2, 0 pour le démarrage actuel). Vous pouvez ensuite utiliser l'index ou l'ID de démarrage complet :

# Afficher les journaux du démarrage immédiatement précédent
journalctl -b -1

# Afficher les journaux d'un ID de démarrage spécifique (utilisez l'ID long listé ci-dessus)
journalctl -b a1b2c3d4e5f6...

Filtrer par messages du noyau

Pour voir uniquement les messages provenant du noyau (similaire à l'utilisation de dmesg) :

journalctl -k
# Ou, de manière équivalente :
journalctl -b -k

Filtrage avancé et contrôle de la sortie

Un dépannage efficace nécessite souvent de combiner des filtres et de contrôler le format de sortie.

1. Filtrer par niveau de priorité

Les journaux se voient attribuer des niveaux de priorité de 0 (emerg) à 7 (debug). Vous pouvez utiliser l'option -p ou --priority pour voir les messages au niveau de gravité sélectionné et aux niveaux plus graves :

Niveau de priorité Valeur numérique
err ou error 3
warning 4
notice 5
info 6
# Afficher toutes les erreurs, critiques et messages d'urgence du service SSH
journalctl -u sshd.service -p err

2. Rechercher un texte spécifique

Lorsque le filtrage standard ne suffit pas, vous pouvez rediriger la sortie vers grep ou utiliser --grep sur les systèmes dont la version de journalctl le prend en charge :

# Rechercher dans tous les journaux les lignes contenant le mot 'failed'
journalctl | grep failed

# Ou, utilisez l'option --grep pour un filtrage plus simple (si disponible/préféré)
journalctl --grep=failed

3. Changer le format de sortie

Pour les scripts ou le déplacement de journaux vers d'autres outils, changer le format de sortie est essentiel. Le format par défaut est pretty (lisible par l'homme).

  • --output=json : Affiche les entrées sous forme d'objets JSON structurés.
  • --output=short : Similaire à pretty mais moins coloré.
  • --output=export : Affiche les entrées brutes du journal pour archivage.
# Afficher les journaux récents au format JSON
journalctl -n 5 --output=json

4. Combiner les filtres

Les filtres se cumulent de manière multiplicative. Pour voir toutes les erreurs de Nginx enregistrées au cours des 10 dernières minutes :

journalctl -u nginx.service --since "10 minutes ago" -p err

Gérer la taille et la persistance du journal

Avec le temps, le journal peut consommer un espace disque important, surtout s'il est configuré pour une journalisation persistante. Les administrateurs système doivent gérer sa taille.

Vérifier l'utilisation actuelle

Pour voir l'espace disque occupé par les fichiers journaux actuels :

journalctl --disk-usage

Nettoyer les anciens journaux

Vous pouvez effacer les journaux en fonction du temps ou de la taille totale.

Nettoyage par temps :

# Conserver uniquement les journaux des 7 derniers jours
journalctl --vacuum-time=7d

Nettoyage par taille :

# Réduire la taille totale du journal à un maximum de 500 Mégaoctets
journalctl --vacuum-size=500M

Avertissement : Soyez prudent lors de la suppression de journaux, en particulier ceux des démarrages plus anciens (-b). Assurez-vous que les informations de diagnostic critiques ne sont pas supprimées prématurément.

À retenir

Pour le dépannage quotidien, commencez par journalctl -u <service> -n 50 --no-pager, ajoutez -f lorsque vous avez besoin d'une sortie en direct, et utilisez --since ou -b lorsque le problème est lié à une fenêtre de temps ou à un démarrage. Avant de supprimer des journaux, vérifiez journalctl --disk-usage et conservez suffisamment d'historique pour la restauration et l'examen des incidents.