zabbix+apache

Мониторинг 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 графика.

 

Шаблоны и скрипты.