Le plugin Nginx Munin ne montre aucune donnée

9

Je voudrais surveiller les statistiques NGinx via Munin mais les plugins Nginx ne montrent aucune donnée. Est-il possible de diagnostiquer pourquoi un seul des plugins munin nginx semble fonctionner?

nginx munin

Le serveur fonctionne sur CentOS 5.3

Miko
la source

Réponses:

14

Les plugins nginx s'appuient sur l'URL suivante pour obtenir les informations d'état:

http://127.0.0.1/nginx_status

Habituellement, nginx n'a pas cette URL configurée pour afficher les données d'état.

De la documentation des plugins, je vois que nginx doit être configuré pour afficher les données d'état dans une URL spécifique.

Vous devez activer l'état nginx en ajoutant les lignes suivantes à la configuration du site:

 server {
       listen 127.0.0.1;
       server_name localhost;
       location /nginx_status {
               stub_status on;
               access_log   off;
               allow 127.0.0.1;
               deny all;
       }
 }

N'oubliez pas de redémarrer le serveur après avoir ajouté cette configuration et assurez-vous que l'URL stus renvoie les données d'état.

Pour la documentation complète de chaque plugin, vous pouvez exécuter:

munindoc nginx_request

J'espère que cela t'aides.

Tom Feiner
la source
1
Note latérale: Exécuter Ubuntu 16.04 en activant nginx comme documenté ici n'était pas suffisant dans mon cas. De plus, je devais apt install libwww-perl timesur les nœuds munin pour ses problèmes de journalisation avec Use of uninitialized value $LWP::VERSIONles plugins nginx.
Thomas Urban
Autre remarque: IPv6 étant pris en charge sur les serveurs aujourd'hui, l'URL par défaut des plugins nginx_ * utilisant http://localhost/pourrait préférer IPv6 et va donc ne pas correspondre à la configuration nginx qui autorise IPv4 localhost uniquement. En corrigeant l'URL /etc/munin/plugin-conf.d/munin-nodepour http://127.0.0.1/nginx_statusfinalement faire fonctionner le plugin.
Thomas Urban
4

D'après mon expérience, ces plugins ne fonctionnent probablement pas en raison d'une mauvaise configuration de nginx. Voici une courte liste de ce qu'il faut faire dans ce cas:

1. Vérifiez l'installation de nginx

Nginx doit être compilé avec le module HttpStubStatusModule . Vous pouvez le vérifier en exécutant la commande suivante (sous sudo ou root):

nginx -V 2>&1 | grep -o with-http_stub_status_module

Si vous voyez la sortie suivante, vous pouvez continuer.

with-http_stub_status_module

Sinon, vous devez recompiler nginx avec le module requis activé ou installer à partir d'une source différente (dans mon cas, le dépôt Debian par défaut avait la bonne version).

2. Vérifiez la configuration de nginx

Je suppose que vous avez placé et activé la configuration requise . Pour voir si cela fonctionne, vous pouvez accéder sshà votre serveur et exécuter

wget http://localhost/nginx_status

Si vous n'obtenez aucune erreur ici, alors le problème est la configuration du plugin. Si le serveur renvoie une erreur ici, vous pouvez déboguer en modifiant la configuration:

location /nginx_status {
    stub_status on;
    access_log   off;
    error_log    /var/log/nginx/status.error.log;
    allow 127.0.0.1;
    deny all;
}

Après cela, dans le fichier, /var/log/nginx/status.error.logvous pouvez voir la raison exacte pour laquelle le serveur a renvoyé une erreur:

[error] 2203#0: *1442 access forbidden by rule, client: ::1, server: localhost, request: "GET /nginx_status HTTP/1.1", host: "localhost"

Dans mon cas (comme vous pouvez le voir dans le journal), le problème était client: ::1que la configuration n'autorisait l'accès127.0.0.1

Pour résoudre le problème, vous pouvez suivre la suggestion de cepharum ou modifier la configuration de l'hôte virtuel:

server {
        listen 80;
        listen [::]:80;
        server_name localhost;

        location /nginx_status {
                stub_status on;
                access_log off;
                allow 127.0.0.1;
                allow ::1;
                deny all;
        }
}

(Notez que j'ai également remplacé listen: 127.0.0.1par le port 80 (ipv4 + ipv6) car le premier ne fonctionnait pas non plus)

3. Vérifiez la configuration et les dépendances du système

Pour vérifier si le plugin lui-même fonctionne, exécutez

munin-run nginx_status

(notez que le plugin doit être "activé" - un lien symbolique doit être présent sur /etc/munin/plugins- sinon lire le manuel )

Si vous obtenez des erreurs avec la LWPbibliothèque (par exemple LWP::UserAgentou LWP::VERSION), votre système manque un package requis par le nginx_statusplugin.

Sur Debian / Ubuntu, exécutez

apt install libwww-perl

Sur CentOS

yum install perl-libwww-perl

Après cela, testez à nouveau le plugin munin-run. La sortie attendue (les nombres seront différents):

total.value 1
reading.value 0
writing.value 1
waiting.value 0
badew
la source
Sur la base des messages d'erreur dans /var/log/munin-update.log(Service nginx_status sur servername / 127.0.0.1: 4949 n'a renvoyé aucune donnée pour l'attente d'étiquette), j'aurais pu rechercher des années pour découvrir ce qui libwww-perlmanquait. Merci beaucoup pour cette réponse détaillée.
BurninLeo
2

Peut-être utile:

cd /etc/munin/plugins
munin-run PLUGINNAME

Utilisez également l'option de débogage pour exécuter Munin.

Vérifiez le fichier du plugin pour tous les chemins codés en dur et vérifiez qu'ils sont corrects pour votre système:

grep '/' PLUGINNAME

Le plugin nginx peut dépendre de la compilation de Nginx avec certains modules ou de la sortie du journal dans un certain format. Existe-t-il une page de documentation pour les plugins?

Carpe Noctem
la source
2

L'élément clé est l'URL dans la configuration de munin.

Tu auras besoin de

[nginx*]
env.url http://localhost/nginx_status

Remarque

nginx_status

ne pas

nginx-status
Tien Do Xuan
la source
0

Installez libwww-perl puis exécutez la commande munin-run nginx_statuspour voir les statistiques.
Redémarrez le service Muni-node.

Izunna Calvin DIke
la source