Mississippi Network Monitoring

chevy is running Cacti, and monitoring all of the deployed metrixes and ciscos. The graphs are available at

Use username: guest, password: freewifirocks.

Contents

Set up

Metrix

SNMP

Now-a-days, the image we use for metrixes, which is based on PyramidLinux and maintained by RussellSenior, contains snmpd natively as well as about 10 "exec"-style custom exports:

What?

OID

snmpd.conf line

Local Coverage (ath0) assocation count

1.3.6.1.4.1.2021.8.1.101.1

exec assoc_count /usr/local/bin/assoc_count

Upstream Link Loss

1.3.6.1.4.1.2021.8.1.101.2

exec link-loss /usr/local/bin/get-value.sh backhaul loss

Upstream Link Ping Trials

1.3.6.1.4.1.2021.8.1.101.3

exec link-trials /usr/local/bin/get-value.sh backhaul ping-trials

Upstream Link Ping Successes

1.3.6.1.4.1.2021.8.1.101.4

exec link-success /usr/local/bin/get-value.sh backhaul ping-success

Upstream Link Latency Min

1.3.6.1.4.1.2021.8.1.101.5

exec link-latency-min /usr/local/bin/get-value.sh backhaul latency-min

Upstream Link Latency Ave

1.3.6.1.4.1.2021.8.1.101.6

exec link-latency-ave /usr/local/bin/get-value.sh backhaul latency-ave

Upstream Link Latency Max

1.3.6.1.4.1.2021.8.1.101.7

exec link-latency-max /usr/local/bin/get-value.sh backhaul latency-max

Upstream Link RSSI Min

1.3.6.1.4.1.2021.8.1.101.8

exec link-rssi-min /usr/local/bin/get-value.sh backhaul rssi-min

Upstream Link RSSI Ave

1.3.6.1.4.1.2021.8.1.101.9

exec link-rssi-ave /usr/local/bin/get-value.sh backhaul rssi-ave

Upstream Link RSSI Max

1.3.6.1.4.1.2021.8.1.101.10

exec link-rssi-max /usr/local/bin/get-value.sh backhaul rssi-max

And, before you point out that this would be better if we used "extend" instead of "exec": we are running net-snmpd 5.1.2, which is before "extend" was added... For more information on these exec scripts, see the bottom of this page...

Cacti

Then, finish up by:

WGTs

TODO: Fill me in with correct information!

Scripts

assoc_count.sh

echo $(($(wc -l < /proc/net/madwifi/ath0/associated_sta)/3))

get-value.sh

LINK=${1:-backhaul}
VALUE=${2:-loss}

DIR=/tmp/linkstats
TARGET=${DIR}/${LINK}-${VALUE}

if [ ! -f ${TARGET} ] || [ $(expr $(date +%s) "-" $(date -r ${TARGET} +%s)) -ge 60 ]; then
    /usr/local/bin/compute-stats.sh ${LINK}
fi

cat ${TARGET}

monitor-link.sh

# grab information for link monitoring

DESTIP=10.11.104.2
DESTNAME=backhaul
IFACE=ath3
INTERVAL=500 # in centiseconds
OUTDIR=/tmp/linkstats

centiseconds () { 
awk '{ printf("%ld\n", $1 * 100) }' /proc/uptime 
}

mkdir -p -m 777 ${OUTDIR}
start=$(centiseconds)
end=$start

while true; do
    end=$(expr ${end} "+" ${INTERVAL})

    latency=$(ping -c 1 -i 5 -w 4 -q ${DESTIP} | sed -n -r -e 's|^rtt min/avg/max/mdev = ([0-9.]*)/.*|\1|p')

    if [ "${latency}" != "-" ]; then
        rssi=$(awk '$1 ~ /rssi/ { print $2 }' /proc/net/madwifi/${IFACE}/associated_sta)
    else
        latency=""
        rssi=0
    fi

    now=$(centiseconds)
    echo $now $latency $rssi >> ${OUTDIR}/${DESTNAME}

    sleep $(expr $(expr ${end} "-" ${now}) "/" 100)
done

INPUT=/tmp/linkstats/backhaul

if [ ! -f ${INPUT} ]; then
        echo 0 0 0 0 0 0 0 0 0;
        exit 0;
fi

/bin/mv ${INPUT} ${INPUT}-computing

/bin/awk 'BEGIN { min_latency = 5.0 ; max_latency = 0.0; min_rssi = 100 ; max_rssi = 0 }
NF == 2 { n_trials++ ; next }
NF == 3 { latency = $2 ; rssi = $3 ; sum_latency += latency ; sum_rssi += rssi ; n_trials++ ; n_success++ }
latency < min_latency { min_latency = latency }
latency > max_latency { max_latency = latency }
rssi < min_rssi { min_rssi = rssi }
rssi > max_rssi { max_rssi = rssi }
#{ print "debug", n_trials, n_success, latency, min_latency, sum_latency, max_latency, rssi, min_rssi, sum_rssi, max_rssi }
END { if (n_trials == 0) {
        print 0,0,0,0,0,0,0,0,0
} else {
        printf("%.3f %d %d", (n_trials - n_success)/n_trials,n_success,n_trials);
        if (n_success == 0) {
                print "",0,0,0,0,0,0
        }
        printf(" %.3f %.3f %.3f %d %.1f %d\n",
                min_latency, sum_latency / n_success,
                max_latency, min_rssi, sum_rssi / n_success, max_rssi)
} }' ${INPUT}-computing

rm -f ${INPUT}-computing

exit 0

/etc/init.d/linkstats

#
# skeleton      example file to build /etc/init.d/ scripts.
#               This file should be used to construct scripts for /etc/init.d.
#
#               Written by Miquel van Smoorenburg <miquels@cistron.nl>.
#               Modified for Debian GNU/Linux
#               by Ian Murdock <imurdock@gnu.ai.mit.edu>.
#
# Version:      @(#)skeleton  1.9.1  08-Apr-2002  miquels@cistron.nl
#

PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
DAEMON=/usr/local/bin/monitor-link.sh
NAME=monitor-link
DESC="link quality measurement"


test -x $DAEMON || exit 0

set -e

case "$1" in
  start)
        echo -n "Starting $DESC: $NAME"
        start-stop-daemon --start -b --quiet --pidfile /var/run/$NAME.pid \
                --exec $DAEMON
        echo "."
        ;;
  stop)
        echo -n "Stopping $DESC: $NAME "
        start-stop-daemon --stop --quiet --pidfile /var/run/$NAME.pid \
                --exec $DAEMON
        echo "."
        ;;
  restart|force-reload)
        #
        #       If the "reload" option is implemented, move the "force-reload"
        #       option to the "reload" entry above. If not, "force-reload" is
        #       just the same as "restart".
        #
        echo -n "Restarting $DESC: $NAME"
        start-stop-daemon --stop --quiet --pidfile \
                /var/run/$NAME.pid --exec $DAEMON
        sleep 1
        start-stop-daemon --start -b --quiet --pidfile \
                /var/run/$NAME.pid --exec $DAEMON
        echo "."
        ;;
  *)
        N=/etc/init.d/$NAME
        # echo "Usage: $N {start|stop|restart|reload|force-reload}" >&2
        echo "Usage: $N {start|stop|restart|force-reload}" >&2
        exit 1
        ;;
esac

exit 0

Diagnostics

You can check that stuff is working remotely like:

snmpget -c public -v 1 <ip> <oid>

Using any OID and IP you'd like. The ones in the tables on this page are worth testing...

TODO

MississippiMonitoring (last edited 2007-11-23 18:02:36 by localhost)