Saját Nagios plugin készítése.

A Nagios, vagy hozzá hasonló hálózat monitorozó alkalmazások nagyon sokat segítenek akkor, ha több szerver sok szolgáltatását kell ellenőrizni. Akár már egy szerver monitorozásánál is hasznos lehet, hiszen a beállított ellenőrzések és az azokhoz hozzárendelt hiba értékek alapján az ellenőrzések automatikusan és rendszeresen futnak...
A Nagios egy host (eszköz) vagy service (szolgáltatás) állapotát 3 gyakran használt értékkel tudja megadni: Ok, Warning, Critical.
Ezen kívül vannak állapototk, amelyek jellemzően új gép vagy szolgáltatás felvételekor, annak első ellenőrzéséig, vagy az előzőek közé be nem sorolt állapotban használ.

A Nagios telepítéséhez rengeteg plugint kapunk annak telepítésekor és az interneten sok egyéb kiegészítő fellelhető. Ennek ellenére speciális esetekben saját plugint készítése is megoldható.
Az alábbiakban egy egyszerű példán keresztül próbálom bemutatni a kiegészítők készítésének lehetőségeit. A Nagios egy több telephellyel rendelkező vállalat központjában elhelyezett szerveren fut, ahonnan a pl a telephelyek tárgyalótermeiben elhelyezett wireless AccessPointok működését ellenőrzi. A feladat annyi, hogy ellenőrizzük, hogy az eszköz a hálózatra van kötve és be van kapcsolva.
Minden eszköz rendelkezik webes adminisztrációs felülettel. Arról győződünk meg, hogy az eszköz 80-as TCP portja a kapcsolat kezdeményezésére válaszol.

Az alábbi plugin Bash Shell-ben íródott és az egyszerűség és átláthatóság volt a célja.
A script elején három tömbben tároljuk az APk adatait - IP cím, AP neve és AP helye.
Az alábbi sorokban beállítjuk az alapértelmezett visszatérési értékeket:

  • output="All APs are OK" - ez a szöveg jelenik meg a Nagios "Service Status Details" táblázatában akkor, ha minden rendben van (Status Information)
  • exit_status=0 - A script visszatérési értéke. Ennek változtatásával lehet módosítani, hogy a plugin Ok - 0, Warning - 1, Critical - 2 értéket mutasson a Nagiosban
  • affected_ips="" - Ha valamelyik eszközzel probléma van, akkor ebbe a változóba tesszük az adatait, ez is megjelenik az output változó mögött.

A script következő egysége egy for ciklus, ami az IP_cim tömbb elemein végighaladva futtatja a RESULT sorban megadott ellenőrzést:

RESULT=`/usr/lib/nagios/plugins/check_tcp -H ${ip_cim[$i]} -p 80 -t 10`


Látható, hogy egy másik Nagios plugint használunk az ellenőrzésre, de lehetőség van pl a ping parancs futtatására is.
A check_tcp hasznos plugin ilyen esetekben, mert sokkal gyorsabban ellenőrizhető vele egy host, mint pl a ping paranccsal:
linux:/tmp# time /usr/lib/nagios/plugins/check_tcp -H 192.168.200.1 -p 80 -t 10
TCP OK - 0.008 second response time on port 80|time=0.008068s;;;0.000000;10.000000

real    0m0.024s
user    0m0.000s
sys     0m0.004s

Látható, hogy egy eszköz ellenőrzése 0,024s vagyis 24 századmásodperc alatt végbement, ez ping esetén több másodpercet is igénybe vehet.
A check_tcp használatához legalább két változó megadására szükség van: -H IPCÍM, -p PORT_SZÁMA. A -t 10 azt a maximális időt jelzi, amíg a plugin az adott ellenőrzést futtatja - az érték megadása nélkül ez 3 másodperc.

Magyarázatra szorulhat a következő sor:
if [ `echo $RESULT | grep -c "TCP OK"` != 1 ]; then
Fent látható a sikeres port ellenőrzés kimenete. A fenti if ellenőrzés azt vizsgálja, hogy a parancs kimenetében hányszor szerepel a "TCP OK" karaktersor, ha ez nem egyszer (!=) szerepel, akkor probléma van az eszközzel.
Probléma esetén az output, affected_ips és exit_status változók értékét módosítjuk. Az affected_ips változó ezentúl az eddigi értékét és a most hibásnak talált eszköz adatait tartalmazza.

A for ciklus végén a visszatérési értéket a Nagios számára is használható módon írjuk ki.

A script maga:

linux:/tmp# cat check_own_plugin
#!/bin/bash

ip_cim[1]=192.168.200.1
ip_cim[2]=192.168.200.2
ip_cim[3]=192.168.200.3
ip_cim[4]=192.168.200.4
ip_cim[5]=192.168.200.5
ap_neve[1]=telephely1
ap_neve[2]=telephely2
ap_neve[3]=telephely3
ap_neve[4]=telephely4
ap_neve[5]=telephely5
ap_helye[1]="103 ajtó"
ap_helye[2]="109
ajtó"
ap_helye[3]="113
ajtó"
ap_helye[4]="146
ajtó"
ap_helye[5]="150
ajtó"

output="All APs are OK"
exit_status=0
affected_ips=""
i=0

for (( i=1; i<=${#ip_cim[*]}; i++ )) do
       RESULT=`/usr/lib/nagios/plugins/check_tcp -H ${ip_cim[$i]} -p 80 -t 10`
        if [ `echo $RESULT | grep -c "TCP OK"` != 1 ]; then
                output="WARNING ${ip_cim[$i]} $RESULT. Erintett IP(k):"
                affected_ips="$affected_ips ${ip_cim[$i]} (${ap_neve[$i]} - ${ap_helye[$i]}),"
                exit_status=1
        fi
done
echo "$output $affected_ips"
exit $exit_status


Új hozzászólás: