Hi all
I came up with a munin plugin to monitor pf queues, so here it is, in
case anyone cares. I'm a pretty shitty scripter, so suggestions and
comments are mostly welcome, either by mail or on
https://gist.github.com/zeloff/60ec3b546fcab6e1c8cf
Cheers
Zé
--
#!/bin/sh
# POD documentation
: <<=cut
=head1 NAME
pf_queue_ - Munin plugin to monitor OpenBSD's pf queues.
=head1 APPLICABLE SYSTEMS
OpenBSD 5.5 and newer
=head1 CONFIGURATION
[pf_queue*]
user root
Use the .env settings to override the defaults.
=head1 USAGE
Can be used to present different graphs. Use ln -s for that name in
the plugins directory to enable the graph.
pf_queue_bytes - traffic in each queue, in bytes
pf_queue_packets - traffic in each queue, in packets
pf_queue_qlength - queued packets, per queue
=head1 AUTHOR
Ze Loff
=head1 LICENSE
BSD
=cut
if test "$1" = "autoconf" ; then
if test ! -f $conf; then
echo no "($conf does not exist)"
exit 1
fi
if [ "$(uname -s)" = "OpenBSD" ]; then
echo yes
exit 0
fi
fi
if test "$1" = "suggest" ; then
echo "bytes"
echo "packets"
echo "qlength"
exit 0
fi
# get type
id=`echo $0 | sed -e 's/^.*pf_queue_//'`
if test "$id"x = ""x; then
id="bytes"
fi
if test "$1" = "config" ; then
case $id in
bytes)
echo "graph_title pf queue traffic in bytes"
echo "graph_args --base 1024 -l 0"
echo "graph_vlabel bytes passed (+) and dropped (-) per
${graph_period}"
echo "graph_category pf"
for q in `pfctl -vs queue | awk '/^queue/ { print $2 }'`; do
echo "dropped_$q.label $q\ndropped_$q.type
COUNTER\ndropped_$q.graph no\n"
echo "$q.label $q\n$q.type COUNTER\n$q.negative
dropped_$q\n"
done
for pq in `pfctl -vs queue | awk '/^queue/ { for (i = 1; i <=
NF; i++) { if ($i == "parent") print $(i+1) }}' | uniq`; do
echo "$pq.graph no\ndropped_$pq.graph no\n"
done
echo "graph_info Traffic passed and dropped per queue, in bytes"
;;
packets)
echo "graph_title pf queue traffic in packets"
echo "graph_args --base 1000 -l 0"
echo "graph_vlabel packets passed (+) and dropped (-) per
${graph_period}"
echo "graph_category pf"
for q in `pfctl -vs queue | awk '/^queue/ { print $2 }'`; do
echo "dropped_$q.label $q\ndropped_$q.type
COUNTER\ndropped_$q.graph no\n"
echo "$q.label $q\n$q.type COUNTER\n$q.negative
dropped_$q\n"
done
for pq in `pfctl -vs queue | awk '/^queue/ { for (i = 1; i <=
NF; i++) { if ($i == "parent") print $(i+1) }}' | uniq`; do
echo "$pq.graph no\ndropped_$pq.graph no\n"
done
echo "graph_info Traffic passed and dropped in each queue, in
packets"
;;
qlength)
echo "graph_title pf queue size"
echo "graph_args --base 1000 -l 0"
echo "graph_vlabel packets in queue"
echo "graph_category pf"
for q in `pfctl -vs queue | awk '/^queue/ { print $2 }'`; do
echo "$q.label $q\n$q.type GAUGE"
done
for pq in `pfctl -vs queue | awk '/^queue/ { for (i = 1; i <=
NF; i++) { if ($i == "parent") print $(i+1) }}' | uniq`; do
echo "$pq.graph no\ndropped_$pq.graph no\n"
done
echo "graph_info Packets waiting in each queue"
;;
esac
exit 0
fi
case $id in
bytes)
pfctl -vs queue | awk '/^queue/{ q=$2 } /pkts/&&(NR>2){ print
q".value "$5"\ndropped_"q".value "$10 }'
;;
packets)
pfctl -vs queue | awk '/^queue/{ q=$2 } /pkts/&&(NR>2){ print
q".value "$3"\ndropped_"q".value "$8 }'
;;
qlength)
pfctl -vs queue | awk '/^queue/{ q=$2 } /qlength/&&(NR>2){
sub("/", "", $3); print q".value "$3 }'
;;
esac