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.

Graphe Nginx Graphe Nginx Graphe Nginx

Chez Sysnove, nous nous engageons à ce que nos serveurs répondent aux besoins énoncés par le client. Ce genre de métrique est fondamentale.

À propos de l'auteur



Guillaume est l'un des deux fondateurs et cogérants de Sysnove. Développeur Python et administrateur système passionné de logiciel libre et des technologies liées à Internet, il participe à divers projets, notamment le fournisseur d'accès Internet Aquilenet ainsi que la Fédération FDN.

Chez Sysnove, son rôle consiste à mettre en place et administrer les infrastructures nécessaires à l'hébergement des services fournis aux clients. En tant que directeur général, il gère aussi les aspects administratifs de l'entreprise.