Мониторинг 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: , ,
Category: Linux | 1 Comment »

Comments

Один комментарий на “Мониторинг LSI MegaRAID”

  1. aprogrammer

    Спасибо за инструкцию. Кому интересно – подобная инструкция для мониторинга Magaraid под deb-подобными системами – http://sysadmin.te.ua/linux/monitoring-systems/smart-under-lsi-2108-kontroller.html

Leave a comment

 Comment Form