Apache : quel bavard
Apache parle. Beaucoup. Chaque requête génère une ligne dans le access_log, chaque erreur une ligne dans le error_log et le LogLevel contrôle le niveau de bavardage. Sur un serveur qui sert 100 000 pages par jour, le access_log pèse 50 Mo par jour et personne ne le lit.
Le LogLevel
LogLevel warn
Les niveaux, du plus bavard au plus silencieux: debug, info, notice, warn, error, crit, alert, emerg. Le warn est le défaut et le bon: il logge les warnings (config, permissions) et les erreurs, mais pas chaque module qui démarre.
Le debug est utile pendant une session de débogage, mais il produit 50 lignes par requête (chaque module, chaque règle de rewrite, chaque header traité). En production, le debug est un disque dur qui se remplit.
Le LogFormat
Le défaut combined donne le User-Agent et le Referer en plus du classique:
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
CustomLog /var/log/apache2/access.log combined
Ce que le access_log raconte: l’IP source, le timestamp, la méthode + URL + protocole, le code de retour, la taille, le Referer (d’où vient l’utilisateur) et le User-Agent (quel navigateur, quel OS, quel bot). Un access_log est une base de données comportementale et personne ne le traite comme tel.
Ce qu’on y trouve
- Les bots de scan:
/phpmyadmin,/wp-admin,/etc/passwd,/shell.php(les IPs que fail2ban bannit) - Les référents de spam (les domaines qui prétendent vous linker pour apparaître dans vos stats)
- Les User-Agents de scanners (sqlmap, nikto, sqlninja) qui se distinguent des navigateurs par leur pattern
- Les requêtes qui ne passent pas le 200: les 404 sur des fichiers qui n’existent pas, les 403 sur des fichiers protégés, les 500 sur les erreurs applicatives
La rotation
CustomLog "|/usr/bin/rotatelogs /var/log/apache2/access.log 86400" combined
Le rotatelogs d’Apache rotationne le log toutes les 86400 secondes (24h) sans arrêter Apache. La compression et le nettoyage sont dans le logrotate:
/var/log/apache2/*.log {
daily
missingok
rotate 14
compress
delaycompress
notifempty
}
14 jours de logs compressés, les deux premiers jours non compressés (delaycompress, pour le tail en cours).
[edit: 2026] Le LogFormat combined est toujours le standard, mais les access logs modernes sont parsés par des pipelines (GoAccess en temps réel, ELK pour l’agrégation, fail2ban pour le ban). Le User-Agent est devenu le champ le plus menteur: les bots se font passer pour Chrome depuis 2020 et le Referer est vide pour les connexions HTTPS vers HTTP. Le log raconte toujours tout, mais il faut lire entre les lignes.