Apache : loguer le temps pour servir une requête

Pour l’optimisation d’un site et son analyse, il peut être intéressant de savoir combien de temps Apache  met pour servir une requête.

C’est possible via le module mod_log_config et ses options de format de la directive LogFormat :

  • %T : le temps pour servir la requête en secondes
  • %D : le temps pour servir la requête en microsecondes

 

Exemple de configuration d’un domaine :

<VirtualHost *:8080>
    DocumentRoot /var/www/domain.com

    <Directory /var/www/domain.com>
        Options FollowSymLinks MultiViews
        AllowOverride All
        Order allow,deny
        allow from all
    </Directory>

    ServerName domain.com

    LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %T/%D" vhost
    CustomLog /var/log/apache2/domain.com/access.log vhost
    ErrorLog /var/log/apache2/domain.com/error.log
</VirtualHost>

Dans cet exemple, on ajoute le temps en secondes et en microsecondes à la fin d’un format classique.

Pour faire quelques tests, j’ai créé le fichier php suivant :

<?php
$us = rand(1, 999999);
usleep($us);
echo "slept for $us microseconds";

 

Exemple des logs générés :

127.0.0.1 - - [14/Aug/2015:17:26:41 +0200] "GET /slow.php HTTP/1.0" 200 29 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.107 Safari/537.36" 0/875640
127.0.0.1 - - [14/Aug/2015:17:26:46 +0200] "GET /slow.php HTTP/1.0" 200 29 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.107 Safari/537.36" 0/176823

Le temps en microsecondes affiché dans la page de test correspond bien au temps fourni par apache.