Apache является чуть ли не самым распространенным веб-сервером в мире, а потому мониторинг его производительности дело достаточно актуальное. Благо для Zabbix есть масса шаблонов в сети, позволяющих отслеживать производительность web-сервера Apache. Настройкой одного из них я и займусь в этой статье.
Отслеживать Apache будем на самом же сервере Zabbix. Все остальные настройки будут упомянуты в процессе.
Вводная статья по шаблонам мониторинга ZABBIX – Шаблоны ZABBIX.
Если вам интересна тематика ZABBIX, рекомендую обратиться к основной статье – Система мониторинга ZABBIX, в ней вы найдете дополнительную информацию.
Скрипт мониторинга Apache в ZABBIX
Создадим каталог для скриптов zabbix-агента с предустановленными правами. У меня он уже был, но я на всякий случай напишу команды, которые я использовал для его создания:
root@debian7:~# mkdir -m 750 /usr/local/etc/zabbix_agent_scripts
Меняем владельца каталога:
root@debian7:~# chown root:zabbix /usr/local/etc/zabbix_agent_scripts
Создадим файл со скриптом:
root@debian7:~# nano /usr/local/etc/zabbix_agent_scripts/apache-stats.sh
С содержанием:
#!/bin/bash
if [[ -z “$1” || -z “$2” || -z “$3″ ]]; then
exit 1
fi
##### PARAMETERS #####
RESERVED=”$1″
METRIC=”$2″
URL=”$3″
STATSURL=”${URL}?auto”
#
CACHE_TTL=”55″
CACHE_FILE=”/tmp/zabbix.apache2.echo ${URL} | md5sum | cut -d" " -f1
.cache”
EXEC_TIMEOUT=”2″
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 -sS --insecure --max-time ${EXEC_TIMEOUT} "${STATSURL}" 2>&1
echo “${DATACACHE}” > “${CACHE_FILE}” # !!!
echo “URL=${URL}” >> “${CACHE_FILE}” # !!!
chmod 640 “${CACHE_FILE}”
fi
#
if [ “${METRIC}” = “accesses” ]; then
cat “${CACHE_FILE}” | grep -i “accesses” | cut -d’:’ -f2 | head -n1
fi
if [ “${METRIC}” = “kbytes” ]; then
cat “${CACHE_FILE}” | grep -i “kbytes” | cut -d’:’ -f2 | head -n1
fi
if [ “${METRIC}” = “cpuload” ]; then
cat “${CACHE_FILE}” | grep -i “cpuload” | cut -d’:’ -f2 | head -n1
fi
if [ “${METRIC}” = “uptime” ]; then
cat “${CACHE_FILE}” | grep -i “uptime” | cut -d’:’ -f2 | head -n1
fi
if [ “${METRIC}” = “avgreq” ]; then
cat “${CACHE_FILE}” | grep -i “ReqPerSec” | cut -d’:’ -f2 | head -n1
fi
if [ “${METRIC}” = “avgreqbytes” ]; then
cat “${CACHE_FILE}” | grep -i “BytesPerReq” | cut -d’:’ -f2 | head -n1
fi
if [ “${METRIC}” = “avgbytes” ]; then
cat “${CACHE_FILE}” | grep -i “BytesPerSec” | cut -d’:’ -f2 | head -n1
fi
if [ “${METRIC}” = “busyworkers” ]; then
cat “${CACHE_FILE}” | grep -i “BusyWorkers” | cut -d’:’ -f2 | head -n1
fi
if [ “${METRIC}” = “idleworkers” ]; then
cat “${CACHE_FILE}” | grep -i “idleworkers” | cut -d’:’ -f2 | head -n1
fi
if [ “${METRIC}” = “totalslots” ]; then
cat “${CACHE_FILE}” | grep -i “Scoreboard” | cut -d’:’ -f2 | sed -e ‘s/ //g’ | wc -c | awk ‘{print $1-1}’
fi
#
exit 0
Изменим владельца скрипта:
root@debian7:~# chown root:zabbix /usr/local/etc/zabbix_agent_scripts/apache-stats.sh
Установим права:
root@debian7:~# chmod 550 /usr/local/etc/zabbix_agent_scripts/apache-stats.sh
Настройка Apache
Подгружаем модуль, необходимый для мониторинга:
root@debian7:~# a2enmod info
To activate the new configuration, you need to run:
service apache2 restart
Раз просят перезапуститься, так и делаем:
root@debian7:~# service apache2 restart
[ ok ] Restarting web server: apache2 … waiting …
Отредактируем конфигурационный файл apache:
root@debian7:~# nano /etc/apache2/apache2.conf
В самый конец файла добавим:
ExtendedStatus on
<Location /server-status>
SetHandler server-status
Order deny,allow
Deny from all
Allow from .your_domain.com
</Location>
Где “.your_domain.com” – адрес zabbix-сервера.
Перезагрузим сервер:
root@debian7:~# /etc/init.d/apache2 force-reload
[ ok ] Reloading web server config: apache2.
Для проверки работы зайдем по следующей ссылке: http://your-domain-or-ip/server-status
В первый раз у меня выдало сообщение:
Как видно, ошибка с правами доступа, ведь проверял я это не с локального сервера. Исправим:
root@debian7:~# nano /etc/apache2/apache2.conf
В самом конце, где мы дописывали ряд строк, изменяем:
Allow from .your_domain.com additional-ip-or-domain
Вместо “additional-ip-or-domain” вставьте один или несколько необходимых адресов через пробел.
Перезапускаем apache и снова переходим по ссылке (см. выше):
Установим curl:
root@debian7:~# apt-get install curl
Проверим отдаются ли данные с самого сервера:
root@debian7:~# curl http://your-server-ip/server-status
Не должно приходить никаких ошибок.
Настройка zabbix-агента
Создаем файл с пользовательскими параметрами:
root@debian7:~# nano /usr/local/etc/zabbix_agent_configs/apache2.conf
В конце файла вставляем следующий текст:
UserParameter=apache2[*],/usr/local/etc/zabbix_agent_scripts/apache-stats.sh “none” “$1” “$2”
В файле конфигурации агента zabbix должны быть произведены следующие настройки:
root@debian7:~# nano /usr/local/etc/zabbix_agentd.conf
Нам нужен параметр “Include“, задаем ему следующее значение:
Include=/usr/local/etc/zabbix_agent_configs
Перезапускаем агента:
root@debian7:~# service zabbix-agent restart
Проверяем:
root@debian7:~# zabbix_get -s 127.0.0.1 -k “apache2[accesses,http://your-server-ip/server-status]”
10885
Загружаем готовый шаблон:
Шаблон для мониторинга Apache2 (Agent)
Дальше необходимо добавить шаблон мониторинга на наш zabbix-сервер через web-интерфейс. Для этого проходим в Настройка>Шаблоны, нажимаем справа вверху “Импорт” и добавляем шаблон. Подцепляем шаблон к нужным узлам мониторинга – Узлы сети > выбираем нужный узел > вкладка “Шаблоны” > соединяем с новым шаблоном > нажимаем “Добавить” > нажимаем “Обновить”.
Помимо загрузки необходимо добавить макрос, чтобы в каждый элемент данных этот макрос подставлял необходимую адресную строку. Определить работу макроса можно в рамках шаблона или или узла сети. В нашем случае подойдет второй вариант. Нажимаем на нужный узел сети, переходим на вкладку “Макросы” и устанавливаем следующие настройки:
Нажимаем кнопку “Добавить” и “Обновить”.
Через некоторое время проверим прием данных:
Настройка завершена.
Использованные источники:
Enabling and using apache’s mod_status on Debian
Monitoring Apache with mod_status