湖北省網中心的DNS查詢監控,帶教程
最近一直在找DNS相關統計的相關資料,,找到一個不錯的,大家看看,互相學習下,我對LINUX不熟悉,所以很多看不懂,,以下我貼出來,看大家能否都做出來,,然後麻煩把你操作的具體步驟發出來,給大家分享一下,讓我們這些菜鳥也學習學習,,先謝謝了。
來源:http://www.wp1998.cn/read.php?216
演示:http://www.heinet.cn/dnsMonitor/
Heinet DNS Query流量監控的安裝說明
原理:
在dns伺服器每間隔10分鐘執行一次cron腳本logStat.sh,提取dns-query日誌中前10分鐘的信息,並針對各種不同對象(A、MX等)獲取分析數據,然後將數據存儲到rrdtool數據文件中,最後將rrdtool數據文件遠程cp到web伺服器目錄。
在web伺服器上有一個php腳本,讀取rrdtool數據文件,生成數據圖和列表。
--------------------------------------------------------------------
文件:
dns server:
/data/dnsStat/ 執行目錄,也存放rrdtool數據文件
/data/dnsStat/logStat.sh cron日誌分析腳本
web server:
/data/webapp/dnsMonitor/ web目錄,dnsserver將rrdtool文件scp到此
/data/webapp/dnsMonitor/index.php 查看監控頁面
---------------------------------------------------------------------
環境:
dns server:
RHAS4
rrdtool 1.0.49
需要設定免認證scp到webserver
bind9的查詢日誌配置於/usr/local/bind9/log/bind9_query.log
webserver:
RHAS4
rrdtool 1.0.49
需要設定dnsserver能免認證scp到本地
apache+php
----------------------------------------------------------------------
腳本:
/data/dnsStat/logStat.sh
引用
#!/bin/sh
# 路徑配置,bind日誌目錄和腳本目錄
logPath="/usr/local/bind9/log"
statPath="/data/dnsStat"
# 開始cron的計時
echo `date "+%Y-%m-%d %H:%M:%S"`" cron start:" >> /data/dnsStat/statlog
# 計算當前時間前10分鐘的小時分鐘,作為以後log判斷的效驗,如提取12:1作為判斷12:1x的條件
before10m=`date -d "-10 minute" +%H:%M | sed -n 's/.$//p'`
# 計算當前時間前10分鐘的年月日字串
before10m1=`date -d "-10 minute" +%Y%m%d`
# 計算當前時間前10分鐘的日期字串
dayStr=`date -d "-10 minute" +%d`
# 判斷日誌,得到前10分鐘內不同$9記錄(即query類型)的查詢數量
# 全部query
Query_count=`cat $logPath/bind9_query.log | awk '$1~/^'$dayStr'/ && $2~/^'$before10m'/ {print $2}' | wc -l`
Query_count=`echo $Query_count`
# 全部query的client ip排名前10 -> 寫入文件
cat $logPath/bind9_query.log | awk '$1~/^'$dayStr'/ && $2~/^'$before10m'/ {print $5}' | cut -d"#" -f1 | awk '{a[$1]+=1}END{for(i in a)print i,a}' | sort -k2 -n -r | sed -n '0,10p' > /data/dnsStat/queryClientIpTop10
# 全部query的域名對象排名前10 -> 寫入文件
cat $logPath/bind9_query.log | awk '$1~/^'$dayStr'/ && $2~/^'$before10m'/ {print $9}' | awk '{a[$1]+=1}END{for(i in a)print i,a}' | sort -k2 -n -r | sed -n '0,10p' > /data/dnsStat/queryObjectTop10
# A記錄 query
A_count=`cat $logPath/bind9_query.log | awk '$1~/^'$dayStr'/ && $2~/^'$before10m'/ && $11~/A/ {print $2}' | wc -l`
A_count=`echo $A_count`
# client ip排名前10 -> 寫入文件
cat $logPath/bind9_query.log | awk '$1~/^'$dayStr'/ && $2~/^'$before10m'/ && $11~/A/ {print $5}' | cut -d"#" -f1 | awk '{a[$1]+=1}END{for(i in a)print i,a}' | sort -k2 -n -r | sed -n '0,10p' > /data/dnsStat/aClientIpTop10
# 域名對象排名前10 -> 寫入文件
cat $logPath/bind9_query.log | awk '$1~/^'$dayStr'/ && $2~/^'$before10m'/ && $11~/A/ {print $9}' | awk '{a[$1]+=1}END{for(i in a)print i,a}' | sort -k2 -n -r | sed -n '0,10p' > /data/dnsStat/aObjectTop10
# PTR記錄 query
PTR_count=`cat $logPath/bind9_query.log | awk '$1~/^'$dayStr'/ && $2~/^'$before10m'/ && $11~/PTR/ {print $2}' |wc -l`PTR_count=`echo $PTR_count`
# client ip排名前10 -> 寫入文件
cat $logPath/bind9_query.log | awk '$1~/^'$dayStr'/ && $2~/^'$before10m'/ && $11~/PTR/ {print $5}' | cut -d"#" -f1 | awk '{a[$1]+=1}END{for(i in a)print i,a}' | sort -k2 -n -r | sed -n '0,10p' > /data/dnsStat/ptrClientIpTop10
# 域名對象排名前10 -> 寫入文件
cat $logPath/bind9_query.log | awk '$1~/^'$dayStr'/ && $2~/^'$before10m'/ && $11~/PTR/ {print $9}' | awk '{a[$1]+=1}END{for(i in a)print i,a}' | sort -k2 -n -r | sed -n '0,10p' > /data/dnsStat/ptrObjectTop10
# MX記錄 query
MX_count=`cat $logPath/bind9_query.log | awk '$1~/^'$dayStr'/ && $2~/^'$before10m'/ && $11~/MX/ {print $2}' | wc -l`MX_count=`echo $MX_count`
# client ip排名前10 -> 寫入文件
cat $logPath/bind9_query.log | awk '$1~/^'$dayStr'/ && $2~/^'$before10m'/ && $11~/MX/ {print $5}' | cut -d"#" -
f1 | awk '{a[$1]+=1}END{for(i in a)print i,a}' | sort -k2 -n -r | sed -n '0,10p' > /data/dnsStat/mxClientIpTop10
# 域名對象排名前10 -> 寫入文件
cat $logPath/bind9_query.log | awk '$1~/^'$dayStr'/ && $2~/^'$before10m'/ && $11~/MX/ {print $9}' | awk '{a[$1]
+=1}END{for(i in a)print i,a}' | sort -k2 -n -r | sed -n '0,10p' > /data/dnsStat/mxObjectTop10
# SOA記錄 query
SOA_count=`cat $logPath/bind9_query.log | awk '$1~/^'$dayStr'/ && $2~/^'$before10m'/ && $11~/SOA/ {print $2}' |
wc -l`SOA_count=`echo $SOA_count`
# client ip排名前10 -> 寫入文件
cat $logPath/bind9_query.log | awk '$1~/^'$dayStr'/ && $2~/^'$before10m'/ && $11~/SOA/ {print $5}' | cut -d"#" -f1 | awk '{a[$1]+=1}END{for(i in a)print i,a}' | sort -k2 -n -r | sed -n '0,10p' > /data/dnsStat/soaClientIpTop10
# 域名對象排名前10 -> 寫入文件
cat $logPath/bind9_query.log | awk '$1~/^'$dayStr'/ && $2~/^'$before10m'/ && $11~/SOA/ {print $9}' | awk '{a[$1
]+=1}END{for(i in a)print i,a}' | sort -k2 -n -r | sed -n '0,10p' > /data/dnsStat/soaObjectTop10
# SRV記錄 query
SRV_count=`cat $logPath/bind9_query.log | awk '$1~/^'$dayStr'/ && $2~/^'$before10m'/ && $11~/SRV/ {print $2}' |
wc -l`SRV_count=`echo $SRV_count`
# client ip排名前10 -> 寫入文件
cat $logPath/bind9_query.log | awk '$1~/^'$dayStr'/ && $2~/^'$before10m'/ && $11~/SRV/ {print $5}' | cut -d"#" -f1 | awk '{a[$1]+=1}END{for(i in a)print i,a}' | sort -k2 -n -r | sed -n '0,10p' > /data/dnsStat/srvClientIpTop10
# 域名對象排名前10 -> 寫入文件
cat $logPath/bind9_query.log | awk '$1~/^'$dayStr'/ && $2~/^'$before10m'/ && $11~/SRV/ {print $9}' | awk '{a[$1
]+=1}END{for(i in a)print i,a}' | sort -k2 -n -r | sed -n '0,10p' > /data/dnsStat/srvObjectTop10
echo -e $before10m1" "$before10m"0\t"$Query_count"\t"$A_count"\t"$PTR_count"\t"$MX_count"\t"$SOA_count"\t"$SRV_count >> /data/dnsStat/statlog
# 得到前一個10分鐘段第一秒的起始時間字串
before10m2=$before10m1" "$before10m"0:00"
# 生成相應的時間戳
rrdTime=`date -d "$before10m2" +%s`
# 將分析的query結果寫入到rrdtool文件中
dataSource=$rrdTime:$Query_count:$A_count:$MX_count:$PTR_count:$SOA_count:$SRV_count
/usr/local/rrdtool/bin/rrdtool update /data/dnsStat/bind_stat.rrd -t ALL:A:MX:PTR:SOA:SRV $dataSource
echo `date "+%Y-%m-%d %H:%M:%S"`" write rrdtool success:" >> /data/dnsStat/statlog
# 拷貝rrdtool文件到Heinet 伺服器上
#su -c "/usr/bin/scp /data/dnsStat/bind_stat.rrd scpuser@xxx.xx.xx.xx:/data/webapp/dnsMonitor/rrdSource/" scpuser
#su -c "/usr/bin/scp /data/dnsStat/*Top10 scpuser@xxx.xx.xx.xx:/data/webapp/dnsMonitor/" scpuser
# 結束時間標記
echo `date "+%Y-%m-%d %H:%M:%S"`" scp rrdfile to 64.93 success:" >> /data/dnsStat/statlog
/data/webapp/dnsMonitor/index.php
引用
<?php
/*
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: Script System Name: ::
:: (c) 2003-2005 Heinet developer (www.heinet.cn) ::
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: Author: wp1998 (wp1998@e21.edu.cn) ::
:: Version: Time: ::
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
*/
// Filename :
// introduce :
// Last Time :
// 獲取指定時間之前最近的尾數為0分鐘,如0、10、20、30、40、50
// 參數:時間戳
function getAfterTime1($timeInt){
do {
if(substr(date("i",$timeInt),-1)=="0" && date("s",$timeInt)=="00"){
return $timeInt;
break;
} else {
$timeInt--;
}
} while($timeInt>0);
}
$nowTime=getAfterTime1((time()-30*60)); // 見函數說明
$oneDayAfterTime=$nowTime-(3600*24); // 一天之前的時間
$oneWeekAfterTime=$nowTime-(3600*24*7); // 一個星期之前的時間
$oneMonthAfterTime=$nowTime-(3600*24*30); // 一個月之前的時間
$oneYearAfterTime=$nowTime-(3600*24*365); // 一年之前的時間
?>
<html>
<head>
<meta http-equiv="Content-Type" c>
<meta http-equiv=refresh content=300 url=index.php ;>
<title>Heinet DNS查詢實時監控</title>
<style>
body {font-size:10.4pt}
td {font-size:9pt}
</style>
</head>
<body text="#000000" leftmargin="10" topmargin="10">
<FONT SIZE="6" face="Arial">Heinet DNS Query 流量監控</FONT><BR>
<p style="line-height:14pt;font-size=10.4pt">
說明:<BR>
1。監控的流量值是採集每10分鐘內平均每秒(second)各類型查詢的query數量值而成;<BR>
2。下列圖片分別顯示最近的日、周、月、年內的曲線變化情況;<BR>
3。<FONT COLOR="CC6633">此色標識</FONT>A記錄查詢、<FONT COLOR="66FF99">此色標識</FONT>;PTR記錄查詢、<FONT
COLOR="0066CC"& gt;此色標識</FONT>MX記錄查詢、<FONT COLOR="FF0000">此色標識</FONT>SOA記錄查詢、<FONT COLOR="339933">此色標識</FONT>SRV記錄查詢。<BR>
最後更新:2005-5-25 wp1998@e21.edu.cn
</p>
<TABLE cellpadding=5 cellspacing=5>
<TR>
<TD valign=top>
<B>近一天內Query流量示意圖:</B><BR>
<img xsrc="./dnsQueryStat.php?nowTime=<?php echo $nowTime; ?>&lastTime=<?php echo $oneDayAfterTime; ?>" border=0 title="24小時各查詢量狀態,每10分鐘計算"><BR>
<BR>
<B>近一周內Query流量示意圖:</B><BR>
<img xsrc="./dnsQueryStat.php?nowTime=<?php echo $nowTime; ?>&lastTime=<?php echo $oneWeekAfterTime; ?>" border=0 title="24小時各查詢量狀態,每10分鐘計算"><BR>
<BR>
<B>近一月內Query流量示意圖:</B><BR>
<img xsrc="./dnsQueryStat.php?nowTime=<?php echo $nowTime; ?>&lastTime=<?php echo $oneMonthAfterTime; ?>" border=0 title="24小時各查詢量狀態,每10分鐘計算"><BR>
<BR>
<B>近一年內Query流量示意圖:</B><BR>
<img xsrc="./dnsQueryStat.php?nowTime=<?php echo $nowTime; ?>&lastTime=<?php echo $oneYearAfterTime; ?>" border=0 title="24小時各查詢量狀態,每10分鐘計算"><BR>
<BR>
</TD>
<TD valign=top align=right>
實時Top排名<BR>
<TABLE cellpadding=3 cellspacing=2 border=0>
<TR bgcolor=#DDDDDD>
<TD colspan=2><FONT SIZE="2"> A 類型TOP10 ClientIP</FONT></TD>
</TR>
<?php showFile("aClientIpTop10"); ?>
</TABLE>
<BR>
<TABLE cellpadding=3 cellspacing=2 border=0>
<TR bgcolor=#DDDDDD>
<TD colspan=2><FONT SIZE="2">MX 類型TOP10 ClientIP</FONT></TD>
</TR>
<?php showFile("mxClientIpTop10"); ?>
</TABLE>
<BR>
<TABLE cellpadding=3 cellspacing=2 border=0>
<TR bgcolor=#DDDDDD>
<TD colspan=2><FONT SIZE="2">;PTR類型TOP10 ClientIP</FONT></TD>
</TR>
<?php showFile("ptrClientIpTop10"); ?>
</TABLE>
<BR>
<TABLE cellpadding=3 cellspacing=2 border=0>
<TR bgcolor=#DDDDDD>
<TD colspan=2><FONT SIZE="2">SOA類型TOP10 ClientIP</FONT></TD>
</TR>
<?php showFile("soaClientIpTop10"); ?>
</TABLE>
<BR>
<TABLE cellpadding=3 cellspacing=2 border=0>
<TR bgcolor=#DDDDDD>
<TD colspan=2><FONT SIZE="2">SRV類型TOP10 ClientIP</FONT></TD>
</TR>
<?php showFile("srvClientIpTop10"); ?>
</TABLE>
</TD>
<TD valign=top>
源於最近10分鐘dnsLog<BR>
<TABLE cellpadding=3 cellspacing=2 border=0>
<TR bgcolor=#DDDDDD>
<TD colspan=2><FONT SIZE="2">A類型TOP10 域名對象</FONT></TD>
</TR>
<?php showFile("aObjectTop10"); ?>
</TABLE>
<BR>
<TABLE cellpadding=3 cellspacing=2 border=0>
<TR bgcolor=#DDDDDD>
<TD colspan=2><FONT SIZE="2">MX 類型TOP10 域名對象</FONT></TD>
</TR>
<?php showFile("mxObjectTop10"); ?>
</TABLE>
<BR>
<TABLE cellpadding=3 cellspacing=2 border=0>
<TR bgcolor=#DDDDDD>
<TD colspan=2><FONT SIZE="2">;PTR類型TOP10 對象</FONT></TD>
</TR>
<?php showFile("ptrObjectTop10"); ?>
</TABLE>
<BR>
<TABLE cellpadding=3 cellspacing=2 border=0>
<TR bgcolor=#DDDDDD>
<TD colspan=2><FONT SIZE="2">SOA類型TOP10 對象</FONT></TD>
</TR>
<?php showFile("soaObjectTop10"); ?>
</TABLE>
<BR>
<TABLE cellpadding=3 cellspacing=2 border=0>
<TR bgcolor=#DDDDDD>
<TD colspan=2><FONT SIZE="2">SRV類型TOP10 對象</FONT></TD>
</TR>
<?php showFile("srvObjectTop10"); ?>
</TABLE>
</TD>
</TR>
</TABLE>
</body>
</html>
<?php
function showFile($fileName){
$ary=file("/data/webapp/dnsMonitor/".$fileName);
for($i=0;$i<count($ary);$i++){
echo "<tr bgcolor=#EEEEEE>";
echo "<td>".substr(substr($ary[$i],0,strrpos($ary[$i]," ")),0,25)."</td>";
echo "<td>".strrchr($ary[$i]," ")."</td>";
echo "</tr>"."\n";
}
}
?>
[ 本帖最後由 ttxx 於 2009-6-18 16:04 編輯 ]
《解決方案》
有人在會不。。。我怎麼做都做不好
《解決方案》
http://blog.isyi.com/2010/10/1086/
DNS查詢統計圖。