/usr/share/munin/plugins/bind9 is in munin-plugins-core 2.0.25-1+deb8u3.
This file is owned by root:root, with mode 0o755.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 | #!/usr/bin/perl -w
# -*- perl -*-
=head1 NAME
bind9 - Plugin to monitor usage of bind 9 servers
=head1 CONFIGURATION
This plugin is configurable environment variables. The following
shows the default settings:
[bind9]
env.logfile /var/log/bind9/query.log
You must also configure query logging in your named.conf. Use a stanza
such as this:
logging {
channel query {
file "query.log" versions 2 size 1m;
print-time yes;
severity info;
};
category queries { query; };
};
=head1 SEE ALSO
=over
=item * L<http://blog.larsstrand.org/2008/02/how-to-monitor-bind-with-munin.html>
=item * BIND Administrator Reference Manual
=back
=head1 AUTHOR
Nicolai Langfeldt
=head1 LICENSE
GPLv2
=head1 MAGIC MARKERS
#%# family=manual
=cut
use strict;
my $QUERYLOG = $ENV{logfile} || '/var/log/bind9/query.log';
my $STATEFILE= "$ENV{MUNIN_PLUGSTATE}/bind9.state";
my $OTHER=0;
my %IN;
sub get_state {
if (! -f $STATEFILE) {
open(Q, ">", $STATEFILE);
close(Q);
}
open(Q,"< $STATEFILE") or die ("Cannot open state file");
while (<Q>) {
chomp;
my ($q,$n) = split(/\s+/,$_,2);
$IN{$q}=$n unless defined($IN{$q});
}
close(Q);
}
sub do_stats {
my $k;
open(Q,"< $QUERYLOG") or die "$!";
while (<Q>) {
chomp;
if (/: (view \S+\: |)query\: \S+ (\w+) (\w+)/) {
if ($2 eq 'IN' and $3 !~ /^TYPE/) {
$IN{$3}++;
} else {
$OTHER++;
}
}
}
close(Q);
get_state;
open(Q,"> $STATEFILE") or die;
foreach $k (keys %IN) {
print "query_$k.value ",$IN{$k},"\n";
print Q "$k ",$IN{$k},"\n";
}
close(Q);
print "query_other.value ",$OTHER,"\n";
}
sub do_config {
my $k;
print "graph_title DNS Queries by type
graph_category BIND
graph_vlabel Queries / \${graph_period}
query_other.label Other
query_other.type DERIVE
query_other.min 0
query_other.draw AREA
";
get_state;
foreach $k (keys %IN) {
print "query_$k.label $k
query_$k.type DERIVE
query_$k.min 0
query_$k.draw STACK
";
}
};
if (defined($ARGV[0]) and ($ARGV[0] eq 'config')) {
do_config;
exit(0);
}
do_stats;
# vim:syntax=perl
|