В 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:
Добавим шаблон необходимым узлам:
Определим для наблюдаемого узла ссылку, по которой отображается статистика, с помощью макроса:
Через небольшой промежуток времени (по умолчанию, сбор item-ов с помощью скрипта каждые 60 секунд) начнут появлятся данные на графиках.
Ссылки: