Мониторинг производительности дисковой подсистемы – что можно посчитать полезного?

Задача – глянуть “внутрь” хранилища (в моем случаем – это некая СХД, подключенная к хосту с Solaris 10), не заморачиваясь со сложными скриптами, графиками и прочими премудростями. Элементарно 🙂 Модные штучки аля dtrace это не отменяет 😉
Ниже один из “велосипедов”, который я иногда использую в работе в режиме quick and dirty look для обобщения.
Собираем статистику вот таким образом:
iostat -xdn 1 600 > iostat_-xdn_1_600-`hostname`-`date +%Y%m%d-%H%M%S`.txt
Я предпочитаю не запаковывать файлы, когда занят системой непосредственно, если же информация собирается удаленно – стоит использовать bzip2:
iostat -xdn 1 600 | bzip2 -z -c > iostat_-xdn_1_600-`hostname`-`date +%Y%m%d-%H%M%S`.txt.bz2
Дальше еще сколько-то букв
Есть несколько отличных утилит (SWAT, например), которые данный файл могут отлично разбирать, строить шикарные (ок, не очень шикарные) графики, искать медианы и пики. Все круто – но это нам не нужно – нам нужно быть проще 🙂 Интервал – секундный – это нужный нам вариант, 600 выборок – это создаст файл умеренного размера, который не прийдется долго и мучительно нарезать, задумываясь о привязке во времени. Правильно будет запустить коллектор в “обертке” тип while true ; do … done – это даст целый набор “срезов” производительности, все – с отличной привязкой по времени.
Пишем скрипт:
bash-3.2$ sh /tmp/vol_aggregate_stats.sh
for VOL in \
fas3240-1-1-10g:/vol/data1 \
fas3240-1-1-10g:/vol/logs \
fas3240-1-1-10g:/vol/fra \
; do
echo "$VOL ( $1 )"
bzcat $1 | grep $VOL | awk '{RE += $3 ; WR += $4 ; REIO +=$1 ; WRIO +=$2 ; WSVC+=$7 ; ASVC+=$8 } END { print " avg read IOPS " REIO / 600 " avg write IOPS " WRIO / 600 "\n avg read MB/s " RE / 600 /1024" avg write MB/s " WR / 600 / 1024 "\n avg asvc "ASVC / 600 "\n avg wsvc "WSVC / 600 "\n avg READ block size KB " (RE / 600) / ( REIO / 600 ) " avg write block size KB " (WR / 600) / (WRIO / 600)}'
echo
done
Имеем вот такой вывод:
bash-3.2$ sh /tmp/vol_aggregate_stats.sh iostat_-xdn_1_600-sigma-20120808-031000.txt.bz2
fas3240-1-1-10g:/vol/data1 ( iostat_-xdn_1_600-sigma-20120808-031000.txt.bz2 )
avg read IOPS 0.275333 avg write IOPS 2.06433
avg read MB/s 0.00389909 avg write MB/s 0.0164022
avg asvc 1.04517
avg wsvc 2.49567
avg READ block size KB 14.5012 avg write block size KB 8.1362
fas3240-1-1-10g:/vol/logs ( iostat_-xdn_1_600-sigma-20120808-031000.txt.bz2 )
avg read IOPS 315.115 avg write IOPS 3571.22
avg read MB/s 9.12315 avg write MB/s 27.9002
avg asvc 1.012
avg wsvc 0.304333
avg READ block size KB 29.6467 avg write block size KB 8
fas3240-1-1-10g:/vol/fra ( iostat_-xdn_1_600-sigma-20120808-031000.txt.bz2 )
avg read IOPS 0.165167 avg write IOPS 353.958
avg read MB/s 0.0050568 avg write MB/s 11.0609
avg asvc 0.404167
avg wsvc 0.1785
avg READ block size KB 31.3512 avg write block size KB 31.9993
bash-3.2$
Что нам это дает? Я последовательный сторонник цифр, больших и вообще – разных, постоянно борюсь с графиками 😉 Например, иногда нужно быстро выяснить в неком временном отрезке, какой из томов в ASM-группе очевидно подлежит перебалансировке. Такая аггрегированная статистика пригодна для изготовления графиков с помощью (xplot/jplot) в длинной перспективе – например, возможна облегченная оценка суточной/недельной нагрузки, с дальнейшим заглублением в потенциально проблемные места.