Chapitre 11.2 - Gestion des Logs
Objectifs d'Apprentissage
À la fin de ce chapitre, vous serez capable de:
- Comprendre le système de logs Linux
- Utiliser journalctl (systemd)
- Analyser /var/log
- Configurer logrotate
- Rechercher dans les logs
- Centraliser les logs
Système de Logs
journalctl (systemd)
Logs système modernes:
# Tous les logs
sudo journalctl
# Logs récents
sudo journalctl -n 50
# Suivre en temps réel
sudo journalctl -f
# Par unité (service)
sudo journalctl -u sshd
sudo journalctl -u apache2
# Par priorité
sudo journalctl -p err
sudo journalctl -p warning
# Par date
sudo journalctl --since "2024-01-01"
sudo journalctl --since "1 hour ago"
sudo journalctl --since yesterday
# Par utilisateur
sudo journalctl _UID=1000
/var/log
Logs traditionnels:
# Logs système
/var/log/syslog # Ubuntu/Debian
/var/log/messages # Red Hat/CentOS
# Authentification
/var/log/auth.log # Ubuntu/Debian
/var/log/secure # Red Hat/CentOS
# Applications
/var/log/apache2/ # Apache
/var/log/nginx/ # Nginx
/var/log/mysql/ # MySQL
# Cron
/var/log/cron # Red Hat/CentOS
# Ubuntu: dans syslog
Analyse des Logs
Recherche Basique
# Grep simple
grep "ERROR" /var/log/syslog
# Ignorer casse
grep -i "error" /var/log/syslog
# Contexte
grep -C 5 "ERROR" /var/log/syslog # 5 lignes avant/après
# Plusieurs fichiers
grep "ERROR" /var/log/*.log
# Récursif
grep -r "ERROR" /var/log/
Outils Avancés
# Compter occurrences
grep -c "ERROR" /var/log/syslog
# Lignes uniques
grep "ERROR" /var/log/syslog | sort -u
# Statistiques
grep "ERROR" /var/log/syslog | awk '{print $1}' | sort | uniq -c
# Dernières erreurs
grep "ERROR" /var/log/syslog | tail -20
journalctl Recherche
# Recherche texte
sudo journalctl -g "ERROR"
# Par binaire
sudo journalctl /usr/bin/sshd
# Combinaison
sudo journalctl -u sshd -p err --since "1 hour ago"
Rotation des Logs
logrotate
Configuration automatique:
# Configuration
/etc/logrotate.conf
/etc/logrotate.d/
# Test configuration
sudo logrotate -d /etc/logrotate.conf
# Forcer rotation
sudo logrotate -f /etc/logrotate.conf
Configuration Exemple
# /etc/logrotate.d/mon-app
/var/log/mon-app/*.log {
daily
rotate 7
compress
delaycompress
missingok
notifempty
create 0640 www-data www-data
sharedscripts
postrotate
systemctl reload mon-app > /dev/null 2>&1 || true
endscript
}
Options:
- daily/weekly/monthly: Fréquence
- rotate N: Garder N rotations
- compress: Compresser anciens logs
- missingok: Pas d'erreur si fichier absent
- notifempty: Ne pas tourner si vide
- create: Créer nouveau fichier avec permissions
Logs Cron
Voir les Logs Cron
# Ubuntu/Debian (dans syslog)
sudo grep CRON /var/log/syslog
# Red Hat/CentOS
sudo tail -f /var/log/cron
# journalctl
sudo journalctl -u cron
sudo journalctl _COMM=cron
Logs des Tâches
# Si redirection dans crontab
# 0 2 * * * /script.sh > /var/log/script.log 2>&1
# Voir logs
tail -f /var/log/script.log
# Rechercher erreurs
grep -i error /var/log/script.log
Monitoring Cron
#!/bin/bash
# Vérifier exécution cron
# Vérifier dernière exécution
LAST_RUN=$(grep "script.sh" /var/log/syslog | tail -1 | awk '{print $1, $2, $3}')
if [ -z "$LAST_RUN" ]; then
echo "ALERTE: Script cron n'a jamais été exécuté"
else
echo "Dernière exécution: $LAST_RUN"
fi
# Vérifier erreurs
ERRORS=$(grep "script.sh" /var/log/syslog | grep -i error | wc -l)
if [ "$ERRORS" -gt 0 ]; then
echo "ALERTE: $ERRORS erreurs détectées"
fi
Centralisation des Logs
rsyslog
Configuration serveur:
# /etc/rsyslog.conf
# Activer UDP/TCP
module(load="imudp")
input(type="imudp" port="514")
module(load="imtcp")
input(type="imtcp" port="514")
# Stocker par host
$template RemoteHost,"/var/log/remote/%HOSTNAME%/%PROGRAMNAME%.log"
*.* ?RemoteHost
Configuration client:
# /etc/rsyslog.conf
# Envoyer vers serveur
*.* @192.168.1.100:514
Logstash/Filebeat
Stack ELK:
- Elasticsearch: Stockage
- Logstash: Traitement
- Kibana: Visualisation
- Filebeat: Collecte
Scripts Utiles
Analyse Quotidienne
#!/bin/bash
# Analyse logs quotidienne
DATE=$(date +%Y%m%d)
REPORT="/var/log/analysis-$DATE.txt"
{
echo "=== Analyse Logs $(date) ==="
echo
echo "=== Erreurs ==="
grep -i error /var/log/syslog | tail -20
echo
echo "=== Avertissements ==="
grep -i warning /var/log/syslog | tail -20
echo
echo "=== Tentatives échec SSH ==="
grep "Failed password" /var/log/auth.log | wc -l
echo
echo "=== Top processus ==="
ps aux --sort=-%cpu | head -10
} > "$REPORT"
Nettoyage Logs
#!/bin/bash
# Nettoyer anciens logs
# Supprimer logs > 30 jours
find /var/log -name "*.log" -mtime +30 -delete
find /var/log -name "*.gz" -mtime +90 -delete
# Nettoyer journal systemd
sudo journalctl --vacuum-time=30d
sudo journalctl --vacuum-size=500M
Résumé
Dans ce chapitre, vous avez appris:
journalctl: Logs systemd, recherche, filtres
/var/log: Logs traditionnels, applications
Recherche: grep, journalctl -g, outils avancés
logrotate: Rotation automatique, configuration
Cron logs: Monitoring exécutions, détection erreurs
Centralisation: rsyslog, ELK stack
Pratique: Analyse, nettoyage, monitoring
Prochaines Étapes
Chapitre 11.3: Monitoring Crons et Alertes
Module 12: Administration Avancée
Chapitre créé le: Décembre 2024