Установим необходимые компоненты:
sudo apt-get install curl
Активируем модуль информации об apache2 (обычно он активирован изначально):
sudo a2enmod info
Откроем файл конфигурации модуля и укажем IP-адрес zabbix сервера чтобы разрешить ему просмотр информации об apache2 (если apache2 на локальной машине, то доступ обычно разрешен, указанием local или 127.0.0.1):
sudo nano /etc/apache2/mods-enabled/status.conf
В редакторе nano CTRL+X используются для выхода и y/n для сохранения или отмены изменений. Пример указания IP:
<Location /server-status>
SetHandler server-status
Require local
Require ip 192.168.1.5
</Location>
Перезапустим web-сервер чтобы применить изменения:
sudo service apache2 restart
Теперь информация об apache2 доступна через браузер по ссылке http://HOST/server-status
Перейдем к Zabbix. Создадим папку для скриптов если ее нету:
mkdir /etc/zabbix/scripts/
chown root:zabbix -R /etc/zabbix/scripts/
chmod 750 /etc/zabbix/scripts/
В файле конфигурации zabbix сервера укажем путь к этой папке:
sudo nano /etc/zabbix/zabbix_server.conf
ExternalScripts=ПУТЬ
Теперь приведу содержимое самого скрипта:
#!/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
Сделаем файл скрипта исполняемым:
chown root:zabbix /etc/zabbix/scripts/apache2-status.sh
chmod 550 /etc/zabbix/scripts/apache2-status.sh
Пример проверки скрипта:
sudo -u zabbix /etc/zabbix/scripts/apache2-status.sh none accesses http://HOST/server-status
Откроем файл конфигурации zabbix агента в редакторе:
sudo nano /etc/zabbix/zabbix_agentd.conf
И укажем следующие параметры:
UserParameter=apache2[*],/etc/zabbix/scripts/apache2-status.sh "none" "$1" "$2"
Некоторыми командами можно посмотреть количество процессов apache2 и соединений на 80 порт, для этого не нужен скрипт, например можно еще указать:
UserParameter=apache2.count_processes,ps aux | grep apache | wc -l
UserParameter=connections_on_80_port,netstat -na | grep :80 | wc -l
Перезапустим zabbix агент чтобы применить изменения:
sudo /etc/init.d/zabbix-agent restart
Проверим:
zabbix_get -s 127.0.0.1 -k "apache2[accesses,http://HOST/server-status]"
Теперь создадим шаблон и добавим элементы данных, пример создаваемых элементов данных:
apache2[КЛЮЧ,http://HOST/server-status]
Экспортировал готовый шаблон — apache2-status
К наблюдаемому хосту также обязательно добавим макрос:
Макрос: {$APACHE_STATS_URL}
Значение: http://HOST/server-status
Готово.
Количество процессов apache2 можно получать от Zabbix-агента создав на Zabbix-сервере элемент данных с ключом:
proc.num[apache2]