Monitor static route of Linux Host via SNMP

From Bitbull Wiki
Jump to navigation Jump to search


Tested on CentOS 7 x64

1 Create Route Checker

vi check_snmp_route.sh
#!/bin/bash
# quick nagios route check via snmp

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

# default state for checks
CSTATE=UNKNOWN

# state to write when check fails
FAIL_STATE=CRITICAL

DST_HOST=$1
COMUNITY="$2"
BASE_OID=.1.3.6.1.2.1.4.21.1

# check for this results
CNET=$3
CMASK=$4
CGW=$5

if [ $# -ne 5 ] ; then
   echo "USAGE: $(basename $0) <HOST> <COMUNITY> <NETWORK> <NETMASK> <GATEWAS>"
   exit 1
fi

# debug notes
# echo DST_HOST=$1
# echo COMUNITY="$2"
# echo CNET=$3
# echo CMASK=$4
# echo CGW=$4

# this are the results on dest host
DNET=$(snmpwalk  -v1 -c "$COMUNITY" $DST_HOST -On $BASE_OID.1.$CNET | cut -d= -f2- | awk '{print $2}')
DMASK=$(snmpwalk  -v1 -c "$COMUNITY" $DST_HOST -On $BASE_OID.11.$CNET | cut -d= -f2- | awk '{print $2}')
DGW=$(snmpwalk  -v1 -c "$COMUNITY" $DST_HOST -On $BASE_OID.7.$CNET | cut -d= -f2- | awk '{print $2}')

if [ "$CNET" = "$DNET" ] ; then
   if [ "$CMASK" = "$DMASK" ] ; then
      if [ "$CGW" = "$DGW" ] ; then
         CSTATE=OK
      fi
   fi
fi

if [ "$CSTATE" = "OK" ]
then
   echo "OK - $DNET/$DMASK $DGW"
   exit 0
else
   echo "$FAIL_STATE - $DNET/$DMASK $DGW"
   exit 2
fi

2 Create Nagios Comand

vi commands-custom.cfg
define command{
        command_name    check_static_route
                        # usage:                                 HOST_IP        COMUNITY  NETWORK   MASK   GATEWAY
        command_line    /etc/nagios/plugins/check_snmp_route.sh '$HOSTADDRESS$' '$ARG1$' '$ARG2$' '$ARG3$' '$ARG4$'
        }

3 Create Nagios Check

vi host.cfg
        define service {
                hosts                   myhost
                service_description     MY Route
                check_command           check_static_route!...secret...!10.20.0.0!255.255.0.0!192.168.2.1
        }