Démystifier journalctl : Votre guide des journaux système Linux
L'utilitaire journalctl est la commande centrale pour visualiser et analyser les journaux structurés gérés par le système de journalisation de systemd. En tant que norme moderne pour la journalisation sur de nombreuses distributions Linux, la compréhension de journalctl est cruciale pour une administration système efficace, la gestion des services, et surtout, le dépannage.
Contrairement aux fichiers journaux textuels traditionnels (comme ceux trouvés dans /var/log), systemd capture les journaux dans un format binaire et indexé. Cela permet une interrogation puissante basée sur le temps, le service, l'ID de démarrage, et plus encore. Ce guide vous expliquera les commandes essentielles nécessaires pour exploiter tout le potentiel des événements historiques et en temps réel de votre système.
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 de manière permanente après 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
journalctlutilise 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 avec les touches fléchées ou 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. C'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 de 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 de temps relatifs :
| Commande | Description |
|---|---|
journalctl --since "1 hour ago" |
Journaux de la dernière heure. |
journalctl --since "yesterday" |
Journaux depuis le début du jour calendrier précédent. |
journalctl --since "2023-10-26 14:30:00" |
Journaux après une date et une heure spécifiques. |
Conseil : 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 (service) spécifique.
Filtrer par nom de service
Utilisez l'option -u (ou --unit) suivie du nom du service (par exemple, sshd.service, nginx.service) :
# Afficher les journaux uniquement pour le service de 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
Ceci 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 ne voir que 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é (0=emerg, 7=debug). Vous pouvez utiliser l'option -p (ou --priority) pour afficher les messages d'une gravité égale ou supérieure à un certain niveau :
| Niveau de priorité | Valeur numérique |
|---|---|
err (Erreur) |
3 |
warning (Avertissement) |
4 |
notice (Avis) |
5 |
info (Information) |
6 |
# Afficher toutes les erreurs, messages critiques et 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, bien que journalctl dispose d'un mécanisme intégré de recherche de texte, qui est souvent plus efficace pour les données structurées :
# 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 des 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 s'empilent 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
Au fil du 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 purger les journaux en fonction du temps ou de la taille totale.
Nettoyage par durée :
# Ne conserver que les journaux des 7 derniers jours
journalctl --vacuum-time=7d
Nettoyage par taille :
# Réduire la taille totale des journaux à un maximum de 500 Mégaoctets
journalctl --vacuum-size=500M
Avertissement : Soyez prudent lors de la suppression des 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.
Conclusion
journalctl est un outil puissant et flexible qui va au-delà de la simple journalisation textuelle. En maîtrisant le filtrage basé sur le temps (--since, --until), l'isolation des unités (-u) et la surveillance en temps réel (-f), vous obtenez un contrôle granulaire sur la surveillance de la santé du système. Que vous vérifiiez l'état d'un service ou que vous explorerez un panic du noyau de la semaine dernière, journalctl est votre interface principale avec le journal système Linux moderne.