DS:answers-slow:COUNTER:600:0:100000 \
DS:qa-latency:GAUGE:600:0:10000000 \
DS:user-msec:COUNTER:600:0:2000 \
+DS:client-parse-errors:COUNTER:600:0:1000000 \
+DS:server-parse-errors:COUNTER:600:0:1000000 \
+DS:unauthorized-udp:COUNTER:600:0:1000000 \
+DS:unauthorized-tcp:COUNTER:600:0:1000000 \
DS:sys-msec:COUNTER:600:0:2000 \
RRA:AVERAGE:0.5:1:9600 \
RRA:AVERAGE:0.5:4:9600 \
<html>
<body>
<!--
--rw-r--r-- 1 ahu ahu 12918 2006-03-18 23:51 /var/www/caches-6h.png
--rw-r--r-- 1 ahu ahu 13174 2006-03-18 23:51 /var/www/load-6h.png
--rw-r--r-- 1 ahu ahu 12728 2006-03-18 23:51 /var/www/qoutq-6h.png
--rw-r--r-- 1 ahu ahu 12939 2006-03-18 23:51 /var/www/questions-6h.png
--rw-r--r-- 1 ahu ahu 12913 2006-03-18 23:51 /var/www/timeouts-6h.png
+-rw-r--r-- 1 ahu ahu 12918 2006-03-18 23:51 /var/www/caches-day.png
+-rw-r--r-- 1 ahu ahu 13174 2006-03-18 23:51 /var/www/load-day.png
+-rw-r--r-- 1 ahu ahu 12728 2006-03-18 23:51 /var/www/qoutq-day.png
+-rw-r--r-- 1 ahu ahu 12939 2006-03-18 23:51 /var/www/questions-day.png
+-rw-r--r-- 1 ahu ahu 12913 2006-03-18 23:51 /var/www/timeouts-day.png
-->
<h1>PowerDNS Recursor Performance Graphs</H1>
<table border=1>
<tr><td>Out-queries</td><td>Recursor initiated questions to other
nameservers</td></tr>
<tr><td>Throttled</td><td>If a certain nameserver is not responding, or if
-it is, but returning unuseful answers, the query can
-get prevented from happening and causing delay. This is called a 'throttled
+it is, but returning unuseful answers, it is not useful to keep repeating
+identical queries. If PowerDNS prevents a duplicate query, and therefore
+prevents needless server load and delays, this is called a 'throttled
out-query'</td></tr>
<tr><td>Outgoing timeout</td><td>An out-query that did not generate an
answer within 1 or 2 seconds</td></tr>
carrying the answer did not respond, or were throttled</td></tr>
<tr><td>Cache hits/misses</td><td>A query is judged a cache-hit if it could
be answered without generating any out-queries</td></tr>
+<tr><td>User/System CPU usage</td><td>Actual amount of CPU used exclusively
+by the recursor, either in user or in system (kernel) mode</td></td>
</table>
-<img src="latencies-6h.png">
+<img src="latencies-day.png">
<br>
-<img src="qa-latency-6h.png">
+<img src="qa-latency-day.png">
<br>
-<img src="qoutq-6h.png">
+<img src="qoutq-day.png">
<br>
-<img src="timeouts-6h.png">
+<img src="timeouts-day.png">
<br>
-<img src="questions-6h.png">
+<img src="questions-day.png">
<br>
-<img src="tcp-questions-6h.png">
+<img src="tcp-questions-day.png">
<br>
-<img src="caches-6h.png">
+<img src="caches-day.png">
<br>
-<img src="caches2-6h.png">
+<img src="caches2-day.png">
<br>
-<img src="load-6h.png">
+<img src="load-day.png">
<br>
-<img src="hitrate-6h.png">
+<img src="hitrate-day.png">
+<br>
+<img src="packet-errors-day.png">
</body>
</html>
function makeGraphs()
{
rrdtool graph --start -$1 $WWWPREFIX/questions-$2.png -w $WSIZE -h $HSIZE -l 0\
- -t "Question and answer counts per second" \
+ -t "Questions and answers per second" \
-v "packets" \
DEF:questions=pdns_recursor.rrd:questions:AVERAGE \
DEF:nxdomainanswers=pdns_recursor.rrd:nxdomain-answers:AVERAGE \
STACK:servfailanswers#ff0000:"servfail answers/s"
rrdtool graph --start -$1 $WWWPREFIX/tcp-questions-$2.png -w $WSIZE -h $HSIZE -l 0\
- -t "TCP question and answer counts per second" \
+ -t "TCP questions and answers per second, unauthorized packets/s" \
-v "packets" \
DEF:tcpquestions=pdns_recursor.rrd:tcp-questions:AVERAGE \
- LINE2:tcpquestions#0000ff:"questions/s"\
+ DEF:unauthudp=pdns_recursor.rrd:unauthorized-udp:AVERAGE \
+ DEF:unauthtcp=pdns_recursor.rrd:unauthorized-tcp:AVERAGE \
+ LINE2:tcpquestions#0000ff:"tcp questions/s" \
+ LINE2:unauthudp#ff0000:"udp unauth/s" \
+ LINE2:unauthtcp#00ff00:"tcp unauth/s"
+
+ rrdtool graph --start -$1 $WWWPREFIX/packet-errors-$2.png -w $WSIZE -h $HSIZE -l 0\
+ -t "Parsing errors per second" \
+ -v "packets" \
+ DEF:clientparseerrors=pdns_recursor.rrd:client-parse-errors:AVERAGE \
+ DEF:serverparseerrors=pdns_recursor.rrd:server-parse-errors:AVERAGE \
+ LINE2:clientparseerrors#0000ff:"bad packets from clients" \
+ LINE2:serverparseerrors#00ff00:"bad packets from servers"
rrdtool graph --start -$1 $WWWPREFIX/latencies-$2.png -w $WSIZE -h $HSIZE -l 0\
-t "Questions answered within latency" \
STACK:answersslow#ff0000:">1000 ms"
rrdtool graph --start -$1 $WWWPREFIX/qoutq-$2.png -w $WSIZE -h $HSIZE -l 0 \
- -t "Questions/outqueries counts per second" \
+ -t "Questions/outqueries per second" \
-v "packets" \
DEF:questions=pdns_recursor.rrd:questions:AVERAGE \
DEF:alloutqueries=pdns_recursor.rrd:all-outqueries:AVERAGE \
rrdtool graph --start -$1 $WWWPREFIX/timeouts-$2.png -w $WSIZE -h $HSIZE -l 0\
- -t "Outqueries/timeouts counts per second" \
+ -t "Outqueries/timeouts per second" \
-v "events" \
DEF:alloutqueries=pdns_recursor.rrd:all-outqueries:AVERAGE \
DEF:outgoingtimeouts=pdns_recursor.rrd:outgoing-timeouts:AVERAGE \
rrdtool graph --start -$1 $WWWPREFIX/hitrate-$2.png -w $WSIZE -h $HSIZE -l 0\
-v "percentage" \
- -t "cache hits" \
+ -t "cache hits, cpu load" \
DEF:cachehits=pdns_recursor.rrd:cache-hits:AVERAGE \
DEF:cachemisses=pdns_recursor.rrd:cache-misses:AVERAGE \
DEF:usermsec=pdns_recursor.rrd:user-msec:AVERAGE \
servfail-answers tcp-outqueries\
outgoing-timeouts nsspeeds-entries negcache-entries all-outqueries throttled-out\
cache-hits cache-misses answers0-1 answers1-10 answers10-100 answers100-1000 answers-slow\
- qa-latency throttle-entries sys-msec user-msec"
+ qa-latency throttle-entries sys-msec user-msec unauthorized-udp unauthorized-tcp client-parse-errors\
+ server-parse-errors"
UVARIABLES=$(echo $VARIABLES | tr '[a-z]' '[A-Z]' | tr - _ )