Linux pour les devs - 16 - Les logs : lire, filtrer, comprendre

journalctl, /var/log/, logrotate, grep et tail : tout ce qu'il faut pour exploiter les logs sur Linux.

  1. 01 Linux pour les devs - 00 - Pourquoi Linux meme si tu codes sur Mac ou Windows
  2. 02 Linux pour les devs - 01 - Le terminal, bash et zsh
  3. 03 Linux pour les devs - 02 - Fichiers et répertoires
  4. 04 Linux pour les devs - 03 - Permissions et droits d'acces
  5. 05 Linux pour les devs - 04 - Utilisateurs, groupes et sudo
  6. 06 Linux pour les devs - 05 - nano, vim, sed et awk
  7. 07 Linux pour les devs - 06 - Pipes et redirections
  8. 08 Linux pour les devs - 07 - grep et find en profondeur
  9. 09 Linux pour les devs - 08 - Les processus : comprendre ce qui tourne sur ta machine
  10. 10 Linux pour les devs - 09 - systemd : gerer tes services comme un pro
  11. 11 Linux pour les devs - 10 - Le réseau : comprendre ce qui passe par le fil
  12. 12 Linux pour les devs - 11 - Le firewall : contrôler qui entre et qui sort
  13. 13 Linux pour les devs - 12 - SSH : l'acces distant sécurisé
  14. 14 Linux pour les devs - 13 - Les variables d'environnement : configurer sans hardcoder
  15. 15 Linux pour les devs - 14 - Scripts bash : automatiser pour ne plus se répéter
  16. 16 Linux pour les devs - 15 - cron : les taches planifiees
  17. 17 Linux pour les devs - 16 - Les logs : lire, filtrer, comprendre
  18. 18 Linux pour les devs - 17 - Stockage et disques
  19. 19 Linux pour les devs - 18 - Les gestionnaires de paquets
  20. 20 Linux pour les devs - 19 - Les conteneurs sans Docker
  21. 21 Linux pour les devs - 20 - Securiser un serveur Linux
  22. 22 Linux pour les devs - 21 - Performance et diagnostic
  23. 23 Linux pour les devs - 22 - tmux : le multiplexeur de terminal
  24. 24 Linux pour les devs - 23 - Glossaire Linux

16 - Les logs : lire, filtrer, comprendre

Ce que tu vas apprendre

  • Utiliser journalctl pour naviguer dans les logs systemd
  • Connaitre les fichiers classiques de /var/log/
  • Filtrer les logs par service, date, priorité
  • Suivre les logs en temps réel avec tail -f et less +F
  • Configurer logrotate pour éviter que les logs mangent ton disque
  • Chercher dans les logs avec grep et awk

Prerequisites

Maitriser les bases du terminal et connaître systemd.


La première fois que j'ai du debugger un problème en production, j'ai fait un cat sur un fichier de log de 2 Go. Mon terminal a freeze, ma connexion SSH a lache, et le serveur n'etait pas content non plus. Depuis, j'ai appris a lire les logs correctement. Et crois-moi, ca change tout.

journalctl : les logs de systemd

Sur un système avec systemd, journalctl est ton outil principal. Il centralise les logs de tous les services, du kernel et des messages système :

bash# Voir tous les logs (attention, c'est verbeux)
journalctl

# Les logs de la session en cours
journalctl -b

# Les logs du boot precedent
journalctl -b -1

# Suivre les logs en temps reel
journalctl -f

Filtrer par service

C'est la que journalctl devient vraiment utile :

bash# Les logs d'un service precis
journalctl -u nginx

# Plusieurs services a la fois
journalctl -u nginx -u postgresql

# Suivre les logs d'un service en temps reel
journalctl -u mon-app -f

Filtrer par date

bash# Depuis une date precise
journalctl --since "2026-03-28 14:00"

# Les dernieres 2 heures
journalctl --since "2 hours ago"

# Entre deux dates
journalctl --since "2026-03-28" --until "2026-03-29"

# Depuis le dernier boot
journalctl --since today

Filtrer par priorité

Les niveaux de priorité syslog vont de 0 (urgence) a 7 (debug) :

bash# Uniquement les erreurs et plus grave
journalctl -p err

# Erreurs et warnings
journalctl -p warning

# Les niveaux : emerg, alert, crit, err, warning, notice, info, debug
journalctl -p err --since "1 hour ago" -u nginx

Sur paltemps.fr, je combine souvent -p err --since "1 hour ago" pour voir rapidement si quelque chose a casse recemment.

