Zabbix и Munin для сбора статистики Nginx

Игорь Грегорченко

Профилирование и мониторинг крайне важны для стабильной работы высоконагруженной системы. Кроме логов ошибок и запросов, Nginx имеет собственный модуль статистики [https://nginx.org/ru/docs/http/ngx_http_stub_status_module.html ngx_http_stub_status_module] с базовыми данными о работе веб-сервера.

Модуль по умолчанию не входит в сборку системы, так что Nginx придется пересобрать со строчкой –with-http_stub_status_module.

Затем необходимо включить статистику в файле конфигурации /etc/nginx/nginx.conf, дополнив блок server следующими параметрами:

location /nginx_status {

stub_status on;

access_log off;

**allow 127.0.0.1;**

deny all;

}
## Можно просмотреть только локально

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

При подключении по адресу http://somesite.com/nginx_status будет доступна следующая статистика:

  • Active connections – число активных соединений;
  • Accepts – суммарное количество принятых соединений клиентов;
  • Handled – суммарное число обработанных соединений, если отличается от accepts, до достигнут какой-то системный лимит;
  • Requests – суммарное число клиентских запросов;
  • Reading – число соединений, в которых веб-сервер читает заголовки в данный момент;
  • Writing – число соединений, в которых веб-сервер отвечает клиенту в данный момент;
  • Waiting – текущее число неактивных соединений, ожидающих запроса.

Munin для сбора статистики

Встроенный модуль статистики Nginx подходит разве что для одноразового анализа проблем. Так что для постоянного отслеживания данных этот модуль лучше использовать в паре с системой мониторинга, например Munin.

После установки и начальной настройки, Munin нужно подключить к Nginx. Для этого необходимо отредактировать файл конфигурации веб-сервера, добавив:

location /munin {

alias /var/www/html/munin/;

allow 127.0.0.1;

**allow XX.XX.XX.XX;**

deny all;

index index.php index.html index.htm;

location ~* .(png|jpg|jpeg|gif|ico)$ {

}

}
## Добавьте свой IP, если нужно подключаться из “мира”

Или же можно создать отдельный файл конфигурации /etc/nginx/conf.d/munin.conf со следующим содержанием:

listen 80 default_server;

access_log off;

server_name _;

server_name_in_redirect off;

root /var/www/html;

location /munin {

alias /var/www/html/munin/;

allow 127.0.0.1;

allow XX.XX.XX.XX;

deny all;

index index.php index.html index.htm;

location ~* .(png|jpg|jpeg|gif|ico)$ {

}

}

location /nginx_status {

stub_status on;

access_log off;

allow 127.0.0.1;

deny all;

}

}
## В этом случае nginx_status можно убрать из основного файла конфигурации

Не забудьте перезагрузить Nginx и проверить конфигурацию. После можно проверить, что Munin видит веб-сервер:

# **munin-node-configure --suggest | grep nginx**

nginx_request | no | yes

nginx_status | no | yes
## Указывает, что плагины отключены, но модуль статистики подключен

Теперь подключим плагины для отрисовки графиков по метрикам Nginx:

ln -s /usr/share/munin/plugins/nginx_request /etc/munin/plugins/ -v

ln -s /usr/share/munin/plugins/nginx_status /etc/munin/plugins/ -v
## Создает символьные линки к плагинам

