Мониторинг дисков ZABBIX

Мониторинг дисков ZABBIX
http://www.zabbix.com/

Рано или поздно у вас появится необходимость отслеживать производительность дисковой подсистемы серверов, как виртуальных, так и физических. Если вы все ещё это не делаете, то обязательно скоро придется. Почему?  – если оперативную память, процессорную мощность и объем долговременной памяти можно считать константами, то этого нельзя сказать о производительности дисковой подсистемы. Во-первых, потому что рабочая нагрузка на серверы обычно растет со временем (даже если взять за основу постоянное количество сотрудников компании), а производительность дисков со временем деградирует и их надо менять, во-вторых, традиционно большинство администраторов учитывают лишь мощность cpu и объем ram и никто не утруждает себя подсчетом необходимых iops-ов. Если с windows-системами все достаточно просто и работает что называется “из коробки” (я о счетчиках производительности), то с Unix-системами все обстоит сложнее. Благо в сети есть достаточно объемные и подробные инструкции с готовыми скриптами для постановки на мониторинг показателей производительности дисковой подсистемы. Использование одной из них я планирую максимально подробно описать в этой статье.


Вводная статья по шаблонам мониторинга ZABBIX – Шаблоны ZABBIX.

Если вам интересна тематика ZABBIX, рекомендую обратиться к основной статье – Система мониторинга ZABBIX, в ней вы найдете дополнительную информацию.


Исходные данные

Настройка zabbix-агента будет проводиться на самом zabbix-сервере, ОС – Debian 7.7. Все необходимые скрипты и файлы конфигураций можно найти тут. Небольшое “введение” можно прочитать в статье “Zabbix + Iostat: мониторинг дисковой подсистемы“.

Мониторинг дисков ZABBIX – Настройка

Необходимо поставить пакет “sysstat”, в котором находится необходимая нам утилита “iostat”:
root@debian7:~# apt-get install sysstat

Вспомним где у нас лежат конфигурационные файлы zabbix-агента:
root@debian7:~# find / -name “zabbix_agentd.conf”
/usr/local/etc/zabbix_agentd.conf

Перейдем в папку с конфигурационными файлами:
root@debian7:~# cd /usr/local/etc/

Создадим папки для будущих скриптов и файлов конфигураций и сразу установим к ним права:
root@debian7:/usr/local/etc# mkdir -m 755 zabbix_agent_configs
root@debian7:/usr/local/etc# mkdir -m 755 zabbix_agent_scripts

Вернемся в корневую директорию:
root@debian7:/usr/local/etc# cd

Создадим файл iostat.conf в директории с конфигурационными файлами zabbix-агента

root@debian7:~# nano /usr/local/etc/zabbix_agent_configs/iostat.conf

… со следующим содержанием:

# Disk statistics via iostat (sysstat)
# Attention: Second parameter in iostat.collect must be less than Timeout option in zabbix_agentd.conf
UserParameter=iostat.discovery, iostat -d | awk ‘BEGIN {check=0;count=0;array[0]=0;} {if(check==1 && $1 != “”){array[count]=$1;count=count+1;}if($1==”Device:”){check=1;}} END {printf(“{\n\t\”data\”:[\n”);for(i=0;i<count;++i){printf(“\t\t{\n\t\t\t\”{#HARDDISK}\”:\”%s\”}”, array[i]); if(i+1<count){printf(“,\n”);}} printf(“]}\n”);}’
UserParameter=iostat.collect,/usr/local/etc/zabbix_agent_scripts/iostat-collect.sh /tmp/iostat.out 8 || echo 1
UserParameter=iostat.metric[*],/usr/local/etc/zabbix_agent_scripts/iostat-parse.sh /tmp/iostat.out $1 $2

Создадим первый скрипт:

root@debian7:~# nano /usr/local/etc/zabbix_agent_scripts/iostat-collect.sh

Вставим код:

#!/usr/bin/env bash
# Description: Script for iostat monitoring
# Author: Epikhin Mikhail michael@nomanlab.org
# Revision 1: Lesovsky A.V. lesovsky@gmail.com

SECONDS=$2
TOFILE=$1
IOSTAT=”/usr/bin/iostat”

[[ $# -lt 2 ]] && { echo “FATAL: some parameters not specified”; exit 1; }

DISK=$($IOSTAT -x 1 $SECONDS | awk ‘BEGIN {check=0;} {if(check==1 && $1==”avg-cpu:”){check=0}if(check==1 && $1!=””){print $0}if($1==”Device:”){check=1}}’ | tr ‘\n’ ‘|’)
echo $DISK | sed ‘s/|/\n/g’ > $TOFILE
echo 0

И второй:

root@debian7:/usr/local/etc# nano /usr/local/etc/zabbix_agent_scripts/iostat-parse.sh

Вот с таким кодом:

#!/usr/bin/env bash
# Description: Script for disk monitoring
# Author: Epikhin Mikhail michael@nomanlab.org
# Revision 1: Lesovsky A.V. lesovsky@gmail.com

NUMBER=0
FROMFILE=$1
DISK=$2
METRIC=$3

[[ $# -lt 3 ]] && { echo “FATAL: some parameters not specified”; exit 1; }
[[ -f “$FROMFILE” ]] || { echo “FATAL: datafile not found”; exit 1; }

case “$3” in
“rrqm/s”)
NUMBER=2
;;
“wrqm/s”)
NUMBER=3
;;
“r/s”)
NUMBER=4
;;
“w/s”)
NUMBER=5
;;
“rkb/s”)
NUMBER=6
;;
“wkb/s”)
NUMBER=7
;;
“avgrq-sz”)
NUMBER=8
;;
“avgqu-sz”)
NUMBER=9
;;
“await”)
NUMBER=10
;;
“r_await”)
NUMBER=11
;;
“w_await”)
NUMBER=12
;;
“svctm”)
NUMBER=13
;;
“util”)
NUMBER=14
;;
*) echo ZBX_NOTSUPPORTED; exit 1 ;;
esac

