Aller au contenu principal

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