2
0
mirror of https://github.com/munin-monitoring/contrib.git synced 2018-11-08 00:59:34 +01:00
contrib-munin/plugins/other/ipfwnat_

130 lines
2.8 KiB
Plaintext
Raw Normal View History

2009-10-12 21:47:42 +02:00
#!/bin/sh
#
# Copyright (C) 2009 Alexey Illarionov <littlesavage@rambler.ru>
#
# Wildcard plugin to monitor ipfw nat aliasing links count
#
# Usage: Link ipfwnat_<nat number> to this file. E.g,
#
# ln -s ipfwnat_ /etc/munin/node.d/ipfwnat_123
#
# ... will moninot nat number 123
#
# This plugin needs to be run as root. Sample plugins.conf:
#
# [ipfwnat_*]
# user root
#
# Furthermore, nat configuration must contain "log" option. E.g.
#
# ipfw nat 123 config ip 198.76.28.4 log
#
# This plugin is based on the if_ plugin.
#
# Magic markers (optional - used by munin-config and some installation
# scripts):
#
#%# family=auto
#%# capabilities=autoconf suggest
NAT_NUM=`basename $0 | sed 's/^ipfwnat_//g'`
ipfw="/sbin/ipfw"
if [ "$1" = "autoconf" ]; then
if [ ! -x $ipfw ]; then
echo "no ($ipfw not found)"
exit 1
fi
err=$($ipfw nat show config 2>&1)
if [ $? -ne 0 ]; then
echo "no ($err)"
exit 1
fi
echo "yes"
exit 0
fi
if [ "$1" = "suggest" ]; then
$ipfw nat show config 2> /dev/null | /usr/bin/awk '/nat [0-9]+ .+ log/{print $3;}'
exit 0
fi
if [ "$1" = "config" ]; then
echo "graph_title Ipfw NAT ${NAT_NUM} aliasing links count"
echo 'graph_args --base 1000 -l 0'
echo 'graph_vlabel links count'
echo 'graph_noscale true'
echo 'graph_category network'
echo 'tcp.draw AREA'
echo 'tcp.label tcp'
echo 'tcp.info TCP aliasing links count'
echo 'udp.draw STACK'
echo 'udp.label udp'
echo 'udp.info UDP aliasing links count'
echo 'sctp.draw STACK'
echo 'sctp.label sctp'
echo 'sctp.info SCTP aliasing links count'
echo 'icmp.draw STACK'
echo 'icmp.label icmp'
echo 'icmp.info ICMP aliasing links count'
echo 'pptp.draw STACK'
echo 'pptp.label pptp'
echo 'pptp.info PPTP aliasing links count'
echo 'proto.draw STACK'
echo 'proto.label proto'
echo 'proto.info proto aliasing links count'
echo 'fragid.draw STACK'
echo 'fragid.label frag_id'
echo 'fragid.info Fragment id aliasing links count'
echo 'fragptr.draw STACK'
echo 'fragptr.label frag_ptr'
echo 'fragptr.info Fragment ptr aliasing links count'
echo "graph_info Ipfw NAT ${NAT_NUM} aliasing links count."
exit 0
fi
$ipfw nat ${NAT_NUM} show 2>/dev/null | /usr/bin/awk '
BEGIN {
res["tcp"] = "U";
res["udp"] = "U";
res["sctp"] = "U";
res["icmp"] = "U";
res["pptp"] = "U";
res["proto"] = "U";
res["frag_id"] = "U";
res["frag_ptr"] = "U";
}
/^nat [0-9]+:/{
split($0, a, /[,\/:[:space:]]+/);
for (f in a) {
if (a[f] ~ /^[a-z_]+=[0-9]+$/) {
split(a[f], v, /=/);
res[v[1]] += (v[2] + 0);
}
}
}
END {
printf "tcp.value %s\n", res["tcp"];
printf "udp.value %s\n", res["udp"];
printf "sctp.value %s\n", res["sctp"];
printf "icmp.value %s\n", res["icmp"];
printf "pptp.value %s\n", res["pptp"];
printf "proto.value %s\n", res["proto"];
printf "fragid.value %s\n", res["frag_id"];
printf "fragptr.value %s\n", res["frag_ptr"];
}
'