Плагин Nginx Munin не показывает данных


9

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

нгинкс мунин

Сервер работает на 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;
       }
 }

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

Для полной документации каждого плагина, вы можете запустить:

munindoc nginx_request

Надеюсь это поможет.


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

Еще одно замечание: поскольку сегодня на серверах поддерживается 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

Дополнительно используйте опцию отладки munin-run.

Проверьте файл плагина на наличие жестко закодированных путей и убедитесь, что они соответствуют вашей системе:

grep '/' PLUGINNAME

Плагин nginx может полагаться на компиляцию Nginx с определенными модулями или вывод журнала в определенном формате. Есть ли страница документации для плагинов?


2

Ключевым является URL в конфиге munin.

Тебе понадобится

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

Запись

nginx_status

Не

nginx-status

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.