Веб-сервер Nginx умеет отдавать свои статистические данные и было бы не плохо их мониторить с возможность построения различных наглядных графиков.
www-servers/nginx-1.4.4
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)
В Gentoo
В Gentoo
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 в конфиге необходимо определить место размещения скриптов для внешней проверки:
На сервере 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 (Внешние проверки) с уже настроенными элементами и графиками.
Результат
Напоследок приятное, пример графиков которые в результате можно получить:
Комментариев нет:
Отправить комментарий