Мониторинг LSI MegaRAID

Date September 11th, 2012 Author Vitaly Agapov

Бог мой, надо что-то предпринять… Но я уже в пижаме.

м/ф «Футурама»

Если речь идёт о дисковом массиве, то обычно приходится мониторить не сам массив и не контроллер, а состояние дисков в массиве. Там они могут тихо и незаметно умирать, отъедая HSP и постепенно оставляя нас у разбитого корыта. Для мониторинга состояния дисков в рейде LSI MegaRAID используется утилита MegaCLI от LSI. На офсайте для скачивания сейчас требуют регистрацию, но на просторах интернета за пару минут гугления можно найти что угодно. Нас интересует 8.01.06_Linux_MegaCLI.zip.

Версию можно брать и постарше. А для ядра Linux версии 3 утилита этой версии может не заработать, так что искать более новую придётся обязательно.

Внутри архива – две rpm’ки. В RedHat и иже с ним можно обойтись с ними просто:

1.rpm -ivh Lib_Utils-1.00-08.noarch.rpm
2.rpm -ivh MegaCli-8.01.06-1.i386.rpm

В не rpm-based дистрибутивах можно воспользоваться alien’ом или просто распаковать rpm:

1.rpm2cpio Lib_Utils-1.00-08.noarch.rpm| cpio -idmv
2. ./opt/lsi/3rdpartylibs/LGPLLicenseV2.txt
3. ./opt/lsi/3rdpartylibs/libsysfs.so.2.0.2
4. ./opt/lsi/3rdpartylibs/src/sysfsutils-2.2.0.tar.gz
5. ./opt/lsi/3rdpartylibs/x86_64/libsysfs.so.2.0.2
6.rpm2cpio MegaCli-8.01.06-1.i386.rpm | cpio -idmv
7. ./opt/MegaRAID/MegaCli/MegaCli
8. ./opt/MegaRAID/MegaCli/MegaCli64

В последнем случае библиотеку libsysfs.so.2.0.2 ещё надо будет слинковать в /usr/lib, иначе утилита не заработает.

Просмотреть состояние дисков теперь можно такой командой:

1./opt/MegaRAID/MegaCli/MegaCli64 -pdlist -aALL -NoLog

Он выплёвывает много информации, среди которой есть и полезная. Для её обработки я набросал плагин для nrpe (check_sas_megaraid.pl):

01.#!/usr/bin/perl
02.my $CMD="/usr/bin/sudo /opt/MegaRAID/MegaCli/MegaCli64  -pdlist -aALL -NoLog";
03.my @result=`$CMD`;
04.my $EXIT_CODE=0;
05.my $MSG;
06.my $slot_number;
07.my $count=0;
08.my $hsp_count=0;
09.my $online_count=0;
10.my %disks;
11.foreach (@result) {
12.    chomp;
13.    if (/Slot Number: (\d+)/) {
14.       $slot_number=$1;
15.       $count++;
16.    }
17.    if (/Error Count: (\d+)/) {
18.       $disks{$slot_number}->{error}+=$1;  
19.       if ($1) {
20.           $MSG.="Disk ".$slot_number." has ".$1." errors. ";
21.           if (!$EXIT_CODE) { $EXIT_CODE=1; }
22.       }
23.    }
24.    if (/Predictive Failure Count: (\d+)/) {
25.       $disks{$slot_number}->{failure}+=$1;
26.       if ($1) {
27.           $MSG.="Disk ".$slot_number." has ".$1." predictive failures. ";
28.           if (!$EXIT_CODE) { $EXIT_CODE=1; }
29.       }
30.    }
31.    if (/Firmware state: (\w+)/g) {
32.       my $state=$1;
33.       $disks{$slot_number}->{state}=$state;
34.       if ($state eq "Online") { $online_count++; }
35.         elsif ($state eq "Hotspare") { $hsp_count++; }
36.             else {
37.                 $MSG.="Disk ".$slot_number." is ".$state.". ";
38.                 $EXIT_CODE=2;
39.             }
40.       }
41.     }
42.$MSG=$count." disks: ".$online_count." online, ".$hsp_count." hotspare.".$MSG;
43.print $MSG;
44.exit($EXIT_CODE);

Для его вызова в nrpe.cfg добавляем команду:

1.command[check_sas_megaraid]=/usr/lib/nagios/plugins/contrib/check_sas_megaraid.pl

Сложность заключается в том, что MegaCli в скрипте запускается из-под sudo, так как для получения инфы от контроллера нужны права суперпользователя. Поэтому надо дать пользователю nagios (если из-под него крутится nrpe) соответствующие права в /etc/sudoers:

1.nagios     ALL=(ALL) NOPASSWD: /opt/MegaRAID/MegaCli/MegaCli64

Но так как nrpe не держит консоли, чтобы он смог получить права, надо закомментировать в /etc/sudoers строчку:

1.#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 

Rich Text Editor, comment