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

Мониторинг производительности дисковых подсистем с помощью zabbix. Мониторятся следующие параметры.

  • утилизация блочного устройства в % — удобная метрика для отслеживания общей нагрузки на устройстве;
  • latency или отзывчивость — доступна как общая отзывчивость, так и отзывчивость на операциях чтения/записи;
  • величина очереди (в запросах) и средний размер запроса (в секторах) — позволяет оценить характер нагрузки и степень загруженности устройства;
  • текущая скорость чтения/записи на устройство в человекопонятных килобайтах;
  • количество запросов чтения/записи (в секунду) объединенных при постановке в очередь на выполнение;
  • iops — величина операций чтения/записи в секунду;

Для работы нам потребуется утилита iostat входящая в пакет sysstat. Устанавливаем sysstat

yum install sysstat

Создаем директорию для скриптов

mkdir /usr/libexec/zabbix-extensions/scripts/

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

vi /usr/libexec/zabbix-extensions/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 -xm 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

Создаем второй скрипт для парсинга

vi /usr/libexec/zabbix-extensions/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("%.2fn", sum/count);}'

Даем права на запуск

chmod +x /usr/libexec/zabbix-extensions/scripts/iostat-collect.sh /usr/libexec/zabbix-extensions/scripts/iostat-parse.sh

Создаем файл с ключами zabbix агента

vi /etc/zabbix/zabbix_agentd.d/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("{nt"data":[n");for(i=0;i<count;++i){printf("tt{nttt"{#HARDDISK}":"%s"}", array[i]); if(i+1<count){printf(",n");}} printf("]}n");}'

UserParameter=iostat.collect,/usr/libexec/zabbix-extensions/scripts/iostat-collect.sh /tmp/iostat.out 8 || echo 1

UserParameter=iostat.metric[*],/usr/libexec/zabbix-extensions/scripts/iostat-parse.sh /tmp/iostat.out $1 $2

Рестартуем агента

systemctl restart zabbix-agent

Скачиваем шаблон для zabbix сервера и устанавливаем.

В итоге должны получить красивые графики, например загрузка диска

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.



2019-02-11T14:25:23
Zabbix