Gestion des logs
Présentation
Cette page a pour objet de décrire comment implémenter la gestion des logs dans Apache.
Log par proxy
Pour logger les adresses IP distantes, qui passent par un proxy donc, il faut ajouter la directive suivante dans le fichier /local/www/current/conf/httpd.conf
dans la section log_config_module
:
<IfModule log_config_module>
...
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%h %l %u %t \"%r\" %>s %b" common
<IfModule proxy_module>
LogFormat "%{X-Forwarded-For}i %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" proxy
</IfModule>
<IfModule logio_module>
# You need to enable mod_logio.c to use %I and %O
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combinedio
</IfModule>
...
</IfModule>
Cette ligne permet de déclarer un format de log spécifique, nommé proxy
. La variable %{X-Forwarded-For}i
représente l'adresse IP distante qui a envoyé la requête au proxy.
Une fois ce format déclaré, il faut l'appliquer aux requêtes "proxyfiées". Pour ce faire, dans la section VirtualHost
correspond à l'application à logger, il faut ajouter/modifier les lignes suivantes :
<VirtualHost *:80>
...
SetEnvIf X-Forwarded-For "^.*\..*\..*\..*" forwarded
CustomLog "|/usr/sbin/rotatelogs -n 5 /data/logs/${url_app}/${url_app}_http_access.log 10M" proxy env=forwarded
CustomLog "|/usr/sbin/rotatelogs -n 5 /data/logs/${url_app}/${url_app}_http_access.log 10M" combined env=!forwarded
ErrorLog "|/usr/sbin/rotatelogs -n 5 /data/logs/${url_app}/${url_app}_http_error.log 10M"
...
</VirtualHost>
La directive SetEnvIf
permet de définir une variable forwarded
uniquement si un en-tête X-Forwarded-For
est déclaré dans la requête et qu'il respecte l'expression régulière ^.*\..*\..*\..*
. Plus d'informations sur la documentation officielle d'Apache sur la directive SetEnvIf.
La partie proxy env=forwarded
indique d'utiliser le format de log proxy
dans le cas ou la variable forwarded
existe.
La partie combined env=!forwarded
indique d'utiliser le format de log combined
dans le cas ou la variable forwarded
n'existe pas.
Rotation des logs
Il est possible d'intégrer une rotation des logs directement dans la configuration Apache.
Pour ce faire, il faut avant tout localiser la commande rotatelogs sur le serveur dans le dossier des binaires d'Apache avec la commande suivante :
find /local/www/current -name rotatelogs
Exemple de retour :
/local/www/current/bin/rotatelogs
Une fois la commande localisée, adapter la déclaration des fichiers de logs dans la configuration Apache.
Exemple de configuration de rotation de logs :
<VirtualHost *:80>
ServerName pprd-appli.mydomain.com
DocumentRoot "/data/www/PREPROD/appli/"
ErrorLog "|/local/www/current/bin/rotatelogs -l -f -n 15 /data/logs/${app_name}/${url_app}_http_error.log 10M"
CustomLog "|/local/www/current/bin/rotatelogs -l -f -n 15 /data/logs/${app_name}/${url_app}_http_access.log 10M" combined
LogLevel debug
<Directory "/data/www/PREPROD/appli/">
DirectoryIndex index.php
Options FollowSymLinks
AllowOverride All
Require all granted
</Directory>
</VirtualHost>
Les logs sont paramétrés pour ne tourner que sur 15 fichiers d'une taille maximale de 10M.
Plus d'informations sur la documentation officielle d'Apache : https://httpd.apache.org/docs/2.4/fr/programs/rotatelogs.html.