El complemento Nginx Munin no muestra datos

9

Me gustaría monitorear las estadísticas de NGinx a través de Munin, pero los complementos de Nginx no muestran datos. ¿Es posible diagnosticar por qué solo uno de los complementos munin nginx parece estar funcionando?

nginx munin

El servidor se ejecuta en CentOS 5.3

Miko
fuente

Respuestas:

14

Los complementos nginx se basan en la siguiente URL para obtener la información de estado:

http://127.0.0.1/nginx_status

Por lo general, nginx no tiene esta URL configurada para mostrar datos de estado.

De la documentación de los complementos, veo que nginx debe configurarse para mostrar datos de estado en una URL específica.

Debe habilitar el estado nginx agregando las siguientes líneas a la configuración del sitio:

 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;
       }
 }

No olvide reiniciar el servidor después de agregar esta configuración, y asegúrese de que la URL stus devuelva los datos de estado.

Para obtener la documentación completa de cada complemento, puede ejecutar:

munindoc nginx_request

Espero que esto ayude.

Tom Feiner
fuente
1
Nota al margen: Ejecutar Ubuntu 16.04 habilitando nginx como se documenta aquí no fue suficiente en mi caso. Además, tuve que apt install libwww-perl timeusar los nodos munin por sus problemas de registro con Use of uninitialized value $LWP::VERSIONcomplementos nginx.
Thomas Urban
Otra nota al margen: dado que IPv6 es compatible con los servidores de hoy en día, la URL predeterminada de los complementos nginx_ * que usan http://localhost/podría preferir IPv6 y, por lo tanto, no coincidirá con la configuración de nginx, que solo permite IPv4 localhost. Al arreglar la URL /etc/munin/plugin-conf.d/munin-nodepara que http://127.0.0.1/nginx_statusfinalmente el plugin funcione.
Thomas Urban
4

En mi experiencia, es probable que estos complementos no funcionen debido a la mala configuración de nginx. Aquí hay una lista breve de qué hacer en este caso:

1. Verifique la instalación de nginx

Nginx debe compilarse con el módulo HttpStubStatusModule . Puede verificar eso ejecutando el siguiente comando (bajo sudo o root):

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

Si ve el siguiente resultado, es bueno seguir adelante.

with-http_stub_status_module

De lo contrario, debe volver a compilar nginx con el módulo requerido habilitado o instalar desde una fuente diferente (en mi caso, el repositorio predeterminado de Debian tenía la versión correcta).

2. Verifique la configuración de nginx

Supongo que ha colocado y habilitado la configuración requerida . Para ver si funciona, puede sshir a su servidor y ejecutar

wget http://localhost/nginx_status

Si no obtiene errores aquí, entonces el problema es la configuración del complemento. Si el servidor devuelve un error aquí, puede depurar modificando la configuración:

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

Después de eso, en el archivo /var/log/nginx/status.error.logpuede ver la razón exacta por la cual el servidor devolvió un error:

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

En mi caso (como puede ver en el registro) el problema era client: ::1que la configuración solo permitía el acceso desde127.0.0.1

Para resolver el problema, puede seguir la sugerencia de cepharum o modificar la configuración del host virtual:

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;
        }
}

(Tenga en cuenta que yo también reemplazó listen: 127.0.0.1con el puerto 80 (IPv4 + IPv6) ya que el primero también no funcionaba)

3. Verifique la configuración del sistema y las dependencias

Para verificar si el complemento funciona, ejecuta

munin-run nginx_status

(tenga en cuenta que el complemento debe estar "activado" - debe haber un enlace simbólico en /etc/munin/plugins- lea el manual si no)

Si obtiene errores con la LWPbiblioteca (p. Ej. LWP::UserAgentO LWP::VERSION), a su sistema le falta un paquete requerido por el nginx_statuscomplemento.

En Debian / Ubuntu, ejecute

apt install libwww-perl

En CentOS

yum install perl-libwww-perl

Después de eso, pruebe el complemento nuevamente usando munin-run. La salida esperada (los números serán diferentes):

total.value 1
reading.value 0
writing.value 1
waiting.value 0
badew
fuente
Basado en los mensajes de error en /var/log/munin-update.log(Servicio nginx_status en servername / 127.0.0.1: 4949 no devolvió datos para la etiqueta en espera), podría haber buscado durante años para descubrir que libwww-perlfaltaba. Muchas gracias por esta extensa respuesta.
BurninLeo
2

Posiblemente útil:

cd /etc/munin/plugins
munin-run PLUGINNAME

Además, use la opción de depuración para ejecutar munin.

Verifique el archivo del complemento para ver si hay rutas codificadas y verifique que sean correctas para su sistema:

grep '/' PLUGINNAME

El complemento nginx puede confiar en que Nginx se compila con ciertos módulos o la salida de registro en un formato determinado. ¿Hay alguna página de documentación para los complementos?

CarpeNoctem
fuente
2

Lo clave es la url en munin config.

Necesitará

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

Nota

nginx_status

No

nginx-status
Tien Do Xuan
fuente
0

Instale libwww-perl y luego ejecute el comando munin-run nginx_statuspara ver las estadísticas.
Reinicie el servicio muni-node.

Izunna Calvin Dique
fuente