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 поможет быстро реагировать на проблемы и получать информацию об ошибках в виде наглядных графиков или уведомлений.

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

Что такое прокси-сервер: пояснение простыми словами, зачем нужны прокси

Прокси (proxy), или прокси-сервер — это программа-посредник, которая обеспечивает соединение между пользователем и интернет-ресурсом. Принцип…

21.11.2024

Что такое PWA приложение? Зачем необходимо прогрессивное веб-приложение

Согласитесь, было бы неплохо соединить в одно сайт и приложение для смартфона. Если вы еще…

19.11.2024

Как создать игру на телефоне: программирование с помощью конструктора

Повсеместное распространение смартфонов привело к огромному спросу на мобильные игры и приложения. Миллиарды пользователей гаджетов…

17.11.2024

Google Bard: эффективный аналог ChatGPT

В перечне популярных чат-ботов с искусственным интеллектом Google Bard (Gemini) еще не пользуется такой популярностью…

14.11.2024

Скрипт и программирование: что это такое простыми словами

Скрипт (англ. — сценарий), — это небольшая программа, как правило, для веб-интерфейса, выполняющая определенную задачу.…

12.11.2024

Дедлайн в разработке: что это такое простыми словами

Дедлайн (от англ. deadline — «крайний срок») — это конечная дата стачи проекта или задачи…

11.11.2024