Встроенные в Munin плагины обеспечивают информацию о статусе сервера и количестве запросов. Дополнительно можно подключить [https://github.com/perusio/nginx-munin/ неофициальные плагины] для расширения функционала:

wget https://github.com/perusio/nginx-munin/archive/master.zip

unzip master.zip

cd nginx-munin-master/

cp nginx_connection_request nginx_memory /etc/munin/plugins/ -fv
## Закачка и размещение дополнительных плагинов мониторинга соединений/запросов и RAM

Не забудьте перезагрузить munin-node.

Графики

Munin выводит статистику в виде графиков, которые позволят быстро оценить масштаб проблемы. К примеру, нужно проверить конфигурацию сервера, если большое заметили большое количество ошибок HTTP:

А такой график говорит о том, что стоит проверить работу системы кэширования:

Использование Zabbix

Для парсинга статистики Nginx можно воспользоваться системой для мониторинга Zabbix. Если вы уже используете Zabbix, то подключение метрик веб-сервера не составит труда. Сначала нужно создать директорию для скриптов и положить в нее скрипт для парсинга:

mkdir /etc/zabbix/scripts/

vim /etc/zabbix/scripts/nginx-stats.sh

#!/bin/bash

### OPTIONS VERIFICATION

if [[ -z “$1” || -z “$2” || -z “$3″ ]]; then

exit 1

fi

##### PARAMETERS #####

RESERVED=”$1″

METRIC=”$2″

STATSURL=”$3″

#

CURL=”/usr/bin/curl”

TTLCACHE=”55″

FILECACHE=”/tmp/zabbix.nginx.`echo $STATSURL | md5sum | cut -d” ” -f1`.cache”

TIMENOW=`date ‘+%s’`

##### RUN #####

if [ -s “$FILECACHE” ]; then

TIMECACHE=`stat -c”%Z” “$FILECACHE”`

else

TIMECACHE=0

fi

if [ “$(($TIMENOW – $TIMECACHE))” -gt “$TTLCACHE” ]; then

echo “” >> $FILECACHE # !!!

DATACACHE=`$CURL –insecure -s “$STATSURL”` || exit 1

echo “$DATACACHE” > $FILECACHE # !!!

fi

if [ “$METRIC” = “active” ]; then

cat $FILECACHE | grep “Active connections” | cut -d’:’ -f2

fi

if [ “$METRIC” = “accepts” ]; then

cat $FILECACHE | sed -n ‘3p’ | cut -d” ” -f2

fi

if [ “$METRIC” = “handled” ]; then

cat $FILECACHE | sed -n ‘3p’ | cut -d” ” -f3

fi

if [ “$METRIC” = “requests” ]; then

cat $FILECACHE | sed -n ‘3p’ | cut -d” ” -f4

fi

if [ “$METRIC” = “reading” ]; then

cat $FILECACHE | grep “Reading” | cut -d’:’ -f2 | cut -d’ ‘ -f2

fi

if [ “$METRIC” = “writing” ]; then

cat $FILECACHE | grep “Writing” | cut -d’:’ -f3 | cut -d’ ‘ -f2

fi

if [ “$METRIC” = “waiting” ]; then

cat $FILECACHE | grep “Waiting” | cut -d’:’ -f4 | cut -d’ ‘ -f2

fi

#

exit 0
## Проверка статуса и сбор статистики из Nginx

Обратите внимание, что при проверке метрик используется кэширование для уменьшения количества запросов.

Не забудьте назначить права доступа:

chown zabbix:zabbix -R /etc/zabbix/scripts/

chmod 750 /etc/zabbix/scripts/

chmod 700 /etc/zabbix/scripts/nginx-stats.sh
## Доступ к директории скриптов из мира запрещен

Осталось отредактировать параметры агента Zabbix в файле /etc/zabbix/zabbix_agentd.conf:

UserParameter=nginx[*],/etc/zabbix/scripts/nginx-stats.sh "none" $1 $2
## Указывает скрипт для парсинга nginx-stats.sh

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

Самое главное

Мониторинг работы Nginx при помощи Munin или Zabbix поможет быстро реагировать на проблемы и получать информацию об ошибках в виде наглядных графиков или уведомлений.

Останні статті

Обучение Power BI – какие онлайн курсы аналитики выбрать

Сегодня мы поговорим о том, как выбрать лучшие курсы Power BI в Украине, особенно для…

13.01.2024

Work.ua назвал самые конкурентные вакансии в IТ за 2023 год

В 2023 году во всех крупнейших регионах конкуренция за вакансию выросла на 5–12%. Не исключением…

08.12.2023

Украинская IT-рекрутерка создала бесплатный трекер поиска работы

Unicorn Hunter/Talent Manager Лина Калиш создала бесплатный трекер поиска работы в Notion, систематизирующий все этапы…

07.12.2023

Mate academy отправит работников в 10-дневный оплачиваемый отпуск

Edtech-стартап Mate academy принял решение отправить своих работников в десятидневный отпуск – с 25 декабря…

07.12.2023

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

Служба безопасности Украины задержала в Киеве 46-летнего программиста, который за деньги устанавливал шпионские программы и…

07.12.2023

Как вырасти до сеньйора? Девелопер создал популярную подборку на Github

IT-специалист Джордан Катлер создал и выложил на Github подборку разнообразных ресурсов, которые помогут достичь уровня…

07.12.2023