Мониторинг Apache под Freebsd c помощью Zabbix 2.0
Мониторинг Apache 2.2 (да и впрочем любой apache, инструкция применима и к другим версиям) при помощи Zabbix довольно просто настроить. Необходимо, настроить apache чтобы он отдавал статистику, настроить zabbix_agent чтобы он её читал и настроить zabbix сервер что бы он её принимал сохранял и отображал.
И так приступим:
Настройка apache
Необходимо настроить чтобы apache отдавал свою статистику. Для этого существует модуль status_module. Необходимо что бы apache был с компилирован с его поддержкой. Так же необходимо включить модуль в http.conf
LoadModule status_module libexec/apache22/mod_status.so
Приступим к настройке выдачи статистики в http.conf необходимо добавить
ExtendedStatus On <Location /server-status> SetHandler server-status Order Deny,Allow Deny from all Allow from 127.0.0.1 </Location>
В первой строке мы активируем модель, дальше говорим что при запросе НАШ_СЕРВЕР/server-status необходимо отдать статистику и разрешаем отдачу статистики только локально — 127.0.0.1.
fetch -o server-status "http://localhost//server-status?auto"
Должны получить что-то вроде в файле с именем server-status в текущей папке
Total Accesses: 1031265 Total kBytes: 4146695 CPULoad: .00656311 Uptime: 179388 ReqPerSec: 5.7488 BytesPerSec: 23670.6 BytesPerReq: 4117.48 BusyWorkers: 3 IdleWorkers: 7 Scoreboard: W___.WW.._.._.._._..................
Если apache запущен на порту отличном от 80 то необходимо указать порт. Если у вас установлен текстовый браузер links то можно посомтреть более красивую статистику.
links http://localhost/server-status
Скрипт проверки
Создадим папку /usr/local/etc/zabbix2/scripts (здесь будут лежать скрипты которые будет запускать zabbix_agent что бы получить данные от apache) в ней создадим сам скрипт /usr/local/etc/zabbix2/script/apache.sh.
Скрипт проверки (за основу взят скрипт отсюда https://github.com/zbal/zabbix/blob/master/scripts/zabbix_apache_check.sh изменен запрос с wget на fetch и bash на sh). Если apache отдает статистику по ULR отличному от (например у него порт отличный от 80) http://localhost/server-status то необходимо в скрипте изменить APACHE_STATS_DEFAULT_URL.
#!/bin/sh
# Zabbix requested parameter
ZBX_REQ_DATA="$1"
ZBX_REQ_DATA_URL="$2"
# Apache defaults
APACHE_STATS_DEFAULT_URL="http://localhost/server-status?auto"
FETCH_BIN="/usr/bin/fetch"
#
# Error handling:
# - need to be displayable in Zabbix (avoid NOT_SUPPORTED)
# - items need to be of type "float" (allow negative + float)
#
ERROR_NO_ACCESS_FILE="-0.9900"
ERROR_NO_ACCESS="-0.9901"
ERROR_WRONG_PARAM="-0.9902"
ERROR_DATA="-0.9903" # either can not connect / bad host / bad port
# Handle host and port if non-default
if [ ! -z "$ZBX_REQ_DATA_URL" ]; then
URL="$ZBX_REQ_DATA_URL"
else
URL="$APACHE_STATS_DEFAULT_URL"
fi
# save the apache stats in a variable for future parsing
APACHE_STATS=$($FETCH_BIN -q -o - $URL 2> /dev/null)
TMPSCOREBOARD=$(echo $APACHE_STATS | grep -i Scoreboard | sed 's/Scoreboard://')
# error during retrieve
if [ $? -ne 0 -o -z "$APACHE_STATS" ]; then
echo $ERROR_DATA
exit 1
fi
#
# Extract data from apache stats
#
case $ZBX_REQ_DATA in
version) /usr/sbin/httpd -v | awk -F / '{print $2}' | head -1;;
total_kbytes) echo "$APACHE_STATS" | grep 'Total kBytes' | awk -F':' '{print $2}';;
total_accesses) echo "$APACHE_STATS" | grep 'Total Accesses' | awk -F':' '{print $2}';;
scoreboard_waiting) echo "$TMPSCOREBOARD" | grep -o . | grep -c "\_";;
scoreboard_starting) echo "$TMPSCOREBOARD" | grep -o . | grep -c "S";;
scoreboard_sending) echo "$TMPSCOREBOARD" | grep -o . | grep -c "R";;
scoreboard_reading) echo "$TMPSCOREBOARD" | grep -o . | grep -c "W";;
scoreboard_no-process) echo "$TMPSCOREBOARD" | grep -o . | grep -c "\.";;
scoreboard_logging) echo "$TMPSCOREBOARD" | grep -o . | grep -c "L";;
scoreboard_keepalive) echo "$TMPSCOREBOARD" | grep -o . | grep -c "K";;
scoreboard_idle-cleanup-of-worker) echo "$TMPSCOREBOARD" | grep -o . | grep -c "I";;
scoreboard_gracefully-finishing) echo "$TMPSCOREBOARD" | grep -o . | grep -c "G";;
scoreboard_dns-lookup) echo "$TMPSCOREBOARD" | grep -o . | grep -c "D";;
scoreboard_closing) echo "$TMPSCOREBOARD" | grep -o . | grep -c "C";;
scoreboard) echo "$APACHE_STATS" | grep 'Scoreboard' | awk -F':' '{print $2}';;
reqpersec) echo "$APACHE_STATS" | grep 'ReqPerSec' | awk -F':' '{print $2}';;
idleworkers) echo "$APACHE_STATS" | grep 'IdleWorkers' | awk -F':' '{print $2}';;
cpuload) echo "$APACHE_STATS" | grep 'CPULoad' | awk -F':' '{print $2}';;
bytespersec) echo "$APACHE_STATS" | grep 'BytesPerSec' | awk -F':' '{print $2}';;
bytesperreq) echo "$APACHE_STATS" | grep 'BytesPerReq' | awk -F':' '{print $2}';;
busyworkers) echo "$APACHE_STATS" | grep 'BusyWorkers' | awk -F':' '{print $2}';;
*) echo $ERROR_WRONG_PARAM; exit 1;;
esac
exit 0
Сделаем скрипт исполняемым
chmod 750 /usr/local/etc/zabbix2/scripts/apache.sh
Проверим получает ли скрипт какие-то значения:
/usr/local/etc/zabbix2/scripts/apache.sh total_kbytes
Должны какое-то число, например (колличество переданных данных)
4149011
Настройка zabbix agent
Создадим файл userparameter_nginx.conf в папке /usr/local/etc/zabbix2/zabbix_agentd.conf.d/
/usr/local/etc/zabbix2/zabbix_agentd.conf.d/userparameter_apache.conf
(путь к папке с дополнительными настройками может отличатся от указанного. Вообще он задается в ee /usr/local/etc/zabbix2/zabbix_agentd.conf директивой Include, можно в принципе дописать строчку ниже прям в этот файл, но это как-то не по Феншую)
UserParameter=apache[*],/usr/local/etc/zabbix2/scripts/apache.sh $1
После изменений обязательно перезагружаем zabbix_agent
/usr/local/etc/rc.d/zabbix_agentd restart
Настройка Zabbix сервера
Проверяем на сервере из консоли, например запросим загрузку процессора:
zabbix_get -s ZABBIX_AGEBNT_IP -k "apache[cpuload]"
Должны в ответ получить какое-то число. Если не выдает число или пишет -0.990. Значит где-то ошиблись в настройках.
Далее необходимо подключить в вебинтерфейсе Zabbix шаблон и применить его к необходимым хостам. Шаблон можно скачать тут.
В шаблоне есть 1 триггер (не запущен apache) и 2 графика.
Добавить комментарий