1.Установка скрипта
1 |
# mkdir /etc/zabbix/scripts/ |
1 |
# chown root:zabbix -R /etc/zabbix/scripts/ |
1 |
# chmod 750 /etc/zabbix/scripts/ |
1 |
# nano /etc/zabbix/scripts/iostat.sh |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 |
#!/bin/bash export LC_ALL="" export LANG="en_US.UTF-8" # if [[ -z "$1" || -z "$2" || -z "$3" ]]; then ##### DISCOVERY ##### DEVICES=`iostat -d | awk '{print $1}' | sed -e '/^\([hsv]d[a-z]\)$/!d'` if [[ -n ${DEVICES} ]]; then JSON="{ \"data\":[" SEP="" for DEV in ${DEVICES}; do JSON=${JSON}"$SEP{\"{#HDNAME}\":\"${DEV}\"}" SEP=", " done JSON=${JSON}"]}" echo ${JSON} fi exit 0 fi ##### PARAMETERS ##### RESERVED="$1" METRIC="$2" DISK="$3" CACHE_TTL="25" CACHE_FILE="/tmp/zabbix.iostat.cache" EXEC_TIMEOUT="2" NOW_TIME=`date '+%s'` ##### RUN ##### if [ ${METRIC} = "read" ]; then iostat -k | grep ${DISK} | head -n 1 | awk '{print $5}' exit 0 fi if [ ${METRIC} = "write" ]; then iostat -k | grep ${DISK} | head -n 1 | awk '{print $6}' exit 0 fi ##### CACHE ##### 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=`iostat -x 1 2 2>&1` echo "${DATACACHE}" > "${CACHE_FILE}" # !!! chmod 640 "${CACHE_FILE}" fi # if [ ${METRIC} = "util" ]; then cat ${CACHE_FILE} | grep ${DISK} | tail -n 1 | awk '{print $14}' exit 0 fi if [ ${METRIC} = "svctm" ]; then cat ${CACHE_FILE} | grep ${DISK} | tail -n 1 | awk '{print $13}' exit 0 fi if [ ${METRIC} = "await" ]; then cat ${CACHE_FILE} | grep ${DISK} | tail -n 1 | awk '{print $10}' exit 0 fi if [ ${METRIC} = "avgqu" ]; then cat ${CACHE_FILE} | grep ${DISK} | tail -n 1 | awk '{print $9}' exit 0 fi if [ ${METRIC} = "rs" ]; then cat ${CACHE_FILE} | grep ${DISK} | tail -n 1 | awk '{print $4}' exit 0 fi if [ ${METRIC} = "ws" ]; then cat ${CACHE_FILE} | grep ${DISK} | tail -n 1 | awk '{print $5}' exit 0 fi |
Установка прав
1 |
# chown root:zabbix /etc/zabbix/scripts/iostat.sh |
1 |
# chmod 550 /etc/zabbix/scripts/iostat.sh |
Скрипт поддерживает обнаружение (discovery) дисков.
Скрипт предусматривает кеш, что позволяет сократить количество реальных обращений к серверу.
Время действия кеша в секундах должно устанавливается чуть меньше чем период опроса элементов.(по умолчанию в скрипте используется кеширование на 25 секунд, а интервал обновления элементов настроен на 30 секунд)
Необходимо установить пакет sysstat(в скрипте используется iostat, которая входит в пакет sysstat)
В зависимости от дистрибутива
1 |
# yum install sysstat |
1 |
# apt-get install sysstat |
Проверяем работу скрипта
1 |
# sudo –u zabbix /etc/zabbix/scripts/iostat.sh none read sda |
1 |
380616 |
Вместо sda подставьте свое имя диска(имя диска можно узнать через fdisk -l)
Если для проверки скрипт запускался с правами root, то он будет владельцем кэш файла – удалите кеш файл после проверок.
2.Настройка Zabbix-агента
1 |
# nano /etc/zabbix/zabbix_agentd.conf |
1 2 |
###IOSTAT Monitoring UserParameter=iostat[*],/etc/zabbix/scripts/iostat.sh "none" "$1" "$2" |
Перезапуск агента
1 |
# service zabbix-agent restart |
Проверка –выполняем команду на Zabbix-сервере
1 |
# zabbix_get -s <IP-address-Zabbix-агента> -k "iostat[read,sda]" |
1 |
380616 |
Либо локально на агенте
1 |
# zabbix_get -s 127.0.0.1 -k "iostat[read,sda]" |
1 |
380616 |
3.Настройка Zabbix-сервера
Скачиваем,распаковываем и импортируем шаблон zabbix2-mytemplate-iostat-agent.xml
zabbix2-mytemplate-iostat-agent.zip
После импорта меняем интервал обнаружения с часа на 1 минуту
1 |
Configuration->Template->MyTemplate IOSTAT agent->Discovery->IOSTAT: Hard disk drive discovery->Update interval->60->Update |
Применяем шаблон к хосту
Проверяем,что через 1-2 минуты на хосте появились Item с именем iostat
1 |
Monitoring->Latest Data->фильтруем по требуемому хосту в поле Hosts->iostat |
После того,как появились items и данные в них, возвращаем интервал обнаружения дисков в 1 час
Примеры графиков
Источник:
http://wiki.enchtex.info/howto/zabbix/zabbix_iostat_monitoring