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" :
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" :
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 :
Nous voyons aussi nos différentes métriques :
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 :
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.
bonjour mickael,
j’apprécie vos cours et tuto sur le web. merci pour ce boulot.
merci