La surveillance d’un serveur web passe très souvent par l’analyse des logs, et plus particulièrement le désormais célèbre access log, qui enregistre toutes sortes d’informations à chaque requête.

Le log access c’est quoi ?

L’Access Log (en anglais) est un fichier texte généré par Apache à chaque requête. Il se compose d’une multitude de lignes (ou entrée), chaque ligne correspondant à une requête.
Les informations stockées sont diverses : IP, date, heure, ressource demandée, code de réponse etc. Autant dire que c’est une mine d’informations très utiles pour qui sait les exploiter.

Lire le log access

Il faut déjà localiser ce fameux fichier. Par défaut, sous debian, il y a de fortes chances de le trouver dans :

  • /var/log/apache2/access.log

A noter que l’utilisation d’un vhost peut modifier cet emplacement. Ensuite, voyons comment il est agencé : par défaut, chaque ligne (1 ligne = 1 entrée = 1 requête serveur) est de la forme suivante :

LogFormat "%h %l %u %t \"%r\" %>s %b" common
  • %h : adresse ip du client.
  • %l : Identité du client. Retourne un tiret (-) si l’information n’est pas disponible.
  • %u : userid du client si la requête est authentifié.
  • %t : date de la requête.
  • \"%r\" : la ligne de requête qui inclus la méthode HTTP, la ressource demandée et le protocole (ex: HTTP/1.1).
  • %>s : code de retour envoyé au client.
  • %b : taille de la ressource demandée.

Un exemple d’entrée :

138.68.10.xxx - - [04/Apr/2019:10:49:07 +0200] "POST /xmlrpc.php HTTP/1.1" 403 3706 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:62.0) Gecko/20100101 Firefox/62.0"

Custom Log format

Il est possible de customiser le format des entrées log en utilisant mod_log_config. Pour cela, on utilise deux directives apache :

  • LogFormat : spécifie le format des données à écrire et donne un identifiant
  • CustomLog qui donnera l’emplacement du fichier

Exemple, on défini notre format personnalisé dans la config apache, on le nomme vcommon :

LogFormat "%V %h %l %u %t \"%r\" %s %b" vcommon

Ensuite, dans notre vhost, il suffit de spécifier notre nouveau format :

<VirtualHost *:80>
   ...
   CustomLog /var/log/apache2/vhosts-access.log vcommon
</VirtualHost>

A noter qu’il existe un Custom Log déjà défini dans Apache, appelé combined :

LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-agent}i\"" combined

Il ajoute deux nouvelles directives \"%{Referer}i\" et \"%{User-agent}i\".

Références externes