Retour au cours

le journal système avec journalctl

Objectifs

  • Comprendre le rôle du “Journal” de systemd comme un système de logs centralisé.
  • Consulter les logs système de base avec journalctl.
  • Filtrer efficacement les logs par service, par période de temps ou par niveau de priorité.
  • Suivre les nouveaux logs en temps réel pour le débogage en direct.

Fini les logs éparpillés

Traditionnellement, chaque service écrivait ses logs dans un fichier texte séparé dans /var/log. Pour débugger un problème, il fallait savoir quel fichier regarder.

Sur les systèmes Linux modernes, systemd centralise la collecte des logs de tous les services qu’il gère dans un format binaire structuré, le Journal. L’outil en ligne de commande pour interroger ce journal est journalctl.

journalctl : Votre portail vers les logs

journalctl est une commande extrêmement puissante qui remplace la lecture manuelle de multiples fichiers de log.

Commandes de base

  • journalctl : Affiche l’intégralité du journal, du plus ancien au plus récent. La sortie est ouverte dans less, donc vous pouvez naviguer. Attention, cela peut être très long !
  • journalctl -r : Affiche les logs en ordre reverse (les plus récents en premier), ce qui est souvent plus utile.
  • journalctl -n 20 : Affiche les n 20 dernières lignes de log.
  • journalctl -f : Follow. Suit les logs en temps réel, en affichant les nouvelles entrées dès qu’elles arrivent. C’est l’équivalent de tail -f pour tout le système.

Le filtrage : La vraie puissance de journalctl

Ne jamais lire tous les logs est la clé. Il faut filtrer.

1. Filtrer par unité systemd

C’est le filtre le plus courant. Il permet d’isoler les logs d’un service spécifique.

# Afficher tous les logs du service SSH
journalctl -u sshd.service

# Suivre en direct les logs du service Docker
journalctl -u docker.service -f

2. Filtrer par période de temps

Vous pouvez spécifier une période de temps pour votre recherche.

# Afficher les logs depuis hier
journalctl --since "yesterday"

# Afficher les logs de la dernière heure
journalctl --since "1 hour ago"

# Afficher les logs entre deux dates
journalctl --since "2025-07-10 14:00" --until "2025-07-10 14:30"

3. Filtrer par niveau de priorité

journalctl comprend les niveaux de sévérité des logs.

  • journalctl -p err : Affiche les erreurs (err, 3) et les niveaux plus critiques (crit, alert, emerg).
  • journalctl -p warning : Affiche les avertissements (warning, 4) et les niveaux plus critiques.

Les niveaux sont (du plus au moins critique) : emerg (0), alert (1), crit (2), err (3), warning (4), notice (5), info (6), debug (7).

Bonnes pratiques

  • Ne lancez jamais journalctl sans filtre. Vous seriez noyé sous l’information.
  • Le réflexe de diagnostic pour un service qui ne fonctionne pas doit être :
    1. systemctl status nom_du_service
    2. journalctl -u nom_du_service -r (pour voir les erreurs les plus récentes en premier).
  • Combinez les filtres pour affiner votre recherche :
    # Montre-moi les erreurs du service nginx depuis hier
    journalctl -u nginx -p err --since "yesterday"

Pièges courants

  • La persistance des logs : Sur certaines configurations par défaut, le journal n’est pas persistant et est effacé à chaque redémarrage. Pour le rendre persistant, il faut créer le dossier /var/log/journal.
  • La taille des logs : Le journal peut devenir très volumineux. Sa taille et sa politique de rotation sont gérées dans le fichier /etc/systemd/journald.conf.

Exercices

  1. Exploration de base :

    • Affichez les 30 dernières entrées de votre journal système.
    • Affichez-les à nouveau, mais avec les plus récentes en premier.
  2. Filtrer un service :

    • Choisissez un service qui tourne sur votre machine (ex: cron, sshd, NetworkManager).
    • Utilisez journalctl -u <service> pour afficher tous ses logs.
    • Utilisez l’option -f pour suivre ses logs pendant une minute.
  3. Chercher les erreurs :

    • Affichez tous les messages de log du système ayant un niveau de priorité “error” ou plus critique, et qui datent des dernières 24 heures.
    • journalctl -p err --since "1 day ago"
  4. Combiner les filtres :

    • Essayez de trouver les avertissements (warning) du service cron depuis le début de la semaine.