poniedziałek, 23 lipca 2012

Nagios - monitorowanie kontrolera RAID 3WARE 9650SE

Z uwagi na budżet, nie używam "dużych" serwerów takich jak np. HP Proliant DL380 G7. Do wykorzystywanych przeze mnie funkcjonalności w zupełności wystarcza najmniejszy HP Proliant DL 120 G6 i G7. Niestety HP ograniczyło ich funkcjonalność przez zastosowanie kontrolera RAID SmartArray B110i SATA, który nie jest wspierany przez XenServer. Nie zależnie od ustawień w BIOSie maszyny, XenServer widzi dyski fizyczne a nie np. zestaw RAID1. Funkcjonalność serwera DL120 można poprawić przez zastosowanie kontrolera RAID 3Ware z rodziny 9560SE. Są ta bardzo zaawansowane kontrolery obsługujące od 4 do 24 dysków SATA i umożliwiające zbudowanie macierzy RAID praktycznie każdego poziomu  z RAID6 włącznie. Mogą być one doposażone w moduł bateryjny służący do podtrzymania cache dyskowego w razie nagłej utraty zasilania, co zapobiega utracie danych przy trybie zapisu writeback cache. Niestety jest też dość znaczący minus. Normalnie serwer posiada moduł diagnostyczny i w razie awarii dysku na kieszeni wyświetlany jest alarm w postaci diody LED. Po zastosowaniu kontrolera nie mamy dostępu do tej funkcjonalności. Jest to prawdopodobnie do obejścia, ale wymaga ingerencji w okablowanie wewnętrzne serwera. Z pomocą do monitoringu stanu pracy macierzy, dysków i baterii przyszedł mi Nagios i plugin napisany przez Mariusa Heina z firmy Netways Gmbh a znaleziony na http://exchange.nagios.org. Marius ograniczył się do testowania wyłącznie zestawów RAID na lokalnej maszynie. Rozbudowałem ten plugin o możliwość monitorowania maszyny zdalnej, testowanie dysków fizycznych i baterii. Dzięki temu uzyskałem w pełni funkcjonalny monitoring stanu macierzy dyskowej w serwerach.


jak to działa???

Plugin jest napisany w Perlu, wykorzystuje protokół SSH do zdalnego wykonania programu na monitorowanym serwerze. Do logowania się na zdalnej maszynie użyłem kluczy RSA by nie było konieczności podawania hasła - opisane tutaj

UWAGA: Skrypt używa konta roota dla dostępu do zdalnej maszyny - tak wiem jest to niebezpieczne, ale w posiadanym przeze mnie środowisku jest to nieistotne. Można przystosować skrypt do użycia z dowolnym użytkownikiem, który będzie miał możliwość wykonania kodu na zdalnej maszynie. 

Oprócz tego potrzebny będzie interfejs CLI kontrolera 3Ware. To za jego pomocą uzyskamy dostęp do kontrolera i stanu poszczególnych komponentów systemu RAID. W zależności od systemu Linux potrzebny będzie jeden z poniższych plików:
     
tw_cli-linux-x86_64-9.4.1.3.tgz
tw_cli-linux-x86_64-9.5.3.tgz
tw_cli-linux-x86-9.3.0.7.tgz

Program tw_cli odpowiada za bezpośredni dostęp do interfejsu kontrolera, program tw_sched jest portem pomiędzy cronem a tw_cli i pozwala na automatyzację niektórych funkcji, np. cykliczne test macieży. Składnia obu programów jest opisana w załączonej dokumentacji.

Ostatnim krokiem jest konfiguracja Nagiosa - komendy, testy itp.


konfiguracja

Teraz trzeba zebrać to w całość i uruchomić. Zatem po kolei:

1. instalacja tw_cli 

Kopiujemy i rozpakowujemy archiwum z oprogramowaniem dla kontrolera

# tar -xvf tw_cli-linux-x86-9.3.0.7.tgz

Program ma bardzo bogaty help, opisany również w manach.

2. instalacja i konfiguracja pluginu

Plik z pluginem należy skopiować do katalogu /usr/lib/nagios/plugins i upewnić się że użytkownik nagios może wykonywać skrypt, np.

-rwxr-xr-x 1 root root 6723 06-25 13:29 check_3ware.pl

Plugin jest to pobrania TUTAJ

Oprócz tego, jeśli to konieczne należy zmienić użytkownika, który loguje się przez SSH do maszyny - linia 55

$conf{'path'} = 'ssh root@';



3. konfiguracja Nagiosa

W katalogu /etc/nagios-plugins/config należy utworzyć plik z konfiguracją komend dla Nagiosa:


# 'check_3ware' command definition
define command{
        command_name    check_3ware_raid
        command_line    /usr/lib/nagios/plugins/check_3ware.pl -H $HOSTADDRESS$ -C $ARG1$ -U $ARG2
        }

define command{
        command_name    check_3ware_disc
        command_line    /usr/lib/nagios/plugins/check_3ware.pl -H $HOSTADDRESS$ -C $ARG1$ -D $ARG2$
        }

define command{
        command_name    check_3ware_bbu
        command_line    /usr/lib/nagios/plugins/check_3ware.pl -H $HOSTADDRESS$ -C $ARG1$ -B $ARG2$
        }


Następnie w pliku konfiguracyjnym dodajemy nowe serwisy, należy pamiętać o zmianie   parametru hostgroup_name na odpowiedni dla posiadanej konfiguracji.


define service {
        hostgroup_name          xen-servers
        service_description     RAID Unit 0
        check_command           check_3ware_raid!0!0
        use                     template-service
}
define service {
        hostgroup_name          xen-servers
        service_description     RAID Unit 1
        check_command           check_3ware_raid!0!1
        use                     template-service
}
define service {
        hostgroup_name          xen-servers
        service_description     BBU
        check_command           check_3ware_bbu!0!0
        use                     template-service
}
define service {

        hostgroup_name          xen-servers
        service_description     Disc 0
        check_command           check_3ware_disc!0!0
        use                     template-service
}
define service {
        hostgroup_name          xen-servers
        service_description     Disc 1
        check_command           check_3ware_disc!0!1
        use                     template-service
}
define service {
        hostgroup_name          xen-servers
        service_description     Disc 2
        check_command           check_3ware_disc!0!2
        use                     template-service
}
define service {
        hostgroup_name          xen-servers
        service_description     Disc 3
        check_command           check_3ware_disc!0!3
        use                     template-service
}


Na koniec weryfikujemy konfigurację Nagiosa i restartujemy serwis.

# /usr/sbin/nagios3 -v /etc/nagios3/nagios.cfg
# /etc/init.d/nagios3 restart



4. A oto efekt


Alarm modułu bateryjnego


Alarmu dysku fizycznego i macierzy