從 BIND dump 出來的統計資訊如下 (不過最新版本的 BIND 它又長的完全不一樣了)
+++ Statistics Dump +++ (1364372549) success 272949870 referral 26846823 nxrrset 48759965 nxdomain 32763784 recursion 540826 failure 6113 --- Statistics Dump --- (1364372549)
這個值是累加的
所以排程是五分鐘取一次,然後扣掉前五鐘前的值,也就等於是這五分鐘內所產生的 query 量 ,然後再除以 5 等於是平均每分鐘的量
Queryies = (success + referral + nxrrset + nxdomain + recursion + failure ) / 5
Replied = (Queries – failure ) / 5
MRTG.cfg (參考來源 : http://www.megalinux.net/dns-monitoring-using-mrtg/)
(我稍作修改)
WorkDir: /path/dns/query Target[ssorc]: `/path/check_dns_stats.pl` Options[ssorc]: gauge,growright,nopercent,integer,unknaszero Title[ssorc]: DNS Server RouterUptime[ssorc]: public@localhost MaxBytes[ssorc]: 32000 AbsMax[ssorc]: 64000 WithPeak[ssorc]: wmy Colours[ssorc]: YELLOW #F9C000,RED #F90000,LIGHT YELLOW #FFFFBB,LIGTH RED #FF8080 ShortLegend[ssorc]:queries/m YLegend[ssorc]: Qs per Minute Legend1[ssorc]: Queries received over 1 minute Legend2[ssorc]: Replied Queries received over 1 minute Legend3[ssorc]: Maximal Queries over 5 minutes Legend4[ssorc]: Maximal Replied Queries over 5 minutes LegendI[ssorc]: Queries: LegendO[ssorc]: Replied: PageTop[ssorc]: <H1>DNS Info</H1><TABLE><TR><TD>System:</TD> <TD>ssorc</TD></TR><TD>Description:</TD><TD>DNS Monitor</TD></TR><TR><TD>Details:</TD> <TD>Query Monitor</TD></TABLE>
check_dns_stats.pl (參考來源 : http://www.megalinux.net/dnsstats.pl)
(我稍作修改)
#!/usr/bin/perl use strict; # Set files to use, change these to suit your needs my $oldstatfile = "/var/tmp/dns-old.txt"; my $newstatfile = "/var/named/data/named_stats.txt"; # Obtain old DNS stats from stored file open(OLDF, "$oldstatfile"); my @raw_data = <OLDF>; close(OLDF); my $oldquery = @raw_data[0]; my $oldreply = @raw_data[1]; chomp($oldquery); chomp($oldreply); # Check if there is data, if not, initialize if (! $oldquery) { $oldquery = 0; } if (! $oldreply) { $oldreply = 0; } # Get new data from file, first clean the stats file and dump new system("cat /dev/null > $newstatfile"); system("/usr/sbin/rndc stats"); open(NEWF, "$newstatfile"); my @dns_data = <NEWF>; close(NEWF); my $newquery = 0; my $newreply = 0; my $newfailure = 0; foreach my $line (@dns_data) { if ($line =~ /^\w+ ([0-9]*)/) { $newquery = $newquery + $1; } if ($line =~ /^failure ([0-9]*)/) { $newfailure = $1; } } $newreply = $newquery - $newfailure; # Calculate difference between old and new. Divide by 5 to get per minute my $diffquery = ($newquery - $oldquery) / 5; my $diffreply = ($newreply - $oldreply) / 5; # Store new data open(OLDF, ">$oldstatfile"); print(OLDF "$newquery\n$newreply"); close(OLDF); # Print difference print("$diffquery \n$diffreply \n");
留言