Trop souvent, la supervision se limite à retourner des alertes quand certaines valeurs dépassent certains seuils. Classiquement, on retrouve toujours des sondes qui représentent des indicateurs de pannes proches voire déjà en cours : Ping, Load Average, Disk Usage, Memory Usage, etc.
Mais au delà de ces marqueurs universels, un système de supervision doit aussi permettre de détecter les problèmes avant qu'ils ne surviennent, et d'aider à résoudre les problèmes une fois qu'ils sont survenus. C'est notamment dans ce deuxième rôle qu'interviennent les graphes, en aidant à cibler les causes du problème le plus rapidement possible.
Dans cet article, nous allons voir comment superviser une métrique trop souvent ignorée, le niveau d'utilisation du serveur web. Si votre site web commence à ralentir, c'est à peu près la seule valeur qui permettra de savoir si le problème vient d'un nombre de visites mal estimé par le client, ou d'un besoin en ressources mal estimé par l'administrateur. Ça vous aidera aussi à isoler rapidement la source du problème.
Configurer Nginx
Au niveau de Nginx, il faut commencer par activer le module StubStatus dans un virtualhost. Par exemple dans /etc/nginx/sites-available/www.sysnove.fr
:
server {
listen 80;
server_name www.sysnove.fr;
root /srv/www/sysnove.fr/www;
location /nginx_status { # URL du module, vous pouvez en choisir une autre, mais celle-ci est assez standard
stub_status on; # On active le module, qui répondra aux requêtes sur cette url
access_log off; # On désactive les logs sur cette url
allow 10.42.0.19; # On autorise l'accès depuis l'IP du serveur de supervision
allow fd42::1:19; # Il a aussi une IPv6
deny all; # On refuse l'accès à tout le reste
}
}
Rechargez Nginx, et vous devriez pouvoir accéder à cette url depuis les IP autorisées. Elle retourne simplement du texte, quelque chose comme ça :
Active connections: 1
server accepts handled requests
16630948 16630948 31070465
Reading: 0 Writing: 1 Waiting: 0
On voit notamment qu'il y a actuellement une connexion sur ce domaine (la votre).
Sonde Shinken/Nagios
La suite consiste à remonter ces informations dans Shinken.
À ma connaissance, la sonde la plus complète est celle de regilero qui récupère le nombre de connexions actuelles (actives, en lecture, en écriture, en attente), mais qui en plus calcule le nombre de requêtes par seconde, le nombre de connexions par seconde et le nombre de requêtes par connexion.
L'installation se fait très simplement, il suffit de télécharger le script dans le répertoire des scripts Shinken :
sudo wget https://raw.github.com/regilero/check_nginx_status/master/check_nginx_status.pl /usr/local/shinken/libexec/
Sous Debian, il faut aussi installer quelques bibliothèques Perl :
sudo aptitude install libwww-perl
Puis vous pouvez tester le script :
sudo -u shinken /usr/local/shinken/libexec/check_nginx_status.pl -H www.sysnove.fr
Et vous devriez obtenir quelque chose comme ça :
NGINX OK - 0.187 sec. response time, Active: 1 (Writing: 1 Reading: 0 Waiting: 0) ReqPerSec: 0.000 ConnPerSec: 0.000 ReqPerConn: 1.029|Writing=1;Reading=0;Waiting=0;Active=1;ReqPerSec=0.000000;ConnPerSec=0.000000;ReqPerConn=1.028521
Il ne reste plus qu'à configurer Shinken en créant un nouveau service qui utilise cette sonde, et en l'appliquant sur les hôtes concernés. Le plus simple est d'utiliser des packs. Nous en proposons un sur notre Github. Installez ce pack dans /usr/local/shinken/etc/packs/
, et ajoutez simplement use nginx
dans la définition des hôtes équipés de nginx.
Bug HTTPS
Il y a un bug dans la lib Perl au niveau de HTTPS. Si vous le rencontrez, je vous renvoie à la discussion sur Github.
Graphes
Tout ce que vous voyez après le |
sur la sortie de la sonde, c'est le perfdata, un format de données que Shinken va transmettre à PNP4Nagios ou Graphite pour tracer des graphes.
Chez Sysnove, nous utilisons PNP4Nagios. Nous avons donc développé un template spécial pour cette sonde, check_nginx_status.php.
Pour l'installer, il suffit de le télécharger dans le répertoire des templates PNP4Nagios :
sudo wget https://gist.github.com/maethor/8714514 /usr/local/pnp4nagios/share/templates/
Il n'y a rien à redémarrer, PNP4Nagios le prendra en compte dès le rechargement de la page. Et vous voici avec de jolis graphes d'utilisation de Nginx.