Dans cette leçon, tu vas maîtriser les logs sous Linux. Les logs sont essentiels pour le dépannage, la sécurité et la surveillance système.
Un log (journal) est un fichier qui enregistre les événements du système. C'est indispensable pour : - Diagnostiquer les problèmes - Surveiller la sécurité - Comprendre le comportement du système - Auditer les activités
| Répertoire | Description |
|---|---|
/var/log/ |
Logs système principaux |
/var/log/syslog |
Messages système généraux |
/var/log/auth.log |
Authentification (Debian/Ubuntu) |
/var/log/secure |
Authentification (RHEL/CentOS) |
/var/log/kern.log |
Messages du noyau |
/var/log/dmesg |
Messages au démarrage |
/var/log/messages |
Messages généraux (RHEL) |
# Dernières lignes
tail /var/log/syslog
# Suivre en temps réel
tail -f /var/log/syslog
# Avec nombre de lignes
tail -n 50 /var/log/syslog
tail -f -n 50 /var/log/syslog
head /var/log/syslog
head -n 20 /var/log/syslog
cat /var/log/syslog
less /var/log/syslog
# Touches: /rechercher, n=suivant, p=précédent, q=quitter
# Rechercher un terme
grep "erreur" /var/log/syslog
# Insensible à la casse
grep -i "error" /var/log/syslog
# Afficher le contexte
grep -C 3 "erreur" /var/log/syslog
# Compter les occurrences
grep -c "failed" /var/log/auth.log
# Expressions régulières
grep -E "error|warning|critical" /var/log/syslog
# Plusieurs fichiers
grep -r "motif" /var/log/
# Inverser (lignes sans)
grep -v "debug" /var/log/syslog
systemd utilise journald comme système de logs centralisé.
# Voir tous les logs
journalctl
# Logs d'aujourd'hui
journalctl --since today
# Période précise
journalctl --since "2024-01-01" --until "2024-01-02"
# Dernières entrées
journalctl -n 50
journalctl -n 100 --no-pager
# Suivre en temps réel
journalctl -f
# Logs d'un service
journalctl -u nginx
journalctl -u ssh
# Logs depuis le démarrage
journalctl -b
# Logs du boot précédent
journalctl -b -1
# Priorité (0=emergency à 7=debug)
journalctl -p err
journalctl -p warning
# Format lisible
journalctl --no-pager
# Format JSON
journalctl -o json
# Taille
journalctl --disk-usage
# Nettoyer
journalctl --vacuum-size=100M
journalctl --vacuum-time=2weeks
# Tous les messages du noyau
dmesg
# Suivre en temps réel
dmesg -w
# Avec horodatage lisible
dmesg -T
# Filtrer par niveau
dmesg -l err
dmesg -l warn
dmesg -l info
# Rechercher un terme
dmesg | grep -i error
dmesg | grep -i usb
dmesg | grep -i network
# Debian/Ubuntu
/var/log/auth.log
# RHEL/CentOS
/var/log/secure
# Connexions réussies
grep "session opened" /var/log/auth.log
# Échecs de connexion
grep "Failed password" /var/log/auth.log
# Connexions SSH
grep "sshd" /var/log/auth.log
# Utilisation de sudo
grep "sudo" /var/log/auth.log
# Dernier utilisateur
last
lastlog
# Apache
/var/log/apache2/access.log
/var/log/apache2/error.log
# Nginx
/var/log/nginx/access.log
/var/log/nginx/error.log
/var/log/mysql/error.log
/var/log/mysql/slow-queries.log
/var/log/mysql/general.log
# Docker
/var/log/docker.log
journalctl -u docker
# Fail2ban
/var/log/fail2ban.log
# Cron
/var/log/cron.log
# Compter les erreurs
grep -c "error" /var/log/syslog
# Compter par type
grep -oE "error|warning|notice" /var/log/syslog | sort | uniq -c | sort -rn
# Top 10 IPs qui accèdent au serveur
awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -rn | head -10
#!/bin/bash
LOG="/var/log/syslog"
ALERTES=0
# Vérifier les erreurs récentes
ERRORS=$(tail -n 100 $LOG | grep -c -i "error")
if [ $ERRORS -gt 10 ]; then
echo "ALERTE: $ERRORS erreurs dans les dernières 100 lignes"
#Notifier (email, Slack, etc.)
fi
# Fichier de config principal
/etc/logrotate.conf
# Configuration par service
/etc/logrotate.d/nginx
/var/log/nginx/*.log {
daily # Rotation quotidienne
missingok # Pas d'erreur si absent
rotate 14 # Garder 14 fichiers
compress # Compresser les anciens
delaycompress # Compresser le lendemain
notifempty # Ne pas créer si vide
create 0640 www-data adm
sharedscripts
postrotate
systemctl reload nginx > /dev/null
endscript
}
# Tester sans exécuter
logrotate -d /etc/logrotate.conf
# Forcer la rotation
sudo logrotate -f /etc/logrotate.conf
#!/bin/bash
LOGFILE="/var/log/mon_script.log"
echo "$(date '+%Y-%m-%d %H:%M:%S') - Démarrage du script" >> $LOGFILE
# Votre logique ici
echo "$(date '+%Y-%m-%d %H:%M:%S') - Opération terminée" >> $LOGFILE
# Envoyer vers syslog
logger -p user.info "Mon message d'info"
logger -p user.warn "Attention"
logger -p user.err "Erreur"
# Avec tag personnalisé
logger -t "MONAPP" -p user.info "Message"
# Rechercher les erreurs dans syslog
grep -i error /var/log/syslog | tail -20
# Errors avec contexte
grep -B2 -A2 "error" /var/log/syslog | head -30
# Voir les connexions SSH
grep "sshd" /var/log/auth.log | tail -20
# Compter les échecs
grep "Failed password" /var/log/auth.log | wc -l
# Suivre les logs en direct
tail -f /var/log/syslog | grep -i error
# Avec journalctl
journalctl -f -u nginx
| Commande | Description |
|---|---|
tail -f |
Suivre en temps réel |
grep |
Rechercher |
journalctl |
Logs systemd |
dmesg |
Logs du noyau |
logrotate |
Rotation automatique |
logger |
Créer des logs |
Maîtrise les logs pour diagnose et sécuriser ton système ! 📋