Nginx — третий по полярности веб-сервер, если верить данным Netcraft. Так, по их данным за май 2010 года, число сайтов, обслуживаемых nginx, превышает 12,98 миллионов.
В этой записи я собираюсь рассказать про мониторинг nginx с модулем stub_status с помощью Zabbix. Предполагается что Zabbix-сервер уже настроен и на интересующем нас хосте стоит Zabbix-агент.
Часть 1. Настройка nginx
Для того чтобы nginx отдавал свое состояние нужно добавить ему в конфиг строки:
location = /nginx_status {
stub_status on;
access_log off;
allow 127.0.0.1;
deny all;
}
Разрешаем просмотр состояния только с локальной машины, так как zabbix-агент установлен на самом сервере. Перезачитываем конфиг:
/etc/init.d/nginx reload
Часть 2. Скрипт
Первоисточник данного скрипта взят на официальном форуме Zabbix и немного обработан напильником. Итак, сохраним как ~/zabbix/scripts/nginx_status.sh:
#!/bin/bash
HOST=`/bin/hostname`
SERVER='zabbix.yourdomain.com'
CURL=/usr/bin/curl
TMPF="/tmp/zabbix_ng_".`/bin/date +%H%M`
$CURL -s "http://${HOST}/nginx_status" > ${TMPF}
active=`cat $TMPF | grep "Active connections" | cut -d':' -f2`
accepts=`cat $TMPF | sed -n '3p' | cut -d" " -f2`
handled=`cat $TMPF | sed -n '3p' | cut -d" " -f3`
requests=`cat $TMPF | sed -n '3p' | cut -d" " -f4`
reading=`cat $TMPF | grep "Reading" | cut -d':' -f2 | cut -d' ' -f2`
writing=`cat $TMPF | grep "Writing" | cut -d':' -f3 | cut -d' ' -f2`
waiting=`cat $TMPF | grep "Waiting" | cut -d':' -f4 | cut -d' ' -f2`
echo "${HOST} nginx.active $active" > ${TMPF}
echo "${HOST} nginx.accepts $accepts" >> ${TMPF}
echo "${HOST} nginx.handled $handled" >> ${TMPF}
echo "${HOST} nginx.requests $requests" >> ${TMPF}
echo "${HOST} nginx.reading $reading" >> ${TMPF}
echo "${HOST} nginx.writing $writing" >> ${TMPF}
echo "${HOST} nginx.waiting $waiting" >> ${TMPF}
~/zabbix/bin/zabbix_sender --zabbix-server ${SERVER} -s ${HOST} \
--port '10051' -i ${TMPF} > /dev/null 2>&1
rm ${TMPF}
echo "1"
exit 0
Часть 3. Настройка агента
В Конфиг агента добавляем строку:
UserParameter=nginx.all,~/zabbix/scripts/nginx_status.sh
После чего перезапускаем:
/etc/init.d/zabbix-agent restart
Часть 4. Шаблон
Готовый шаблон с графиками:
Образцы графиков:
UPD. Импортировать шаблон тут:
18 комментариев “Мониторинг состояния nginx посредством Zabbix”
Спасибо, получилось. Но нигде не было указано, в какой конфиг вписать location, я вписал в один из «sites_available», и еще пришлось установить пакет zabbix-sender. Может кому-то поможет.
Блин. Тэг неправильно указал и полную чушь в результате запостил…
#!/bin/bash
HOST=`/bin/hostname`
SERVER='zabbix.yourdomain.com'
CURL=/usr/bin/curl
read -a stat <</dev/null 2>&1
}
echo "1"
exit 0
Фиг, анализатор злой у тебя :) Выложил .
Все, сдаюсь — тэги не для меня :D
http://pastebin.com/J8B94c6f
Удали пож-та весь этот мой чат и оставь только это http://pastebin.com/8KYSWWVn :)
Раз используется bash, то предложу вариант покороче и без sed’ов/grep’ов/cut’ов:
[code]
#!/bin/bash
HOST=`/bin/hostname`
SERVER=’zabbix.yourdomain.com’
CURL=/usr/bin/curl
TMPF=»/tmp/zabbix_ng_».`/bin/date +%H%M`
read -a stat << ${TMPF}
~/zabbix/bin/zabbix_sender —zabbix-server ${SERVER} -s ${HOST} \
—port ‘10051’ -i ${TMPF} > /dev/null 2>&1
rm ${TMPF}
}
echo «1»
exit 0
[/code]
бэкэнда (apache)
Видимо у вас какое-то правило отрабатывает раньше чем секция с nginx_status, переместите ее в конфиге как можно ближе к началу server {}, или создайте виртуальный хост без проксирования.
Переместил. Не помогло. Попробую отписать вопрос на оф сайте, там кто-то уже тоже интересовался этим. Спасибо.
Проблема решилась переделыванием конфига. В чем проблема так и не понял.
Поясните еще пожалуйста, куда и как шаблон Template_NginxServer.xml цеплять?
Добавил скрин импорта xml в Zabbix, после этого как обычный шаблон навешивается на любой хост через ту же вкладку «Configuration».
Спасибо!
у меня почему то секция /nginx_status не отрабатывает :(
(ограничения по ip естестенно убрал)
В выводе есть —with-http_stub_status_module?
Аналогично. В выводе —with-http_stub_status_module есть.
А если открыть в браузере url указанный для stub_status что увидим?
Извините, не понял, а где мы указываем url для stub_status?
my.site.ru/nginx_status показывает, что страница не найдена.
my.site.ru/ само собой отображает заглавную сайта.
На все хосты сервера работает кеширование nginx.
Средствами nginx или бекэнда?