Skip to Content
CLI🧾 Logs

🧾 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.log

Suivi 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.log

Filtrer 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.log

Combinaisons 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.log

journalctl (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/secure

Docker 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 -f

Formats et parsing

# 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.log

Rappels rapides

UsageCommande
Suivre un fichiertail -f app.log
Suivre et filtrer`tail -f app.log
Lecture paginéeless app.log
Dernières 200 lignestail -n 200 app.log
Premières 50 ligneshead -n 50 app.log
journalctl servicejournalctl -u my-service -f
Niveau d’erreurjournalctl -p 0..3 -xe