Data collection tools for the BIND9 DNS server's statistics server
Programs to obtain data from the statistics channel of a BIND9 DNS server, and send it to some graphing and data visualization tools. The original program, bind9stats.py, was written to be a plugin for Munin, and has recently been renamed to bind9stats-munin.py. There is also a newer version, called bind9stats-graphite.py, that works with Graphite and Grafana.
version 0.31
A munin plugin to obtain data from a BIND9 statistics server, written in Python. Tested with BIND 9.10, 9.11, and 9.12's statistics server exporting version 3 of the statistics. In earlier versions of BIND 9.9, the v3 schema of statistics can be specified using the 'newstats' configuration directive. The newstats option was introduced in BIND 9.9.3.
If you are using older versions of BIND 9.9 that only support version 2 of the XML statistics, you'll need to use the 0.1x version of this program, which can be obtained from:
https://github.com/shuque/bind9stats/archive/v0.12.tar.gz
Software needed to use this:
Some notes:
Instructions for using this:
Have a DNS server running BIND9, with the statistics server enabled.
On my BIND servers, I usually have something like the following in the configuration file:
statistics-channels {
inet 127.0.0.1 port 8053 allow { 127.0.0.1; };
};
Have a munin-node running on it, install bind9stats.py in its plugins directory and restart the node. You can also run the plugin on another machine, if the statistics server allows queries remotely. Set the HOST and PORT environment variables appropriately in that case before invoking bind9stats.py.
Sample munin graphs produced by this plugin:
This version of the program collects BIND9 statistics and sends them to a Graphite server, another monitoring tool and time series data store. This runs as a long lived daemon, collects statistics at regular intervals (default is every minute), and then sends them to a Graphite server.
Usage: bind9stats-graphite.py [Options]
Options:
-h Print this usage message
-d Generate some diagnostic messages
-f Stay in foreground (default: become daemon)
-m metrics Comma separated metric types
(default: auth,res,bind,zone,memory)
(supported: auth,res,bind,zone,memory,socket)
-n name Specify server name (default: 1st component of hostname)
-i interval Polling interval in seconds (default: 60 sec)
-s server Graphite server IP address (default: 127.0.0.1)
-p port Graphite server port (default: 2003)
-r Really send data to Graphite (default: don't)
-o options Other comma separated options (default: none)
(supported: derive)
Installation:
Graphite is commonly the default backend for Grafana, a popular data visualization tool and dashboard. The included sample Grafana dashboard configuration file produces output like the following:
Author: Shumon Huque
Copyright (c) 2013-2015 - Shumon Huque. All rights reserved.
This program is free software; you can redistribute it and/or modify
it under the same terms as Python itself.