grep -w $DISK $FROMFILE | tail -n +2 | tr -s ‘ ‘ |awk -v N=$NUMBER ‘BEGIN {sum=0.0;count=0;} {sum=sum+$N;count=count+1;} END {printf(“%.2f\n”, sum/count);}’

Выставим на оба скрипта необходимые права:
root@debian7:~# chmod 755 /usr/local/etc/zabbix_agent_scripts/iostat-collect.sh
root@debian7:~# chmod 755 /usr/local/etc/zabbix_agent_scripts/iostat-parse.sh

Отредактируем файл конфигурации агента:
root@debian7:~# nano /usr/local/etc/zabbix_agentd.conf
Нам нужен параметр “Include“, задаем ему следующее значение:
Include=/usr/local/etc/zabbix_agent_configs

Структура каталогов должна выглядеть примерно следующим образом, если вы настраивали все точно также как и я:

zabbix disk monitoring 01

Перезапускаем агента:
root@debian7:~# service zabbix-agent restart

Проверяем подцепляется ли конфигурационный файл с пользовательскими параметрами (можно воспользоваться любой командой):
root@debian7:~# zabbix_agentd -t iostat.discovery
root@debian7:~# zabbix_get -s 127.0.0.1 -p 10050 -k iostat.discovery

Должно получиться что-то на подобии этого:

zabbix disk monitoring 02

Дальше необходимо добавить шаблон мониторинга на наш zabbix-сервер через web-интерфейс. Для этого проходим в Настройка>Шаблоны, нажимаем справа вверху “Импорт” и загружаем шаблон “iostat-disk-utilization-template.xml”. Подцепляем шаблон к узлам мониторинга – Узлы сети > выбираем нужный узел > вкладка “Шаблоны” > соединяем с новым шаблоном > нажимаем “Добавить” > нажимаем “Обновить”.

У автора скриптов есть одна непримечательная заметка:

Attention: Second parameter in iostat.collect must be less than Timeout option in zabbix_agentd.conf

Игнорировать её не стоит, иначе работать скрипты не будут. Для исправления заходим в конфигурационный файл zabbix-агента:

root@debian7:~# nano /usr/local/etc/zabbix_agentd.conf

Ищем опцию “Timeout” и задаем ей значение больше, чем в скрипте, например:

Timeout=20

То же самое делаем в файле конфигурации zabbix-сервера:

root@debian7:~# nano /usr/local/etc/zabbix_server.conf

Timeout=20

На этом настройка завершена, данные должны приходить. Чтобы не быть голословным, приведу пару скриншотов, свидетельствующих хотя бы то, что у меня все работает:

zabbix disk monitoring 03

zabbix disk monitoring 04

Подробнее о параметрах “iostat” можно прочитать в “манах”, но на всякий случай опубликую описания тут:

avgqu-sz – The average queue length of the requests that were issued to the device.
avgrq-sz – The average size (in sectors) of the requests that were issued to the device.
await – The average time (in milliseconds) for I/O requests issued to the device to be served. This includes the time spent by the requests in queue and the time spent servicing them.
r_await – The average time (in milliseconds) for read requests issued to the device to be served. This includes the time spent by the requests in queue and the time spent servicing them.
rsec/s (rkB/s, rMB/s) – The number of sectors (kilobytes, megabytes) read from the device per second.
r/s – The number (after merges) of read requests completed per second for the device.
rrqm/s – The number of read requests merged per second that were queued to the device.
%util – Percentage of CPU time during which I/O requests were issued to the device (bandwidth utilization for the device). Device saturation occurs when this value is close to 100%.
w_await – The average time (in milliseconds) for write requests issued to the device to be served. This includes the time spent by the requests in queue and the time spent servicing them.
w/s – The number (after merges) of write requests completed per second for the device.
wrqm/s – The number of write requests merged per second that were queued to the device.
wsec/s (wkB/s, wMB/s) – The number of sectors (kilobytes, megabytes) written to the device per second.


Кому интересно, можно почитать немного отличающиеся варианты реализации мониторинга нагрузки на жесткие диски:

Мониторинг дисковой активности с помощью zabbix

ZABBIX & IOSTAT. Мониторим диски

Яндекс.Метрика