Supervision de serveurs Nginx avec Zabbix via le module stub_status

La surveillance des performances d'un serveur Nginx est essentielle pour garantir la disponibilité des services web. Cette méthode repose sur l'exploitation du module http_stub_status_module de Nginx, qui expose des métriques en temps réel, lesquelles sont ensuite récupérées par un agent Zabbix.

1. Prérequis et configuration de Nginx

Pour que Nginx puisse fournir des données de performance, il doit être compilé avec le module --with-http_stub_status_module. Vous pouvez vérifier la présence de ce module avec la commande nginx -V.

Modifeiz ensuite votre fichier de configuration Nginx (généralement nginx.conf ou un fichier dans sites-enabled) pour activer la page de statut :

server {
    listen 80;
    server_name localhost;

    location /status_nginx {
        stub_status on;
        access_log off;
        # Restriction d'accès pour la sécurité
        allow 127.0.0.1;
        allow 192.168.2.70; # Adresse du serveur Zabbix
        deny all;
    }
}

Après modification, validez la syntaxe et redémarrez le service :

nginx -t
systemctl restart nginx

Vérifiez le fonctionnement via curl :

curl http://127.0.0.1/status_nginx

Le résultat affichera des données telles que les connexions actives, les requêtes acceptées et traitées.

2. Création du script de collecte sur l'Agent Zabbix

Nous allons créer un script Bash pour extraire spécifiquement chaque valeur du flux de données Nginx. Créez un répertoire pour vos scripts de supervision :

mkdir -p /etc/zabbix/scripts/

Créez le fichier /etc/zabbix/scripts/nginx_metrics.sh avec le contenu suivant :

#!/bin/bash

METRIC="$1"
STATS_URL="http://127.0.0.1/status_nginx"

case $METRIC in
    active)
        curl -s "$STATS_URL" | awk '/Active connections/ {print $NF}'
        ;;
    accepts)
        curl -s "$STATS_URL" | sed -n '3p' | awk '{print $1}'
        ;;
    handled)
        curl -s "$STATS_URL" | sed -n '3p' | awk '{print $2}'
        ;;
    requests)
        curl -s "$STATS_URL" | sed -n '3p' | awk '{print $3}'
        ;;
    reading)
        curl -s "$STATS_URL" | awk '/Reading/ {print $2}'
        ;;
    writing)
        curl -s "$STATS_URL" | awk '/Writing/ {print $4}'
        ;;
    waiting)
        curl -s "$STATS_URL" | awk '/Waiting/ {print $6}'
        ;;
    *)
        echo "Usage: $0 {active|accepts|handled|requests|reading|writing|waiting}"
        exit 1
esac

Attribuez les permisisons nécessaires à l'utilisateur Zabbix :

chown zabbix:zabbix /etc/zabbix/scripts/nginx_metrics.sh
chmod +x /etc/zabbix/scripts/nginx_metrics.sh

3. Configuration des UserParameters dans Zabbix Agent

Pour faire le lien entre Zabbix et notre script, nous devons définir des UserParameter dans le fichier de configuration de l'agent (zabbix_agentd.conf) :

# Autoriser les caractères spéciaux dans les paramètres
UnsafeUserParameters=1

# Définition des clés de supervision
UserParameter=nginx.stats[*],/etc/zabbix/scripts/nginx_metrics.sh $1

Redémarrez l'agent Zabbix pour appliquer les changements :

systemctl restart zabbix-agent

4. Validation de la remontée de données

Depuis le serveur Zabbix (ou un proxy), utilisez l'outil zabbix_get pour tester la récupération d'une métrique :

zabbix_get -s 192.168.2.12 -k "nginx.stats[requests]"
zabbix_get -s 192.168.2.12 -k "nginx.stats[active]"

Si les valeurs numériques s'affichent, la configuration est correcte. Il ne vous reste plus qu'à importer votre template Nginx dans l'interface web de Zabbix et à l'associer à l'hôte cible. Les graphiques commenceront à se générer automatiquement dès la réception des premières données.

Étiquettes: Zabbix nginx Monitoring bash devops

Publié le 7 juillet à 17h55