#!/usr/bin/perl # # $Id$ # # named.pl # TiChou # my $version = "1.0"; my $cmdname = (split('/', $0))[-1]; my $rrdlib = "/var/lib/rrd"; my $log = "/var/log/named"; use Getopt::Long; use RRDs; use POSIX; sub usage($) { my $usage = "Usage: $cmdname [options] Options: -f, --file=FILE specify RRD file (default $rrdlib/named.rrd) -h, --help display this help and exit -v, --version display version Report bugs to .\n"; if (shift) { print STDOUT $usage; exit 0; } else { print STDERR $usage; exit 1; } } sub version { print "$cmdname $version\n"; exit 0; } my $rrdfile = "$rrdlib/named.rrd"; Getopt::Long::Configure ("bundling"); GetOptions("f|file=s" => \$rrdfile, "h|help" => \&usage, "v|version" => \&version) or &usage(0); if (not -f $rrdfile) { RRDs::create $rrdfile, qw(DS:A:COUNTER:600:0:U DS:AAAA:COUNTER:600:0:U DS:A6:COUNTER:600:0:U DS:CNAME:COUNTER:600:0:U DS:DNAME:COUNTER:600:0:U DS:MX:COUNTER:600:0:U DS:NS:COUNTER:600:0:U DS:PTR:COUNTER:600:0:U DS:SOA:COUNTER:600:0:U DS:ANY:COUNTER:600:0:U DS:OTHER:COUNTER:600:0:U RRA:AVERAGE:0.5:1:288 RRA:AVERAGE:0.5:6:336 RRA:AVERAGE:0.5:24:360 RRA:AVERAGE:0.5:288:365 RRA:MIN:0.5:1:288 RRA:MIN:0.5:6:336 RRA:MIN:0.5:24:360 RRA:MIN:0.5:288:365 RRA:MAX:0.5:1:288 RRA:MAX:0.5:6:336 RRA:MAX:0.5:24:360 RRA:MAX:0.5:288:365); my $error = RRDs::error; die "$0: $error\n" if $error; } my $date = strftime "%b %d %R", localtime(time - 300); $date =~ /(.*)(\d)$/; my $regexp = $1.($2 < 5 ? "[0-4]" : "[5-9]"); our ($A,$AAAA,$A6,$CNAME,$DNAME,$MX,$NS,$PTR,$SOA,$ANY) = (0) x 10; my $RR = 0; open(DNS, "$log") or die "$0: can't open $log: $!\n"; while () { /^$regexp:\d+\.\d+ queries: info: client \S+: query: \S+ IN (.+)$/ && ++$$1 && ++$RR; } close (DNS); my $OTHER = $RR - ($A + $AAAA + $A6 + $CNAME + $DNAME + $MX + $NS + $PTR + $SOA + $ANY); RRDs::update $rrdfile, "N:$A:$AAAA:$A6:$CNAME:$DNAME:$MX:$NS:$PTR:$SOA:$ANY:$OTHER"; my $error = RRDs::error; die "$0: $error\n" if $error;