Мониторинг LSI MegaRAID
Date September 11th, 2012 Author Vitaly Agapov
Если речь идёт о дисковом массиве, то обычно приходится мониторить не сам массив и не контроллер, а состояние дисков в массиве. Там они могут тихо и незаметно умирать, отъедая HSP и постепенно оставляя нас у разбитого корыта. Для мониторинга состояния дисков в рейде LSI MegaRAID используется утилита MegaCLI от LSI. На офсайте для скачивания сейчас требуют регистрацию, но на просторах интернета за пару минут гугления можно найти что угодно. Нас интересует 8.01.06_Linux_MegaCLI.zip.
Версию можно брать и постарше. А для ядра Linux версии 3 утилита этой версии может не заработать, так что искать более новую придётся обязательно.
Внутри архива – две rpm’ки. В RedHat и иже с ним можно обойтись с ними просто:
rpm -ivh Lib_Utils-1.00-08.noarch.rpm rpm -ivh MegaCli-8.01.06-1.i386.rpm
В не rpm-based дистрибутивах можно воспользоваться alien’ом или просто распаковать rpm:
rpm2cpio Lib_Utils-1.00-08.noarch.rpm| cpio -idmv ./opt/lsi/3rdpartylibs/LGPLLicenseV2.txt ./opt/lsi/3rdpartylibs/libsysfs.so.2.0.2 ./opt/lsi/3rdpartylibs/src/sysfsutils-2.2.0.tar.gz ./opt/lsi/3rdpartylibs/x86_64/libsysfs.so.2.0.2 rpm2cpio MegaCli-8.01.06-1.i386.rpm | cpio -idmv ./opt/MegaRAID/MegaCli/MegaCli ./opt/MegaRAID/MegaCli/MegaCli64
В последнем случае библиотеку libsysfs.so.2.0.2 ещё надо будет слинковать в /usr/lib, иначе утилита не заработает.
Просмотреть состояние дисков теперь можно такой командой:
/opt/MegaRAID/MegaCli/MegaCli64 -pdlist -aALL -NoLog
Он выплёвывает много информации, среди которой есть и полезная. Для её обработки я набросал плагин для nrpe (check_sas_megaraid.pl):
#!/usr/bin/perl my $CMD="/usr/bin/sudo /opt/MegaRAID/MegaCli/MegaCli64 -pdlist -aALL -NoLog"; my @result=`$CMD`; my $EXIT_CODE=0; my $MSG; my $slot_number; my $count=0; my $hsp_count=0; my $online_count=0; my %disks; foreach (@result) { chomp; if (/Slot Number: (\d+)/) { $slot_number=$1; $count++; } if (/Error Count: (\d+)/) { $disks{$slot_number}->{error}+=$1; if ($1) { $MSG.="Disk ".$slot_number." has ".$1." errors. "; if (!$EXIT_CODE) { $EXIT_CODE=1; } } } if (/Predictive Failure Count: (\d+)/) { $disks{$slot_number}->{failure}+=$1; if ($1) { $MSG.="Disk ".$slot_number." has ".$1." predictive failures. "; if (!$EXIT_CODE) { $EXIT_CODE=1; } } } if (/Firmware state: (\w+)/g) { my $state=$1; $disks{$slot_number}->{state}=$state; if ($state eq "Online") { $online_count++; } elsif ($state eq "Hotspare") { $hsp_count++; } else { $MSG.="Disk ".$slot_number." is ".$state.". "; $EXIT_CODE=2; } } } $MSG=$count." disks: ".$online_count." online, ".$hsp_count." hotspare.".$MSG; print $MSG; exit($EXIT_CODE);
Для его вызова в nrpe.cfg добавляем команду:
command[check_sas_megaraid]=/usr/lib/nagios/plugins/contrib/check_sas_megaraid.pl
Сложность заключается в том, что MegaCli в скрипте запускается из-под sudo, так как для получения инфы от контроллера нужны права суперпользователя. Поэтому надо дать пользователю nagios (если из-под него крутится nrpe) соответствующие права в /etc/sudoers:
nagios ALL=(ALL) NOPASSWD: /opt/MegaRAID/MegaCli/MegaCli64
Но так как nrpe не держит консоли, чтобы он смог получить права, надо закомментировать в /etc/sudoers строчку:
#Defaults requiretty
Tags: Linux, Nagios, Perl
Category:
Linux |
1 Comment »
8 February 2014 - 19:11
Спасибо за инструкцию. Кому интересно – подобная инструкция для мониторинга Magaraid под deb-подобными системами – http://sysadmin.te.ua/linux/monitoring-systems/smart-under-lsi-2108-kontroller.html