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

Профилирование и мониторинг крайне важны для стабильной работы высоконагруженной системы. Кроме логов ошибок и запросов, Nginx имеет собственный модуль статистики ngx_http_stub_status_module с базовыми данными о работе веб-сервера. Nginx metrics

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

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: HTTP errors

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

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

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

mkdir /etc/zabbix/scripts/

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


#!/bin/bash
#<p class="code-comment">;#  OPTIONS VERIFICATION
</p>if [[ -z "$1" || -z "$2" || -z "$3" ]]; then
exit 1
fi

##### PARAMETERS ###<p class="code-comment"># 
</p>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 ###<p class="code-comment"># 
</p>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 Zabbix graph

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

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


Подпишитесь на Хайлоад с помощью Google аккаунта
или закройте эту хрень