Statistiques du serveur web Apache via mod_status

I. Présentation

Lorsque l'on gère une infrastructure web, il est important de mettre en place des outils nous permettant de savoir comment se porte cette infrastructure. Nombre de requête par seconde, uptime du serveur, taille moyenne des requêtes, trafic total généré sont autant de métriques qui peuvent aider un administrateur système / web à comprendre le comportement normal du serveur et ainsi déceler un comportement anormal par rapport à ce premier.

Bien heureusement, il existe dans Apache un module présent par défaut souvent méconnu permettant d'effectuer cette tâche : mod_status. Celui-ci permet facilement d'obtenir quelques métriques de façon très simple. C'est ce que nous allons voir dans cet article

II. Utilisation de mod_status

L'utilisation de mod_status est très simple, il suffit de voir si celui-ci est présent sur apache, ce qui est systématique pour les apache sur Debian et CentOS. Pour Debian, il faut aller voir dans répertoire "/etc/apache2/mods-enabled" :

modstatusApache01
Les deux fichiers "status.conf" et "status.load" dans le répertoire mods-enabled montrent que le module est actif.

 On voit ici que mod_status.load et .conf sont bien présents. Pour CentOS, il faut aller voir qu'une ligne "LoadModules mod_status" est bien présente dans le fichier "/etc/httpd/conf/httpd.conf". Une fois cette vérification faite, il faut aller configurer notre mod_status qui, bien qu'il soit présent par défaut, n'est pas pour autant consultable. Sous Debian, il faut se rendre dans le fichier "/etc/apache2/mods-enabled/mod_status.conf". Sous CentOS, on rajoutera la même configuration à la fin du fichier "/etc/httpd/conf/httpd.conf" :

modstatusApache02
Ceci est la configuration par défaut du module sur le Apache2 de Debian. On voit que seules les adresses localhost sont autorisées

Sous Debian, nous allons par défaut voir une configuration ressemblant à cela, sous Centos, il faudra l'écrire intégralement à la fin du fichier indiqué. Pour information le "ExtendedStatus On" permet l'activation d'information supplémentaire mise dans le rapport.

On voit bien que par défaut sous Debian, on ne peut consulter la page que depuis 127.0.0.1. Il faut bien entendu changer cette IP pour mettre une plage d'IP connue ou juste l'IP du système de supervision par exemple. Une fois cela fait, on rechargera la configuration de notre serveur web, sous Debian :

service apache2 reload

Sous Centos :

service httpd reload

Note : Pour des raisons de sécurité, il est possible de changer l'URL à laquelle on pourra atteindre le serveur, il faut pour cela simplement changer dans la configuration le "/server-status" en ce que nous voulons dans la balise < Location.. >, par exemple si on remplace "/server-status" par "/spvn", on atteindra la page via "http://notreserveur/spvn". Cette technique ainsi que la restriction par l'IP pourra protéger un peu plus les informations (potentiellement sensibles) que renvoi le rapport.

On pourra alors aller voir notre page, on se rend pour cela sur http://notreserveur/server-status. Une fois sur le rapport, voila ce que nous pouvons voir :

modstatusApache03
Ceci est le rapport standard obtenu via mod_status sur Apache2

Nous voyons aussi nos différentes métriques :

modstatusApache04
Des informations sur les requêtes en court de traitement.

On peut également voir un peu plus bas une vue synthétique des logs serveur et voir quelle requête il est en train de traiter. Pour ceux qui souhaiteraient rester sur cette belle page avec un rafraîchissement automatique, pour le peu que votre navigateur le supporte, il faut ajouter "?refresh=n" avec "n" en nombre de seconde pour avoir un rafraîchissement de la page toutes les "n" secondes. Il faut savoir que les valeurs du rapport ne se mettent à jour qu'à chaque rafraîchissement ou chargement de celle-ci.

III. Format supervision

Le format normal renvoyé par mod_status est très facile à lire pour un être humain mais l'objectif n'est ici pas que le sysadmin aille voir de temps en temps comment se porte le serveur, il serait plus facile d'automatiser la tâche, de grapher les valeurs dans un système de supervision centralisé puis d’envoyer des alertes en cas de comportement anormal. Mod_status prévoit cette possibilité en générant un rapport en mode texte simple et non HTML afin que celui-ci puisse être parsé (lu/analysé) facilement par des scripts (Powershell, Python, Bash, etc..). Pour obtenir cette version allégée du rapport, il faut saisir la même URL que d'habitude y ajoutant "?auto" à la fin :

modstatusApache05
On obtient donc un rapport plus court et plus facilement analysable par un script.

Ces informations sont donc facilement parsable via un script qui sera en capacité de communiquer les statistiques à un système de supervision qui générera à son tour graphique et statistiques.

Note : Il est important de porter une attention toute particulière à la sécurité lorsque l'on met un tel processus de supervision en place. On voit très clairement que le rapport est en HTML donc passe en clair sur le réseau. On peut mettre en place quelques techniques pour ralentir un éventuel pirate souhaitant avoir ces informations comme les versions PHP, Apache, etc ... avec des techniques expliquées plus haut. Il est important de contrôler où vont ces flux d'information et qui  y a accès.

Partagez cet article Partager sur Twitter Partager sur Facebook Partager sur Linkedin Partager sur Google+ Envoyer par mail

Mickael Dorigny

Fondateur d'IT-Connect.fr et d'Information-security.fr. Auditeur sécurité chez Amossys.

    mickael has 478 posts and counting.See all posts by mickael

    Une pensée sur “Statistiques du serveur web Apache via mod_status

    • bonjour mickael,
      j’apprécie vos cours et tuto sur le web. merci pour ce boulot.
      merci

      Répondre

    Laisser un commentaire

    Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

     

    Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.