Skip to main content

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

Задача – глянуть “внутрь” хранилища (в моем случаем – это некая СХД, подключенная к хосту с 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) в длинной перспективе – например, возможна облегченная оценка суточной/недельной нагрузки, с дальнейшим заглублением в потенциально проблемные места.