Плагін Nginx Munin не показує даних


9

Я хотів би відстежувати статистику NGinx через Munin, але плагіни Nginx не показують даних. Чи можливо діагностувати, чому, здається, працює лише один із плагінів munin nginx?

nginx munin

Сервер працює на CentOS 5.3

Відповіді:


14

Для отримання інформації про стан плагіни nginx покладаються на таку URL-адресу:

http://127.0.0.1/nginx_status

Зазвичай у nginx ця URL-адреса не налаштована для відображення даних про стан.

З документації плагінів я бачу, що nginx потрібно налаштувати для відображення даних про стан у спеціальній URL-адресі.

Вам потрібно включити статус nginx, додавши до конфігурації сайту наступні рядки:

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

Не забудьте перезапустити сервер після додавання цієї конфігурації та переконайтеся, що URL-адреса stus повертає дані про стан.

Для повної документації кожного плагіна ви можете запустити:

munindoc nginx_request

Сподіваюсь, це допомагає.


1
Побічна примітка: Запуск Ubuntu 16.04 з включенням nginx, як тут задокументовано, у моєму випадку був недостатнім. Крім того, мені довелося apt install libwww-perl timeна munin-вузлах для його журналу викладати проблеми з Use of uninitialized value $LWP::VERSIONnginx плагінами.
Томас Урбан

Ще одна сторона зауваження: Оскільки IPv6 сьогодні підтримується на серверах, URL-адреса за замовчуванням для nginx_ * плагінів, що використовують, http://localhost/можливо, віддасть перевагу IPv6 і, таким чином, буде невідповідним конфігурація nginx, що дозволяє тільки IPv4 localhost. Виправивши URL-адресу, /etc/munin/plugin-conf.d/munin-nodeщоб з http://127.0.0.1/nginx_statusчасом плагін працював.
Томас Урбан

4

На мій досвід, ці плагіни, ймовірно, не працюють через неправильну конфігурацію nginx. Ось короткий список того, що робити в цьому випадку:

1. Перевірте встановлення nginx

Nginx повинен бути скомпільований за допомогою модуля HttpStubStatusModule . Ви можете перевірити це, виконавши наступну команду (під sudo або root):

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

Якщо ви бачите наступний результат, ви можете йти вперед.

with-http_stub_status_module

В іншому випадку вам доведеться перекомпілювати nginx з увімкненим або встановленим необхідним модулем з іншого джерела (У моєму випадку репо Debian за замовчуванням мала правильну версію).

2. Перевірте конфігурацію nginx

Я припускаю, що ви розмістили та включили необхідну конфігурацію . Щоб побачити, чи працює він, можна sshна свій сервер і запустити

wget http://localhost/nginx_status

Якщо тут не виникає помилок, проблема полягає в налаштуванні плагінів. Якщо сервер повертає помилку тут, ви можете налагоджувати, змінивши конфігурацію:

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

Після цього у файлі /var/log/nginx/status.error.logможна побачити точну причину, через яку сервер повернув помилку:

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

У моєму випадку (як видно з журналу) проблема була client: ::1, тоді як конфігурація дозволяла доступ лише з127.0.0.1

Щоб вирішити проблему, ви можете дотримуватися пропозиції cepharum або змінити конфігурацію віртуального хоста:

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

(Зверніть увагу, що я також замінив listen: 127.0.0.1порт 80 (ipv4 + ipv6), оскільки попередній також не працював)

3. Перевірте конфігурацію системи та залежності

Щоб перевірити, чи працює сам плагін, запустіть

munin-run nginx_status

(зауважте, що плагін повинен бути "увімкнено" - символьне посилання має бути присутнім /etc/munin/plugins- прочитайте інструкцію, якщо ні)

Якщо ви отримуєте помилки з LWPбібліотекою (наприклад, LWP::UserAgentабо LWP::VERSION), у вашій системі відсутній пакет, необхідний nginx_statusплагіну.

На Debian / Ubuntu запустіть

apt install libwww-perl

На CentOS

yum install perl-libwww-perl

Після цього випробуйте плагін знову, використовуючи munin-run. Очікуваний вихід (цифри будуть різними):

total.value 1
reading.value 0
writing.value 1
waiting.value 0

На підставі повідомлень про помилку в /var/log/munin-update.log(Сервіс nginx_status на ім'я сервера / 127.0.0.1: 4949 не повернув даних для очікування мітки), я міг шукати роками, щоб дізнатися, що цього libwww-perlнемає. Велике спасибі за цю обширну відповідь.
BurninLeo

2

Можливо, корисно:

cd /etc/munin/plugins
munin-run PLUGINNAME

Додатково використовуйте параметр налагодження для запуску файлів.

Перевірте файл плагінів на наявність жорстко закодованих шляхів і переконайтеся, що вони правильні для вашої системи:

grep '/' PLUGINNAME

Плагін nginx може покладатися на компіляцію Nginx з певними модулями або виведення журналу у певному форматі. Чи є сторінка документації для плагінів?


2

Ключова річ - URL-адреса в конфігурації munin.

Ви будете потребувати

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

Примітка

nginx_status

Ні

nginx-status

0

Встановіть libwww-perl, після чого запустіть команду, munin-run nginx_statusщоб побачити статистику.
Перезавантажте сервіс муні-вузлів.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.