← Sommaire SkyLinux

Leçon 17 : Les logs système

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.


1. Introduction aux logs

Qu'est-ce qu'un log ?

Un **log** (journal) est un fichier qui enregistre les événements du système. C'est indispensable pour :

Emplacement des logs

RépertoireDescription
/var/log/Logs système principaux
/var/log/syslogMessages système généraux
/var/log/auth.logAuthentification (Debian/Ubuntu)
/var/log/secureAuthentification (RHEL/CentOS)
/var/log/kern.logMessages du noyau
/var/log/dmesgMessages au démarrage
/var/log/messagesMessages généraux (RHEL)

2. Commandes de base

tail - Suivre les logs

# 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 - Début des logs

head /var/log/syslog

head -n 20 /var/log/syslog

cat - Tout afficher

cat /var/log/syslog

less - Naviguer

less /var/log/syslog

# Touches: /rechercher, n=suivant, p=précédent, q=quitter


3. grep et logs

Rechercher dans les logs

# 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

Recherches avancées

# 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


4. Journalctl - Le système de logs moderne

systemd utilise **journald** comme système de logs centralisé.

Commandes de base

# 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

Filtrer par service

# 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

Options avancées

# Format lisible

journalctl --no-pager

# Format JSON

journalctl -o json

# Taille

journalctl --disk-usage

# Nettoyer

journalctl --vacuum-size=100M

journalctl --vacuum-time=2weeks


5. dmesg - Logs du noyau

Commandes de base

# 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

# Rechercher un terme

dmesg | grep -i error

dmesg | grep -i usb

dmesg | grep -i network


6. Logs d'authentification

Fichiers clés

# Debian/Ubuntu

/var/log/auth.log

# RHEL/CentOS

/var/log/secure

Recherches utiles

# 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


7. Logs applicatifs

Apache/Nginx

# Apache

/var/log/apache2/access.log

/var/log/apache2/error.log

# Nginx

/var/log/nginx/access.log

/var/log/nginx/error.log

MySQL/MariaDB

/var/log/mysql/error.log

/var/log/mysql/slow-queries.log

/var/log/mysql/general.log

Autres services

# Docker

/var/log/docker.log

journalctl -u docker

# Fail2ban

/var/log/fail2ban.log

# Cron

/var/log/cron.log


8. Analyser les logs

Compter et trier

# 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

Créer un script de surveillance

#!/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


9. Logrotate - Gestion des logs

Configuration

# Fichier de config principal

/etc/logrotate.conf

# Configuration par service

/etc/logrotate.d/nginx

Exemple de configuration

/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

}

Commandes logrotate

# Tester sans exécuter

logrotate -d /etc/logrotate.conf

# Forcer la rotation

sudo logrotate -f /etc/logrotate.conf


10. Créer son propre système de log

Script simple

#!/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

Logger avec syslog

# 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"


11. Exercices pratiques

Exercice 1 : Surveiller les erreurs

# 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

Exercice 2 : Connexions SSH

# Voir les connexions SSH

grep "sshd" /var/log/auth.log | tail -20

# Compter les échecs

grep "Failed password" /var/log/auth.log | wc -l

Exercice 3 : Surveillance temps réel

# Suivre les logs en direct

tail -f /var/log/syslog | grep -i error

# Avec journalctl

journalctl -f -u nginx


12. Résumé

CommandeDescription
tail -fSuivre en temps réel
grepRechercher
journalctlLogs systemd
dmesgLogs du noyau
logrotateRotation automatique
loggerCréer des logs

Maîtrise les logs pour diagnose et sécuriser ton système ! 📋