среда, 9 апреля 2014 г.

Мониторинг параметров Nginx в Zabbix

Веб-сервер Nginx умеет отдавать свои статистические данные и было бы не плохо их мониторить с возможность построения различных наглядных графиков.
www-servers/nginx-1.4.4
net-analyzer/zabbix-2.0.9


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

Если accepts и handled не равны, увеличите значение worker_connections


Создание папки для скриптов:
mkdir /etc/zabbix/scripts/
chown zabbix:zabbix -R /etc/zabbix/scripts/
chmod 750 /etc/zabbix/scripts/
Создадим сам скрипт:
/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"
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} --insecure -s "${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
Скрипт предусматривает кеш, что позволяет сократить количество реальных обращений к серверу.
Время действия кеша в секундах должно устанавливается чуть меньше чем период опроса элементов. 
Установка прав
chown zabbix:zabbix /etc/zabbix/scripts/nginx-stats.sh
chmod 540 /etc/zabbix/scripts/nginx-stats.sh

Настройка Nginx

Необходимо настроить Nginx для отдачи своей статистики по определенному адресу.
Сам Nginx должен быть скомпилирован с поддержкой модуля статистики (--with- http_stub_status_module)
В GentooGentoo
make.conf
NGINX_MODULES_HTTP="stub_status  ..."
В секции server добавляем следующее:
VirtualHost
server {
 ...

        location = /nginx-stats {
                stub_status on;
                access_log off;
                allow IP.ZABBIX.SEVER.AGENT;
                deny all;
        }
}
Соответственно IP.ZABBIX.SEVER.AGENT заменяем на IP адрес Zabbix Server или Zabbix Agent.
После настройки нужно не забыть перезагрузить конфигурацию Nginx:
/etc/init.d/nginx reload
На стороне сервера следует проверить что нужные данные отдаются. Для этого можно выполнить команду:
curl http://you.site.com/nginx-stats
или с помощью скрипта для zabbix:
sudo -u zabbix /etc/zabbix/scripts/nginx-stats.sh none active http://you.site.com/nginx-stats
Вы должны получить статистические данные от Nginx, если этого не произошло, то конфигурация выполнена не правильно.
Если для проверки скрипт запускался с правами root, то он будет владельцем кэш файла - удалите кеш файл после проверок.

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

Вызов скрипта через zabbix-agent

Настройка
/etc/zabbix/zabbix_agentd.conf
...

UserParameter=nginx[*],/etc/zabbix/scripts/nginx-stats.sh "none" "$1" "$2"
Перезапустить
/etc/init.d/zabbix-agentd restart
Проверка
zabbix_get -s HOST -k "nginx[active,http://you.site.com/nginx-stats]"
Для контролируемых данных в Zabbix нужно создать соответствующее элементы с типом "Zabbix агент" и ключом типа:
nginx[key,http://you.site.com/nginx-stats]
где key - контролируемая метрика, http://you.site.com/nginx-stats - адрес nginx статистики.
Используйте макросы что бы определить URL
Готовый Шаблон для мониторинга Nginx (agent) с уже настроенными элементами и графиками.

Вызов скрипта внешней проверкой

Основная концепция: мониторинг nginx производиться с помощью специального скрипта вызываемого внешней проверкой.
На сервере Xabbix в конфиге необходимо определить место размещения скриптов для внешней проверки:
/etc/zabbix/zabbix_server.conf
...
# Location of external scripts
ExternalScripts=/etc/zabbix/scripts
Для контролируемых данных в Zabbix нужно создать соответствующее элементы с типом "Внешняя проверка" и ключом типа:
nginx-stats.sh[key http://you.site.com/nginx-stats]
где key - контролируемая метрика, http://you.site.com/nginx-stats - адрес Nginx статистики.
Используйте макросы что бы определить URL
Готовый Шаблон для мониторинга Nginx (Внешние проверки) с уже настроенными элементами и графиками.

Результат

Напоследок приятное, пример графиков которые в результате можно получить:

Комментариев нет:

Отправить комментарий