Portál AbcLinuxu, 4. června 2024 23:36

Sledování stavu Areca řadiče Nagiosem

10.9.2010 00:44 | Přečteno: 963× | Diskuze | poslední úprava: 10.9.2010 00:44

Na některých serverech používáme řadiče Areca ARC-1680, pro klidný spánek monitorujeme stav diskových svazků Nagiosem.
Pro sledování stavu využíváme utilitu od výrobce, program arecacli:

[root@server ~]#  /usr/local/sbin/arecacli vsf info
  # Name             Raid Name       Level   Capacity Ch/Id/Lun  State         
===============================================================================
  1 ARC-1680-VOL#000 RS# Dat1        Raid1+0  750.0GB 00/00/00   Normal
  2 ARC-1680-VOL#001 RS# Dat2        Raid1+0  750.0GB 00/00/01   Normal
  3 ARC-1680-VOL#002 RS# Dat3        Raid1+0 1466.0GB 00/00/02   Normal
  4 ARC-1680-VOL#003 RS# Dat4        Raid6   3750.0GB 00/00/03   Normal
===============================================================================
GuiErrMsg<0x00>: Success.

Program arecacli je třeba spouštět pod vyšším oprávněním, nechtělo se mi měnit práva k zařízení v /dev, tak jsem použil SUDO, zápis v /etc/sudoers:

Cmnd_Alias ARECA = /usr/local/sbin/arecacli
nrpe    ALL= NOPASSWD: ARECA
#!/bin/bash

VOLUMES="1 2 3 4"

STATE_OK=0              # define the exit code if status is OK
STATE_WARNING=1         # define the exit code if status is Warning (not really used)
STATE_CRITICAL=2        # define the exit code if status is Critical
STATE_UNKNOWN=3         # define the exit code if status is Unknown

PATH=/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin

for cmd in arecacli awk sudo [
do
 if ! `which ${cmd} 1>/dev/null`
 then
  echo "UNKNOWN: ${cmd} does not exist, please check if command exists and PATH is correct"
  exit ${STATE_UNKNOWN}
 fi
done

RESULT=""
ERROR=0
for volume in $VOLUMES; do
        volstate=$(/usr/bin/sudo /usr/local/sbin/arecacli vsf info vol=${volume} | awk -F: '/Volume\ State/{str=$2; sub("[ \t]*","",str); print str}')
        if [ "${volstate}" != "Normal" ]; then
                ERROR=1
        fi
        RESULT="${RESULT}Vol$volume: ${volstate} "
done

if [ $ERROR -gt 0 ]; then
        echo "ERROR: ${RESULT}"
        exit ${STATE_CRITICAL}
else
        echo "OK: ${RESULT}"
        exit ${STATE_OK}
fi

Arecacli pro kontrolu svazku potřebuje skoro jednu sekundu. U nás celkem pro běh skriptu potřebujeme 4s:

[root@server ~]# time /usr/local/sbin/check_areca 
OK: Vol1: Normal Vol2: Normal Vol3: Normal Vol4: Normal 

real    0m3.973s
user    0m0.015s
sys     0m0.044s
Zařazení do NRPE je snadné, /etc/nagios/nrpe.cfg:
...
command[check_areca]=/usr/local/sbin/check_areca
...

Zápisek je také publikován na mém novém blogu: blog.bcvsolutions.eu

       

Hodnocení: 100 %

        špatnédobré        

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

Komentáře

Nástroje: Začni sledovat (2) ?Zašle upozornění na váš email při vložení nového komentáře. , Tisk

Vložit další komentář

10.9.2010 10:34 komodo | skóre: 27 | blog: komodo
Rozbalit Rozbalit vše Re: Sledování stavu Areca řadiče Nagiosem
Odpovědět | Sbalit | Link | Blokovat | Admin
Puvodne jsem to chtel delat taky pres cli, ale zdalo se mi hodne pomale, nakonec jsem to udelal pres snmp.

Kdyz tak tady je muj script. Neni to nic extra ale funguje.

Jo a samozrejme musi byt v adresari, kde jsou ulozene MIB soubory nahran mib soubor od arecy.
#!/bin/bash

IP=$1
COMUNITY=$2

STATUS=""
CRITICAL=0


VOLUMES=$(snmpwalk -t 5 -Ov -v1 -Pu -c $COMUNITY $IP ARECA-SNMP-MIB::volNumber 2> /dev/null)

if [ $? == 0 ]; then

IFS=$'\n'

for VOLUME in $VOLUMES; do

    VOL_ID=$(echo "$VOLUME" | cut -d " " -f 2)

    VOL_STATE=$(echo $(snmpget -Ov -v1 -Pu -c $COMUNITY $IP ARECA-SNMP-MIB::volState.$VOL_ID) | cut -d " " -f 2 | tr -d "\"")

    VOL_NAME=$(echo $(snmpget -Ov -v1 -Pu -c $COMUNITY $IP ARECA-SNMP-MIB::volName.$VOL_ID) | cut -d " " -f 2 | tr -d "\"")

    if (echo $VOL_STATE | grep -vqi Normal); then

        CRITICAL=1
        STATUS="$STATUS Volume $VOL_NAME is $VOL_STATE"

    fi

done

unset IFS

else

    CRITICAL=1
    STATUS="No SNMP response"

fi

if [ $CRITICAL == 1 ]; then

    echo "CRITICAL - $STATUS"
    exit 2
else

    echo "OK - All volumes are in Normal state"
    exit 0
fi

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.