Portál AbcLinuxu, 31. října 2025 16:02
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.044sZař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
        Tiskni
            
                Sdílej:
                 
                 
                 
                 
                 
                 
            
    
#!/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.