🧾 Logs
Commandes essentielles pour lire, suivre et filtrer les logs en ligne de commande.
Les fichiers de logs sont souvent volumineux. Utilisez les bons outils (less, tail, grep, journalctl) pour naviguer efficacement sans tout afficher.
Lecture de base
# Afficher tout le fichier (à éviter sur les gros logs)
cat /var/log/syslog
# Lecture paginée (recommandé)
less /var/log/syslog # navigation: ↑ ↓ PgUp PgDn, /recherche, n/N, q pour quitter
# Afficher les premières / dernières lignes
head -n 50 app.log
tail -n 100 app.logSuivi en temps réel
# Suivre les nouvelles lignes en temps réel (comme tail -f)
tail -f app.log
# Suivre plusieurs fichiers (pratique pour apps multi-process)
tail -f app1.log app2.log
# Reread si le fichier est rotationné (logrotate)
tail -F app.log
# Afficher les 200 dernières lignes puis suivre
tail -n 200 -f app.logFiltrer et rechercher
# Filtrer par motif (sensible à la casse)
grep "ERROR" app.log
# Insensible à la casse
grep -i "error" app.log
# Mettre en évidence les correspondances
grep --color=always -n "timeout" app.log | less -R
# Expressions régulières étendues
grep -E "(ERROR|WARN)" app.log
# Conserver uniquement les lignes ne correspondant pas
grep -v "DEBUG" app.logCombinaisons utiles
# Suivre en temps réel et filtrer
tail -f app.log | grep --line-buffered -i "error"
# Suivre et exclure le bruit
tail -f app.log | grep -v -E "(healthcheck|DEBUG)"
# Compter les occurrences par type
grep -Eo "ERROR|WARN|INFO" app.log | sort | uniq -c
# Fenêtre glissante des 5 dernières minutes (si timestamp ISO 8601)
awk -v d="$(date -u -d '-5 minutes' +'%Y-%m-%dT%H:%M')" '$0>=d' app.logjournalctl (systemd)
Avec systemd, la plupart des services loggent dans le journal binaire. Utilisez journalctl plutôt que de chercher des fichiers.
# Logs récents du système (pager par défaut)
journalctl -xe
# Suivre un service en temps réel
journalctl -u nginx -f
# Derniers logs d'un service (limiter la quantité)
journalctl -u my-service --since "-30 min"
journalctl -u my-service -n 200
# Par niveau de priorité (0=emerg .. 7=debug)
journalctl -p 0..3 -xe # erreurs et plus graves
# Sur une période
journalctl --since "2025-12-01 10:00" --until "2025-12-01 12:00"
# Pour un binaire / un PID spécifique
journalctl -u my-service _PID=1234
# Exporter en JSON pour traitement
journalctl -u my-service -o json | jq '.'Sources courantes de logs
# Debian/Ubuntu
/var/log/syslog
/var/log/auth.log
/var/log/nginx/access.log
/var/log/nginx/error.log
# CentOS/RHEL/AlmaLinux
/var/log/messages
/var/log/secureDocker et containers
# Logs d'un container
docker logs mon-container
docker logs -f --tail 200 mon-container
# Filtrer les logs d'un container
docker logs -f mon-container 2>&1 | grep -i "error"
# Kubernetes (si utilisé)
kubectl logs deploy/mon-app -n prod --tail 200 -f
kubectl logs pod/mon-pod -c mon-container -fFormats et parsing
Nginx access
# Nginx access.log: extraire le code HTTP et compter
awk '{print $9}' /var/log/nginx/access.log | sort | uniq -c | sort -nr
# Taux d'erreur (5xx) dernière heure
awk -v d="$(date -u -d '-60 min' +'%d/%b/%Y:%H:%M')" '$4>="["d {print $9}' /var/log/nginx/access.log | awk '$1 ~ /^5/ {c++} END {print (c+0)}'Bonnes pratiques
Évitez cat gros.log | grep … sur de très gros fichiers. Préférez grep directement sur le fichier, ou ripgrep (rg) si installé.
# Recommandé
grep -n "pattern" gros.log | less -R
# Plus rapide (si installé)
rg -n "pattern" gros.logRappels rapides
| Usage | Commande |
|---|---|
| Suivre un fichier | tail -f app.log |
| Suivre et filtrer | `tail -f app.log |
| Lecture paginée | less app.log |
| Dernières 200 lignes | tail -n 200 app.log |
| Premières 50 lignes | head -n 50 app.log |
| journalctl service | journalctl -u my-service -f |
| Niveau d’erreur | journalctl -p 0..3 -xe |