root / plugins / network / dns / bind_ @ 0a1524f2
Historique | Voir | Annoter | Télécharger (3,01 ko)
| 1 |
#!/usr/bin/perl |
|---|---|
| 2 |
# |
| 3 |
# Copyright Jean-Samuel Reynaud <js.reynaud@free.fr> |
| 4 |
# Licenced under GPL v2 |
| 5 |
# |
| 6 |
# We use this script to produce graph with munin for dns requests |
| 7 |
# This script must have his name start with bind_ |
| 8 |
# bind_ : Global bind statistic |
| 9 |
# bind_test.com : Bind statistic for test.com zone |
| 10 |
# |
| 11 |
# "env.bind_stat_file" is the path to the bind statistic file |
| 12 |
# (/var/cache/bind/named.stats by default). |
| 13 |
# |
| 14 |
# "env.bind_rndc" is the path to the rndc tool |
| 15 |
# (/usr/sbin/rndc by default). |
| 16 |
# |
| 17 |
# Thanks for Benjamin Pineau for perl cleaning and correction in non root |
| 18 |
# running |
| 19 |
# Thanks to Immanuel Klinkenberg for adding config parameter by using munin config |
| 20 |
# |
| 21 |
# Magic markers |
| 22 |
#%# family=auto |
| 23 |
#%# capabilities=autoconf |
| 24 |
|
| 25 |
use strict; |
| 26 |
use warnings; |
| 27 |
|
| 28 |
# change those to reflect your bind configuration |
| 29 |
# stat file |
| 30 |
my $stat_file = # DB directory |
| 31 |
defined $ENV{'bind_stat_file'} ? $ENV{'bind_stat_file'} : '/var/cache/bind/named.stats';
|
| 32 |
# rndc path |
| 33 |
my $rndc = # rndc path |
| 34 |
defined $ENV{'bind_rndc'} ? $ENV{'bind_rndc'} : '/usr/sbin/rndc';
|
| 35 |
|
| 36 |
my $lst = { "success" => 1,
|
| 37 |
"referral" => 1, |
| 38 |
"nxrrset" => 1, |
| 39 |
"nxdomain" => 1, |
| 40 |
"recursion" => 1, |
| 41 |
"failure" => 1}; |
| 42 |
|
| 43 |
my $domain = $0; |
| 44 |
$domain =~ s/^.*bind_([\w\d\._\-]*)$/$1/; |
| 45 |
|
| 46 |
|
| 47 |
# Parse the statistic file |
| 48 |
sub parseFile {
|
| 49 |
my $dom = shift @_; |
| 50 |
open(IN,"<$stat_file") or die "Can't open $stat_file : $!"; |
| 51 |
|
| 52 |
while (<IN>) {
|
| 53 |
chomp; |
| 54 |
my ($type,$count,$zone) = split(/ /,$_); |
| 55 |
$zone = defined($zone) ? $zone : ""; |
| 56 |
if ($zone eq $dom) {
|
| 57 |
if (defined $lst->{$type}) {
|
| 58 |
# only keep the latest occurence for each value |
| 59 |
$lst->{$type} = $count;
|
| 60 |
} |
| 61 |
|
| 62 |
} |
| 63 |
} |
| 64 |
|
| 65 |
close(IN); |
| 66 |
printf "%s.value %u\n", $_, $lst->{$_} foreach (keys %$lst);
|
| 67 |
} |
| 68 |
|
| 69 |
|
| 70 |
|
| 71 |
# Config mode |
| 72 |
if ( defined($ARGV[0]) && $ARGV[0] eq "config" ) {
|
| 73 |
printf "graph_title Dns requests %s\n",($domain eq "" ? " all domains":$domain); |
| 74 |
printf "graph_vlabel requests/s\n"; |
| 75 |
printf "graph_category network\n"; |
| 76 |
printf "graph_info This graph display dns requests for %s\n",($domain eq "" ? " all domains":$domain); |
| 77 |
printf "success.label Success\n"; |
| 78 |
printf "success.type COUNTER\n"; |
| 79 |
|
| 80 |
printf "referral.label Referral\n"; |
| 81 |
printf "referral.type COUNTER\n"; |
| 82 |
|
| 83 |
printf "nxrrset.label Nx RR set\n"; |
| 84 |
printf "nxrrset.type COUNTER\n"; |
| 85 |
|
| 86 |
printf "nxdomain.label NX domain\n"; |
| 87 |
printf "nxdomain.type COUNTER\n"; |
| 88 |
|
| 89 |
printf "recursion.label Recursion\n"; |
| 90 |
printf "recursion.type COUNTER\n"; |
| 91 |
|
| 92 |
printf "failure.label Failure\n"; |
| 93 |
printf "failure.type COUNTER\n"; |
| 94 |
|
| 95 |
exit 0; |
| 96 |
} |
| 97 |
|
| 98 |
if ( defined($ARGV[0]) && $ARGV[0] eq "autoconf" ) {
|
| 99 |
if (! -f $stat_file) {
|
| 100 |
printf "Unable to file bind stat file on %s",$stat_file; |
| 101 |
exit 1; |
| 102 |
} |
| 103 |
if (! -f $rndc) {
|
| 104 |
printf "Unable to file rndc tool (configured : %s)",$rndc; |
| 105 |
exit 1; |
| 106 |
} |
| 107 |
exit 0; |
| 108 |
} |
| 109 |
|
| 110 |
# Remove old stat file |
| 111 |
unlink ($stat_file); |
| 112 |
# Ask to bind to build new one |
| 113 |
`$rndc stats`; |
| 114 |
# Parse the stat file and return result |
| 115 |
parseFile($domain); |
