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

Источник: https://blog.xsk.in/it/monitoring-statistiki-nginx-v-zabbix/312/
Опубликовано: 2013-09-01 · Рубрики: IT, nginx


[![nginx-zabbix-graph](/wp-content/uploads/2013/12/nginx-zabbix-graph.png)](/wp-content/uploads/2013/12/nginx-zabbix-graph.png)В nginx есть [HttpStubStatusModule](http://wiki.nginx.org/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](http://www.zabbix.com/) или другую среду мониторинга (есть подобные решения для 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
```

Выполнять запрос можно непосредственно с сервера с помощью скриптов [внешней проверки](http://www.zabbix.com/documentation/doku.php?id=ru/1.8/manual/config/items#внешние_проверки) или же получением сформированных агентом пользовательских параметров. Первый подход позволяет выполнить единичную настройку и запрашивать необходимые данные с агентов, второй выносит работу по получению необходимых параметров, на агента тем самым снижая нагрузку на сервер. Рассмотрим вариант с заданием пользовательских параметров в конфигурации агента.

## Настройка 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-сервера

Импортируем [новый шаблон](/wp-content/uploads/2013/12/zabbix2-mytemplate-nginx-agent.xml) в веб-интерфейсе Zabbix:

[![nginx-zabbix-import](/wp-content/uploads/2013/09/nginx-zabbix-import.png)](/wp-content/uploads/2013/09/nginx-zabbix-import.png)

Добавим шаблон необходимым узлам:
[![nginx-zabbix-host](/wp-content/uploads/2013/12/nginx-zabbix-host.png)](/wp-content/uploads/2013/12/nginx-zabbix-host.png)Определим для наблюдаемого узла ссылку, по которой отображается статистика, с помощью макроса:

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

*Ссылки:*

- [http://wiki.enchtex.info/howto/zabbix/nginx\_monitoring](http://wiki.enchtex.info/howto/zabbix/nginx_monitoring)
- [http://wiki.nginx.org/HttpStubStatusModule](http://wiki.nginx.org/HttpStubStatusModule)
- [https://www.zabbix.com/documentation/ru/2.0/manual/config/items/userparameters](https://www.zabbix.com/documentation/ru/2.0/manual/config/items/userparameters)

