Zabbix + Nginx

Мониторим Nginx в Zabbix

Веб-сервер Nginx предоставляет информацию о статистике свой работы.

Немного bash и мы сможем учитывать данную информацию в системе мониторинга Zabbix.

Для начала нам нужно получать данную статистику, а для этого нужно ее «активировать» в nginx.

Создадим новый файл виртуального хоста в nginx с следующим содержанием, statistic.conf:

server {
        listen localhost;
         server_name nginx_status.localhost;
         location /status {
                stub_status on;
                access_log   off;
                allow 127.0.0.1;
                deny all;
         }
}

Данный скрипт создает виртуальный хост, который будет откликаться только на http://localhost/status и не доступен из вне.

Помещаем данный файл в sites-enabled или conf.d в папке /etc/nginx (все зависит от того какая версия nginx у вас установлена и из официального ли она репозитория)

Перезапускаем nginx:

service nginx restart

Далее создадим скрипт, который будет обрабатывать запросы Zabbix-server. Назовем этот скрипт nginx.sh и поместим в папку пользовательских скриптов Zabbix. По умолчанию это папка /usr/share/zabbix-agent/scripts/.

#!/bin/bash

FILESTATUS=/tmp/status_nginx.tmp
NOWTIME=$(date +%s)
if [ ! -f $FILESTATUS ]
then wget http://localhost/status -O $FILESTATUS -o /dev/null
fi
FILETIME=$(stat -c %Y $FILESTATUS)
let "TIME = $NOWTIME - $FILETIME"
if [ "$TIME" -ge "20" ]
then
wget http://localhost/status -O $FILESTATUS -o /dev/null
fi
case "$1" in
active)
awk 'NR==1 {print $3}' $FILESTATUS
exit 0
;;
accepts)
awk 'NR==3 {print $1}' $FILESTATUS
;;
handled)
awk 'NR==3 {print $2}' $FILESTATUS
;;
requests)
awk 'NR==3 {print $3}' $FILESTATUS
;;
reading)
awk 'NR==4 {print $2}' $FILESTATUS
;;
writing)
awk 'NR==4 {print $4}' $FILESTATUS
;;
waiting)
awk 'NR==4 {print $6}' $FILESTATUS
;;
*)
echo "ZBX_UNSUPPORTED"
exit 1
;;
esac

exit 0

Данный скрипт сверяет текущее время с временем модификации файла /tmp/status_nginx.tmp. Если разница во времени больше 20 секунд, то делается новое обращение к статистике nginx с помощью wget и результаты записываются в тот же файл, после этого делается выборка исходя из команды переданной в параметрах Zabbix Agent.

В целом можно было сократить скрпит и на каждый опрос Zabbix загружать страницу и потом получать нужную стату. Но это увеличит нагрузку на сам nginx, т.к. чаще всего такой опрос производится с интервалом 30-60 секунд. Для сокращения обращений и сокращения нагрузки используется буферный файл /tmp/status_nginx.tmp, который обновляется каждые 20 секунд.

Следующим этапом нужно научить Zabbix Agent использовать данный скрпит для сбора информации. Для этого создадим файл nginx.conf в папке пользовательский параметров Zabbix Agent (/etc/zabbix/zabbix_agentd.d/) следующего содержания:

UserParameter=nginx[*],/usr/share/zabbix-agent/scripts/nginx.sh $1

Вот собственно и все, остается только подключить шаблон в Zabbix, который можно взять тут: Zabbix-Nginx.xml
В результате мы сможем наблюдать приблизительно вот такие графики:Zabbix Nginx Active Connections ScreenShot

connections_per_sec

present_active

processes

Получить все скрипты/файлы конфигураций можно в моем GIT-репозитории.

comments powered by HyperComments
Мониторим Memcached в Zabbix - Блог Hellsman'a
2015-09-10 10:12:23
[…] я рассказывал как мониторить Nginx в Zabbix. Сегодня я остановлюсь на […]