歡迎您光臨本站 註冊首頁

湖北省網中心的DNS查詢監控,帶教程

←手機掃碼閱讀     火星人 @ 2014-03-04 , reply:0

湖北省網中心的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查詢統計圖。




[火星人 ] 湖北省網中心的DNS查詢監控,帶教程已經有631次圍觀

http://coctec.com/docs/service/show-post-16105.html