Quand je monte un serveur Web avec de multiples virtuals hosts, j’utilise une arborescence qui m’est spécifique.
Je place les fichiers d’un site dans un dossier /var/www/domain.tld/sub.domain.tld/http et les logs dans un dossier /var/www/domain.tld/sub.domain.tld/logs
Chaque site à donc ses propres fichiers de logs Apache, Nginx ou PHP, ce qui permet de consulter facilement et rapidement les logs d’un site Web, mais ce qui empêche aussi la rotation des logs configurées par défaut lors de l’installation de ces mêmes programmes.
Il faut donc créer des configurations de rotation spécifiques afin que logrotate, le programme en charge de la rotation des logs, soit en mesure d’effectuer correctement la rotation de tout ces fichiers de logs.
Voici ma configuration pour Apache (à placer dans un fichier /etc/logrotate.d/apache2vhost, par exemple)
/var/www/*/*/logs/*_log { weekly missingok rotate 52 compress delaycompress notifempty create 640 root adm sharedscripts postrotate if [ -f "`. /etc/apache2/envvars ; echo ${APACHE_PID_FILE:-/var/run/apache2.pid}`" ]; then /etc/init.d/apache2 reload > /dev/null fi endscript }
Voici ma configuration pour Nginx (à placer dans un fichier /etc/logrotate.d/nginxvhost, par exemple)
/var/www/*/*/logs/nginx_*.log { weekly missingok rotate 52 compress delaycompress notifempty create 640 root adm sharedscripts postrotate [ ! -f /var/run/nginx.pid ] || kill -USR1 `cat /var/run/nginx.pid` endscript }
Voici ma configuration pour PHP-FPM (à placer dans un fichier /etc/logrotate.d/phpvhost, par exemple)
/var/www/*/*/logs/php5-fpm*.log { daily missingok rotate 15 compress delaycompress notifempty create 640 root adm sharedscripts postrotate [ ! -f /var/run/php5-fpm.pid ] || kill -USR1 `cat /var/run/php5-fpm.pid` endscript }
Ces configurations sont bien entendu à ajuster en fonction de vos propres configurations : par exemple, PHP-FPM génère par défaut un fichier php5-fpm.log.slow qui ne se termine pas par « .log » …