Format de sortie

bash# Format JSON (pratique pour parser)
journalctl -u nginx -o json-pretty --since "1 hour ago"

# Format court (sans metadata)
journalctl -u nginx -o short

# Afficher seulement les N derniers messages
journalctl -u nginx -n 50

/var/log/ : les fichiers classiques

Meme avec journalctl, certains logs se trouvent encore dans des fichiers :

bash# Lister les fichiers de log
ls -lh /var/log/

# Fichiers courants :
# /var/log/syslog        - Messages systeme generaux (Debian/Ubuntu)
# /var/log/messages      - Equivalent sur RHEL/CentOS
# /var/log/auth.log      - Connexions, sudo, SSH
# /var/log/kern.log      - Messages du kernel
# /var/log/dpkg.log      - Historique des installations apt
# /var/log/nginx/        - Logs du serveur web
# /var/log/postgresql/   - Logs de la base de donnees

/var/log/auth.log est un fichier que je consulte systématiquement quand je suspecte des tentatives d'intrusion. On y voit chaque connexion SSH, chaque sudo, chaque échec d'authentification.

Lire les logs sans planter ton terminal

Ne fais jamais cat sur un gros fichier de log. Utilise plutot :

bash# Les 100 dernieres lignes
tail -100 /var/log/syslog

# Suivre en temps reel (Ctrl+C pour arreter)
tail -f /var/log/syslog

# Suivre plusieurs fichiers a la fois
tail -f /var/log/nginx/access.log /var/log/nginx/error.log

# less avec suivi en temps reel (F pour suivre, Ctrl+C puis q pour quitter)
less +F /var/log/syslog

less +F est mon outil préféré. Tu suis les logs en temps réel, et quand tu vois quelque chose d'interessant, tu appuies sur Ctrl+C pour passer en mode navigation, tu cherches avec /, puis tu appuies sur F pour reprendre le suivi.

grep et awk : chercher dans les logs

bash# Chercher une erreur specifique
grep "error" /var/log/syslog

# Chercher en ignorant la casse
grep -i "failed" /var/log/auth.log

# Avec du contexte (3 lignes avant et apres)
grep -C 3 "out of memory" /var/log/syslog

# Compter les occurrences
grep -c "Failed password" /var/log/auth.log

# Extraire les IPs qui tentent du brute force
grep "Failed password" /var/log/auth.log | awk '{print $(NF-3)}' | sort | uniq -c | sort -rn | head -20

Cette dernière commande est une de celles que j'utilise le plus. Elle extrait les adresses IP des tentatives de connexion echouees, les compte et les trie. En cinq secondes, tu sais qui essaie de s'introduire sur ton serveur.

logrotate : éviter la saturation disque

Sans rotation, les logs grossissent indefiniment. logrotate s'en occupe :

bash# Configuration globale
cat /etc/logrotate.conf

# Configurations specifiques par service
ls /etc/logrotate.d/

Un fichier de configuration typique :

# /etc/logrotate.d/mon-app
/var/log/mon-app/*.log {
    daily
    missingok
    rotate 14
    compress
    delaycompress
    notifempty
    create 0640 www-data www-data
    sharedscripts
    postrotate
        systemctl reload mon-app > /dev/null 2>&1 || true
    endscript
}

Les options importantes :

  • daily, weekly, monthly : fréquence de rotation
  • rotate 14 : garder les 14 derniers fichiers
  • compress : compresser les vieux logs en .gz
  • delaycompress : ne pas compresser le fichier le plus recent (utile si le service écrit encore dedans)
  • missingok : ne pas planter si le fichier n'existe pas
  • postrotate : commande a exécuter apres la rotation
bash# Tester la configuration sans rien faire
logrotate -d /etc/logrotate.d/mon-app

# Forcer une rotation manuellement
sudo logrotate -f /etc/logrotate.d/mon-app

Résumé

  • journalctl -u service -f pour suivre les logs d'un service en direct
  • journalctl -p err --since "1 hour ago" pour trouver les erreurs recentes
  • Ne fais jamais cat sur un gros log, utilise tail, less +F ou grep
  • /var/log/auth.log pour la sécurité, /var/log/syslog pour le système
  • logrotate empeche les logs de remplir ton disque
  • grep + awk + sort + uniq -c pour analyser les patterns dans les logs

Article précédent : Les taches planifiees avec cron Article suivant : Le stockage et les disques

Sources

Réservez un audit gratuit de 30 minutes. Je vous montre concrètement ce qu'on peut automatiser.