Passer au contenu principal

Administration (Linux)

Logs et logrotate

Les logs sont la mémoire du système. Diagnostiquer un incident, auditer une connexion, comprendre un crash : tout passe par eux. Sur Debian 13, deux systèmes coexistent : journald (systemd, logs structurés en binaire) et les fichiers texte dans /var/log/.

journalctl : accéder aux logs systemd

journalctl                               # tous les logs
journalctl -f                            # suivi en temps réel (tail -f)
journalctl -u sshd                       # logs d'un service
journalctl -u nginx --since "1 hour ago"
journalctl -u nginx --since "2026-02-23 00:00" --until "2026-02-23 23:59"
journalctl -p err                        # uniquement les erreurs
journalctl -p warning..err              # warning et au-dessus
journalctl -n 50                         # 50 dernières lignes
journalctl --disk-usage                  # espace utilisé par journald
journalctl --vacuum-size=500M            # nettoyer (garder 500M)

Niveaux de priorité

De 0 à 7 : emerg, alert, crit, err, warning, notice, info, debug.

Fichiers dans /var/log/

Certains services écrivent directement dans des fichiers texte :

  • /var/log/syslog : logs système généraux
  • /var/log/auth.log : authentifications, sudo, SSH
  • /var/log/kern.log : messages du noyau
  • /var/log/dpkg.log : installations et suppressions de paquets
  • /var/log/nginx/ : access.log et error.log (si Nginx installé)
tail -f /var/log/auth.log                    # surveiller les connexions
grep "Failed password" /var/log/auth.log     # tentatives SSH échouées
grep "sudo" /var/log/auth.log                # commandes sudo exécutées

logrotate : rotation des logs

logrotate gère la rotation automatique des fichiers de log : compression, archivage, suppression des anciens fichiers. Configuration principale dans /etc/logrotate.conf, configurations par service dans /etc/logrotate.d/.

Structure d'une configuration

# /etc/logrotate.d/mon-service
/var/log/mon-service/*.log {
    daily           # rotation quotidienne
    rotate 14       # garder 14 fichiers
    compress        # compresser les anciens (gzip)
    delaycompress   # ne pas compresser le dernier (en cours d'écriture)
    missingok       # ne pas échouer si le fichier est absent
    notifempty      # ne pas tourner si le fichier est vide
    postrotate
        systemctl reload mon-service
    endscript
}

Tester et forcer la rotation

logrotate -d /etc/logrotate.d/mon-service    # simulation (dry run)
logrotate -f /etc/logrotate.d/mon-service    # forcer la rotation

En pratique

Quand un service ne démarre pas, journalctl -u service -n 50 donne les 50 dernières lignes. Quand un serveur ralentit inexplicablement, journalctl -p err --since "1 hour ago" révèle souvent la cause. Sur un serveur de production, vérifier périodiquement journalctl --disk-usage : les logs journald grossissent sans rotation configurée. Pour les logs fichiers, tail -f /var/log/service/error.log donne un suivi temps réel.