1.Настройка Nginx-статуса
Статистические данные
http_stub_status_module — собирает следующие данные:
1 |
active connections |
– общее количество открытых соединений в данный момент, включая коннекты на backend (не пользователей, т.к. один пользователь может открыть несколько соединений);
1 |
server accepts |
– общее количество принятых соединений
1 |
server handled |
— количество обработанных соединений ; как правило – должно быть одинаково с первым значением;
Если accepts и handled не равны, увеличьте значение worker_connections
1 |
server requests |
— количество обработанных запросов; как правило – должно быть больше, чем второе значение;
поделив третье значение на второе – можно получить количество запросов в секунду, которое обрабатывает Nginx
1 |
reading |
— количество запросов в данный момент, заголовки которых читает nginx
1 |
writing |
— количество запросов в данный момент, тело которых читает nginx + находящиеся в обработки + идет отдача данных
1 |
waiting |
— количество ожидающих (keep-alive) соединений в данный момент. waiting = active — reading – writing
Это значение зависит от заданного значения keepalive-timeout.
Настройка Nginx на хосте, с которого нужно снимать Nginx статистику
Проверка,собран ли Nginx с поддержкой модуля http_stub_status_module
1 |
# nginx -V | grep http_stub_status_module |
1 2 |
... --with-http_sub_module |
Например, я настраиваю отображение Nginx-статистики в хосте по умолчанию т.е для доступа к nginx_status можно использовать IP-адрес сервера или его полное доменное имя
1 |
# nano /etc/nginx/conf.d/default.conf |
1 2 3 4 5 6 7 |
location /nginx_status { stub_status on; access_log off; allow 127.0.0.1; allow IP-address-Zabbix-agent deny all; } |
1 |
# nginx -t && service nginx reload |
2.Настройка скрипта на Zabbix-агенте
1 |
# mkdir /etc/zabbix/scripts/ |
1 |
# chown root:zabbix /etc/zabbix/scripts/ |
1 |
# chmod 750 /etc/zabbix/scripts/ |
1 |
# nano /etc/zabbix/scripts/nginx-stats.sh |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 |
#!/bin/bash ##### OPTIONS VERIFICATION ##### if [[ -z "$1" || -z "$2" || -z "$3" ]]; then exit 1 fi ##### PARAMETERS ##### RESERVED="$1" METRIC="$2" STATSURL="$3" CURL=$(which curl) CACHE_TTL="55" CACHE_FILE="/tmp/zabbix.nginx.`echo $STATSURL | md5sum | cut -d" " -f1`.cache" EXEC_TIMEOUT="1" NOW_TIME=`date '+%s'` ##### RUN ##### if [ -s "${CACHE_FILE}" ]; then CACHE_TIME=`stat -c"%Y" "${CACHE_FILE}"` else CACHE_TIME=0 fi DELTA_TIME=$((${NOW_TIME} - ${CACHE_TIME})) # if [ ${DELTA_TIME} -lt ${EXEC_TIMEOUT} ]; then sleep $((${EXEC_TIMEOUT} - ${DELTA_TIME})) elif [ ${DELTA_TIME} -gt ${CACHE_TTL} ]; then echo "" >> "${CACHE_FILE}" # !!! DATACACHE=`${CURL} -sS --insecure --max-time ${EXEC_TIMEOUT} "${STATSURL}" 2>&1` echo "${DATACACHE}" > "${CACHE_FILE}" # !!! chmod 640 "${CACHE_FILE}" fi # if [ "${METRIC}" = "active" ]; then cat "${CACHE_FILE}" | grep "Active connections" | cut -d':' -f2 fi if [ "${METRIC}" = "accepts" ]; then cat "${CACHE_FILE}" | sed -n '3p' | cut -d" " -f2 fi if [ "${METRIC}" = "handled" ]; then cat "${CACHE_FILE}" | sed -n '3p' | cut -d" " -f3 fi if [ "${METRIC}" = "requests" ]; then cat "${CACHE_FILE}" | sed -n '3p' | cut -d" " -f4 fi if [ "${METRIC}" = "reading" ]; then cat "${CACHE_FILE}" | grep "Reading" | cut -d':' -f2 | cut -d' ' -f2 fi if [ "${METRIC}" = "writing" ]; then cat "${CACHE_FILE}" | grep "Writing" | cut -d':' -f3 | cut -d' ' -f2 fi if [ "${METRIC}" = "waiting" ]; then cat "${CACHE_FILE}" | grep "Waiting" | cut -d':' -f4 | cut -d' ' -f2 fi # exit 0 |
1 |
# chown root:zabbix /etc/zabbix/scripts/nginx-stats.sh |
1 |
# chmod 550 /etc/zabbix/scripts/nginx-stats.sh |
Скрипт предусматривает кеш, что позволяет сократить количество реальных обращений к серверу.
Время действия кеша в секундах должно устанавливается чуть меньше чем интервал обновления элементов(по умолчанию в скрипте используется кеширование на 55 секунд, а интервал обновления элементов настроен на 60 секунд)
Проверка статуса Nginx
1 |
# curl http://server1.mydomain.com/nginx_status |
1 2 3 4 |
Active connections: 7 server accepts handled requests 207716 207716 393543 Reading: 0 Writing: 1 Waiting: 6 |
Или с помощью скрипта Zabbix
1 |
# sudo -u zabbix /etc/zabbix/scripts/nginx-stats.sh none active http://server1.mydomain.com/nginx_status |
1 |
7 |
1 |
# cat /tmp/zabbix.nginx.640304235b119ace1cc128aeb68c21cd.cache |
1 2 3 4 |
Active connections: 7 server accepts handled requests 207716 207716 393543 Reading: 0 Writing: 1 Waiting: 6 |
3.Настройка zabbix-агента
1 |
# nano /etc/zabbix/zabbix_agentd.conf |
1 2 |
###Nginx Monitoring UserParameter=nginx[*],/etc/zabbix/scripts/nginx-stats.sh "none" "$1" "$2" |
1 |
# service zabbix-agent restart |
1 2 |
# apt-get install zabbix-get # yum install zabbix-get |
C Zabbix-сервера
1 |
# zabbix_get -s server1.mydomain.com -k "nginx[active,http://server1.mydomain.com/nginx_status]" |
1 |
8 |
Локально на Zabbix-агенте
1 |
# zabbix_get -s 127.0.0.1 -k "nginx[active,http://server1.mydomain.com/nginx_status]" |
1 |
8 |
3.Настройка Zabbix-сервера
Скачиваем,распаковываем и импортируем шаблон zabbix2-mytemplate-nginx-agent.xml
zabbix2-mytemplate-nginx-agent.zip
Добавляем шаблон к хосту, на котором мониторим Nginx
Добавляем макросы к этом хосту для корректной работы триггеров
Например:
{$NGINX_CON_NUM} — 20
{$NGINX_REQ_NUM} — 5
{$NGINX_STATS_URL} — http://server1.mydomain.com/nginx_status
Проверяем,что через 1-2 минуты на хосте появились Item с именем Nginx
Monitoring->Latest Data->фильтруем по требуемому хосту в поле Hosts->Nginx
Примеры графиков
Источник:
http://wiki.enchtex.info/howto/zabbix/nginx_monitoring