Gestion des logs

De Wiki de Jordan LE NUFF
< Technique‎ | Apache
Révision datée du 14 mai 2020 à 09:22 par Jordan (discussion | contributions) (Page créée avec « == 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, q… »)
(diff) ← Version précédente | Voir la version actuelle (diff) | Version suivante → (diff)
Sauter à la navigation Sauter à la recherche

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.