Мониторинг статистики Nginx в Zabbix

nginx-zabbix-graphВ nginx есть HttpStubStatusModule — модуль, с помощью которого можно просматривать статистику веб сервера, такую как:

  • active connections — количество открытых коннектов в данный момент, включая коннекты на backend,
  • server accepts — количество принятых подключений,
  • server handled — количество обработанных подключений,
  • server requests — количество принятых запросов,
  • reading — количество запросов в данный момент, заголовки которых читает nginx,
  • writing — количество запросов в данный момент, тело которых читает nginx + находящиеся в обработки + идет отдача данных,
  • waiting — количество ожидающих (keep-alive) соединений в данный момент (waiting = active — reading — writing).


После сборки пакета с этим модулем в конфигурации сервера указываем путь до страницы со статистикой и права доступа к ней:

location /nginx_status {
     stub_status on;
     access_log off;
     allow SOME.IP.ADD.RESS;
     deny all;
}

Однако удобнее наблюдать за этой статистикой по графикам, используя для сбора информации и отрисовки Zabbix или другую среду мониторинга (есть подобные решения для Cacti). Для этого установим скрипт и впишем в настройки агента и сервера использование этого скрипта в процессе работы, а затем импортируем шаблон для построения графиков.

Установка скрипта

Создадим директорию для хранения скриптов

mkdir /etc/zabbix/scripts/

Разместим в ней наш скрипт для сбора и обработки статистики

vi /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

Назначим права доступа:

chown zabbix:zabbix -R /etc/zabbix/scripts/
chmod 750 /etc/zabbix/scripts/
chmod 700 /etc/zabbix/scripts/nginx-stats.sh

Проверим работу скрипта и настройки nginx, запустив скрипт вручную:

/etc/zabbix/scripts/nginx-stats.sh none active http://you.site.com/nginx_status

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

Настройка Zabbix-агента

Внесем в настройки агента упоминание о нашем скрипте:

vi /etc/zabbix/zabbix_agentd.conf
UserParameter=nginx[*],/etc/zabbix/scripts/nginx-stats.sh "none" $1 $2

После перезапуска агента с новыми параметрами проверим на сервере корректность получения данных:

zabbix_get -s HOST -k "nginx[active,http://you.site.com/nginx_status]"

Настройка Zabbix-сервера

Импортируем новый шаблон в веб-интерфейсе Zabbix:

nginx-zabbix-import

Добавим шаблон необходимым узлам:
nginx-zabbix-hostОпределим для наблюдаемого узла ссылку, по которой отображается статистика, с помощью макроса:

nginx-zabbix-macrosЧерез небольшой промежуток времени (по умолчанию, сбор item-ов с помощью скрипта каждые 60 секунд) начнут появлятся данные на графиках.

Ссылки: