Categories
Linux Software www

Bind mrtg stats

Because I couldn’t find any that worked.

(Dark blue: incoming queries, light blue: outgoing/recursive lookups)

mrtg.cfg sample:

# Bind
Title[bind]: Bind Queries
Target[bind]: `/etc/mrtg/bind-stats.sh`
PageTop[bind]: <H1> Bind queries per minute on vm1 </H1>
Options[bind]: growright,pngdate,nobanner,gauge,nopercent,noinfo
MaxBytes[bind]: 50000
Ylegend[bind]: Queries/min
ShortLegend[bind]:  queries/min
LegendO[bind]: Incoming Bind queries per minute
LegendI[bind]: Outcoing Bind queries per minute
Legend2[bind]: Incoming Bind queries per minute
Legend1[bind]: Outcoing Bind queries per minute

bind-stats.sh:

#!/bin/bash
# Bind MRTG stats
# by Yeri Tiete (Tuinslak) - 10/02/2011
# https://yeri.be
#
# mrtg.cfg sample:
################################################################################
#	#
#	# Bind
#	#
#	Title[bind]: Bind Queries
#	Target[bind]: `/etc/mrtg/bind-stats.sh`
#	PageTop[bind]: <H1> Bind queries per minute on vm1 </H1>
#	Options[bind]: growright,pngdate,nobanner,gauge,nopercent,noinfo
#	MaxBytes[bind]: 50000
#	Ylegend[bind]: Queries/min
#	ShortLegend[bind]:  queries/min
#	LegendO[bind]: Incoming Bind queries per minute
#	LegendI[bind]: Outcoing Bind queries per minute
#	Legend2[bind]: Incoming Bind queries per minute
#	Legend1[bind]: Outcoing Bind queries per minute
################################################################################

# file path of named.stats
FILE=/var/log/named.stats
TMPFILE=/tmp/__dnsstats.txt

# how often does mrtg run? for me it's every 10 mins
TIME=10

# make file empty
echo /dev/null > /var/log/named.stats

# generate file
/usr/sbin/rndc stats

# save number of queries
INNOW=`egrep "[^I]QUERY" $FILE | awk '{print $1 }'`
OUTNOW=`grep Outgoing $FILE -A 9 | sed '1,2d' | awk '{ SUM += $1} END { print SUM }'`

# check if tmp file exists and insert data in it if it doesnt
# this prevents a peak
[ ! -e $TMPFILE ] && echo $INNOW > $TMPFILE && echo $OUTNOW >> $TMPFILE

# get old data
INOLD=`cat $TMPFILE | sed -n 1p`
OUTOLD=`cat $TMPFILE | sed -n 2p`

# overwrite old
echo $INNOW > $TMPFILE
echo $OUTNOW >> $TMPFILE

# calculate (to get difference)
INDIFF=$[ $INNOW-$INOLD ]
OUTDIFF=$[ $OUTNOW-$OUTOLD ]

# as mrtg runs */10 > divide by 10 to get per minute
INPERMIN=$[ $INDIFF/$TIME ]
OUTPERMIN=$[ $OUTDIFF/$TIME ]

# print !
echo $OUTPERMIN
echo $INPERMIN
echo
echo

Or download the file riiiiiight here.

Be sure the named.stats file gives this kind of output:

# grep Outgoing /var/log/named.stats -A 9
++ Outgoing Queries ++
[View: default]
               64316 A
                   2 NS
                  22 SOA
                6945 PTR
                 892 MX
                1104 TXT
                3117 AAAA
                  22 SRV

… for the outgoing queries, and …

# grep QUERY /var/log/named.stats | awk '{print $1 }'
163143

for the incoming queries.

Don’t forget to

chmod +x bind-stats.sh

Live sample: vm1.rootspirit.com/mrtg/bind.html

6 replies on “Bind mrtg stats”

Hi.

Great script, thank you for that!

I tried to get it running on my machines and this brings the following error output:

— snip —
./bind-stats.sh: Zeile 54: 1
2
2
2
3
4
4
4
4
5
5-1 2 2 2 3 4 4 4 4 5 : Syntaxfehler im Ausdruck. (Fehlerverursachendes Zeichen ist \”2
2
2
3
4
4
4
4
5
5-1 2 2 2 3 4 4 4 4 5 \”).
./bind-stats.sh: Zeile 58: /10 : Syntax Fehler: Operator erwartet. (Fehlerverursachendes Zeichen ist \”/10 \”).
2

— snap —

Any ideas?
The underlying system is a Ubuntu Server 12.04 64bit with the bind out of the official repo from Ubuntu…

Hey,

Not quite sure what those error messages mean in German… But be sure that the named stats file exists, and has the right output.

As it seems to be giving errors on these lines:
# calculate (to get difference)
INDIFF=$[ $INNOW-$INOLD ]
OUTDIFF=$[ $OUTNOW-$OUTOLD ]

# as mrtg runs */10 > divide by 10 to get per minute
INPERMIN=$[ $INDIFF/$TIME ]
OUTPERMIN=$[ $OUTDIFF/$TIME ]

Hi.

Thanks for the quick reply. The format is the problem. But how do you create the stats file? As far as I interprete the manpage for rndc.conf, the format is not configurable. Your above grep statement give:

— snip —
++ Outgoing Queries ++
[View: default]
[View: _bind]
++ Name Server Statistics ++
260 IPv4 requests received
13 IPv6 requests received
84 requests with EDNS(0) received
39 requests with TSIG received
1 recursive queries rejected
273 responses sent
— snap —

Thanks and greets,
Holger

This is my part of the stats file:

++ Name Server Statistics ++
29108842 IPv4 requests received
27104645 requests with EDNS(0) received
5 TCP requests received
1 recursive queries rejected
29107906 responses sent
1103 truncated responses sent
27103980 responses with EDNS(0) sent
28415110 queries resulted in successful answer
7510 queries resulted in authoritative answer
29065057 queries resulted in non authoritative answer
3471 queries resulted in referral answer
175743 queries resulted in nxrrset
35305 queries resulted in SERVFAIL
478243 queries resulted in NXDOMAIN
484688 queries caused recursion
843 duplicate queries received
93 queries dropped
1 other query failures
++ Zone Maintenance Statistics ++

You can see it live here, but due to DNS spam it has ridiculous/useless graphs: http://vm1.rootspirit.com/mrtg/bind.html

The file is generated with: /usr/sbin/rndc stats

And in the bind config you should add these lines:
zone-statistics yes;
statistics-file “/var/log/named.stats”;

And restart bind.

I’ve seen a bug in the bind-stats.sh file though:

echo /dev/null > /var/log/named.stats
should be:
cat /dev/null > /var/log/named.stats

If it’s any help, I’ve started using Munin instead of mrtg for logging.

Leave a Reply...

%d bloggers like this: