Мониторинг 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: 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