免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 5645 | 回复: 2
打印 上一主题 下一主题

[DNS] 湖北省网中心的DNS查询监控,带教程 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-06-18 15:59 |只看该作者 |倒序浏览
最近一直在找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
引用
  1. #!/bin/sh

  2. # 路径配置,bind日志目录和脚本目录
  3. logPath="/usr/local/bind9/log"
  4. statPath="/data/dnsStat"

  5. # 开始cron的计时
  6. echo `date "+%Y-%m-%d %H:%M:%S"`" cron start:" >> /data/dnsStat/statlog

  7. # 计算当前时间前10分钟的小时分钟,作为以后log判断的效验,如提取12:1作为判断12:1x的条件
  8. before10m=`date -d "-10 minute" +%H:%M | sed -n 's/.$//p'`
  9. # 计算当前时间前10分钟的年月日字串
  10. before10m1=`date -d "-10 minute" +%Y%m%d`
  11. # 计算当前时间前10分钟的日期字串
  12. dayStr=`date -d "-10 minute" +%d`

  13. # 判断日志,得到前10分钟内不同$9记录(即query类型)的查询数量
  14. # 全部query
  15. Query_count=`cat $logPath/bind9_query.log | awk '$1~/^'$dayStr'/ && $2~/^'$before10m'/ {print $2}' | wc -l`
  16. Query_count=`echo $Query_count`

  17. # 全部query的client ip排名前10 -> 写入文件
  18. 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[i]}' | sort -k2 -n -r | sed -n '0,10p' > /data/dnsStat/queryClientIpTop10

  19. # 全部query的域名对象排名前10 -> 写入文件
  20. cat $logPath/bind9_query.log | awk '$1~/^'$dayStr'/ && $2~/^'$before10m'/ {print $9}' | awk '{a[$1]+=1}END{for(i in a)print i,a[i]}' | sort -k2 -n -r | sed -n '0,10p' > /data/dnsStat/queryObjectTop10

  21. # A记录 query
  22. A_count=`cat $logPath/bind9_query.log | awk '$1~/^'$dayStr'/ && $2~/^'$before10m'/ && $11~/A/ {print $2}' | wc -l`
  23. A_count=`echo $A_count`

  24. # client ip排名前10 -> 写入文件
  25. 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[i]}' | sort -k2 -n -r | sed -n '0,10p' > /data/dnsStat/aClientIpTop10

  26. # 域名对象排名前10 -> 写入文件
  27. 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[i]}' | sort -k2 -n -r | sed -n '0,10p' > /data/dnsStat/aObjectTop10

  28. # PTR记录 query
  29. PTR_count=`cat $logPath/bind9_query.log | awk '$1~/^'$dayStr'/ && $2~/^'$before10m'/ && $11~/PTR/ {print $2}' |wc -l`PTR_count=`echo $PTR_count`

  30. # client ip排名前10 -> 写入文件
  31. 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[i]}' | sort -k2 -n -r | sed -n '0,10p' > /data/dnsStat/ptrClientIpTop10

  32. # 域名对象排名前10 -> 写入文件
  33. 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[i]}' | sort -k2 -n -r | sed -n '0,10p' > /data/dnsStat/ptrObjectTop10

  34. # MX记录 query
  35. MX_count=`cat $logPath/bind9_query.log | awk '$1~/^'$dayStr'/ && $2~/^'$before10m'/ && $11~/MX/ {print $2}' | wc -l`MX_count=`echo $MX_count`

  36. # client ip排名前10 -> 写入文件
  37. cat $logPath/bind9_query.log | awk '$1~/^'$dayStr'/ && $2~/^'$before10m'/ && $11~/MX/ {print $5}' | cut -d"#" -
  38. f1 | awk '{a[$1]+=1}END{for(i in a)print i,a[i]}' | sort -k2 -n -r | sed -n '0,10p' > /data/dnsStat/mxClientIpTop10

  39. # 域名对象排名前10 -> 写入文件
  40. cat $logPath/bind9_query.log | awk '$1~/^'$dayStr'/ && $2~/^'$before10m'/ && $11~/MX/ {print $9}' | awk '{a[$1]
  41. +=1}END{for(i in a)print i,a[i]}' | sort -k2 -n -r | sed -n '0,10p' > /data/dnsStat/mxObjectTop10

  42. # SOA记录 query
  43. SOA_count=`cat $logPath/bind9_query.log | awk '$1~/^'$dayStr'/ && $2~/^'$before10m'/ && $11~/SOA/ {print $2}' |
  44. wc -l`SOA_count=`echo $SOA_count`

  45. # client ip排名前10 -> 写入文件
  46. 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[i]}' | sort -k2 -n -r | sed -n '0,10p' > /data/dnsStat/soaClientIpTop10

  47. # 域名对象排名前10 -> 写入文件
  48. cat $logPath/bind9_query.log | awk '$1~/^'$dayStr'/ && $2~/^'$before10m'/ && $11~/SOA/ {print $9}' | awk '{a[$1
  49. ]+=1}END{for(i in a)print i,a[i]}' | sort -k2 -n -r | sed -n '0,10p' > /data/dnsStat/soaObjectTop10

  50. # SRV记录 query
  51. SRV_count=`cat $logPath/bind9_query.log | awk '$1~/^'$dayStr'/ && $2~/^'$before10m'/ && $11~/SRV/ {print $2}' |
  52. wc -l`SRV_count=`echo $SRV_count`

  53. # client ip排名前10 -> 写入文件
  54. 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[i]}' | sort -k2 -n -r | sed -n '0,10p' > /data/dnsStat/srvClientIpTop10

  55. # 域名对象排名前10 -> 写入文件
  56. cat $logPath/bind9_query.log | awk '$1~/^'$dayStr'/ && $2~/^'$before10m'/ && $11~/SRV/ {print $9}' | awk '{a[$1
  57. ]+=1}END{for(i in a)print i,a[i]}' | sort -k2 -n -r | sed -n '0,10p' > /data/dnsStat/srvObjectTop10

  58. 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

  59. # 得到前一个10分钟段第一秒的起始时间字串
  60. before10m2=$before10m1" "$before10m"0:00"
  61. # 生成相应的时间戳
  62. rrdTime=`date -d "$before10m2" +%s`

  63. # 将分析的query结果写入到rrdtool文件中
  64. dataSource=$rrdTime:$Query_count:$A_count:$MX_count:$PTR_count:$SOA_count:$SRV_count
  65. /usr/local/rrdtool/bin/rrdtool update /data/dnsStat/bind_stat.rrd -t ALL:A:MX:PTR:SOA:SRV $dataSource

  66. echo `date "+%Y-%m-%d %H:%M:%S"`" write rrdtool success:" >> /data/dnsStat/statlog

  67. # 拷贝rrdtool文件到Heinet 服务器上
  68. #su -c "/usr/bin/scp /data/dnsStat/bind_stat.rrd [email=scpuser@xxx.xx.xx.xx]scpuser@xxx.xx.xx.xx[/email]:/data/webapp/dnsMonitor/rrdSource/" scpuser
  69. #su -c "/usr/bin/scp /data/dnsStat/*Top10 [email=scpuser@xxx.xx.xx.xx]scpuser@xxx.xx.xx.xx[/email]:/data/webapp/dnsMonitor/" scpuser

  70. # 结束时间标记
  71. echo `date "+%Y-%m-%d %H:%M:%S"`" scp rrdfile to 64.93 success:" >> /data/dnsStat/statlog
复制代码



/data/webapp/dnsMonitor/index.php
引用
  1. <?php
  2. /*
  3. ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  4. :: Script System Name:                                                  ::
  5. :: (c) 2003-2005 Heinet developer ([url=http://www.heinet.cn]www.heinet.cn[/url])                       ::
  6. ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  7. :: Author:  wp1998 ([email=wp1998@e21.edu.cn]wp1998@e21.edu.cn[/email])                                  ::
  8. :: Version:            Time:                                            ::
  9. ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  10. */

  11. // Filename        :   
  12. // introduce    :   
  13. // Last Time    :   

  14. // 获取指定时间之前最近的尾数为0分钟,如0、10、20、30、40、50
  15. // 参数:时间戳
  16. function getAfterTime1($timeInt){
  17.     do {
  18.         if(substr(date("i",$timeInt),-1)=="0" && date("s",$timeInt)=="00"){
  19.             return $timeInt;
  20.             break;
  21.         } else {
  22.             $timeInt--;
  23.         }
  24.     } while($timeInt>0);
  25. }

  26. $nowTime=getAfterTime1((time()-30*60));                // 见函数说明
  27. $oneDayAfterTime=$nowTime-(3600*24);                // 一天之前的时间
  28. $oneWeekAfterTime=$nowTime-(3600*24*7);                // 一个星期之前的时间
  29. $oneMonthAfterTime=$nowTime-(3600*24*30);            // 一个月之前的时间
  30. $oneYearAfterTime=$nowTime-(3600*24*365);            // 一年之前的时间

  31. ?>

  32. <html>
  33. <head>
  34. <meta http-equiv="Content-Type" c>
  35. <meta http-equiv=refresh content=300 url=index.php ;>
  36. <title>Heinet DNS查询实时监控</title>
  37. <style>
  38. body {font-size:10.4pt}
  39. td {font-size:9pt}
  40. </style>
  41. </head>
  42. <body text="#000000" leftmargin="10" topmargin="10">

  43. <FONT SIZE="6" face="Arial">Heinet DNS Query 流量监控</FONT><BR>

  44. <p style="line-height:14pt;font-size=10.4pt">
  45. 说明:<BR>
  46. 1。监控的流量值是采集每10分钟内平均每秒(second)各类型查询的query数量值而成;<BR>
  47. 2。下列图片分别显示最近的日、周、月、年内的曲线变化情况;<BR>
  48. 3。<FONT COLOR="CC6633">此色标识</FONT>A记录查询、<FONT COLOR="66FF99">此色标识</FONT>;PTR记录查询、<FONT

  49. COLOR="0066CC"& gt;此色标识</FONT>MX记录查询、<FONT COLOR="FF0000">此色标识</FONT>SOA记录查询、<FONT COLOR="339933">此色标识</FONT>SRV记录查询。<BR>
  50. 最后更新:2005-5-25 [email=wp1998@e21.edu.cn]wp1998@e21.edu.cn[/email]
  51. </p>

  52. <TABLE cellpadding=5 cellspacing=5>
  53. <TR>
  54.     <TD valign=top>
  55.         <B>近一天内Query流量示意图:</B><BR>
  56.         <img xsrc="./dnsQueryStat.php?nowTime=<?php echo $nowTime; ?>&lastTime=<?php echo $oneDayAfterTime; ?>" border=0 title="24小时各查询量状态,每10分钟计算"><BR>
  57.         <BR>
  58.         <B>近一周内Query流量示意图:</B><BR>
  59.         <img xsrc="./dnsQueryStat.php?nowTime=<?php echo $nowTime; ?>&lastTime=<?php echo $oneWeekAfterTime; ?>" border=0 title="24小时各查询量状态,每10分钟计算"><BR>
  60.         <BR>
  61.         <B>近一月内Query流量示意图:</B><BR>
  62.         <img xsrc="./dnsQueryStat.php?nowTime=<?php echo $nowTime; ?>&lastTime=<?php echo $oneMonthAfterTime; ?>" border=0 title="24小时各查询量状态,每10分钟计算"><BR>
  63.         <BR>
  64.         <B>近一年内Query流量示意图:</B><BR>
  65.         <img xsrc="./dnsQueryStat.php?nowTime=<?php echo $nowTime; ?>&lastTime=<?php echo $oneYearAfterTime; ?>" border=0 title="24小时各查询量状态,每10分钟计算"><BR>
  66.         <BR>
  67.     </TD>
  68.     <TD valign=top align=right>
  69.         实时Top排名<BR>
  70.         <TABLE cellpadding=3 cellspacing=2 border=0>
  71.             <TR bgcolor=#DDDDDD>
  72.                 <TD colspan=2><FONT SIZE="2"> A 类型TOP10 ClientIP</FONT></TD>
  73.             </TR>
  74.             <?php showFile("aClientIpTop10"); ?>
  75.         </TABLE>
  76.         <BR>
  77.         <TABLE cellpadding=3 cellspacing=2 border=0>
  78.             <TR bgcolor=#DDDDDD>
  79.                 <TD colspan=2><FONT SIZE="2">MX 类型TOP10 ClientIP</FONT></TD>
  80.             </TR>
  81.             <?php showFile("mxClientIpTop10"); ?>
  82.         </TABLE>
  83.         <BR>
  84.         <TABLE cellpadding=3 cellspacing=2 border=0>
  85.             <TR bgcolor=#DDDDDD>
  86.                 <TD colspan=2><FONT SIZE="2">;PTR类型TOP10 ClientIP</FONT></TD>
  87.             </TR>
  88.             <?php showFile("ptrClientIpTop10"); ?>
  89.         </TABLE>
  90.         <BR>
  91.         <TABLE cellpadding=3 cellspacing=2 border=0>
  92.             <TR bgcolor=#DDDDDD>
  93.                 <TD colspan=2><FONT SIZE="2">SOA类型TOP10 ClientIP</FONT></TD>
  94.             </TR>
  95.             <?php showFile("soaClientIpTop10"); ?>
  96.         </TABLE>
  97.         <BR>
  98.         <TABLE cellpadding=3 cellspacing=2 border=0>
  99.             <TR bgcolor=#DDDDDD>
  100.                 <TD colspan=2><FONT SIZE="2">SRV类型TOP10 ClientIP</FONT></TD>
  101.             </TR>
  102.             <?php showFile("srvClientIpTop10"); ?>
  103.         </TABLE>
  104.     </TD>
  105.     <TD valign=top>
  106.         源于最近10分钟dnsLog<BR>
  107.         <TABLE cellpadding=3 cellspacing=2 border=0>
  108.             <TR bgcolor=#DDDDDD>
  109.                 <TD colspan=2><FONT SIZE="2">A类型TOP10 域名对象</FONT></TD>
  110.             </TR>
  111.             <?php showFile("aObjectTop10"); ?>
  112.         </TABLE>
  113.         <BR>
  114.         <TABLE cellpadding=3 cellspacing=2 border=0>
  115.             <TR bgcolor=#DDDDDD>
  116.                 <TD colspan=2><FONT SIZE="2">MX 类型TOP10 域名对象</FONT></TD>
  117.             </TR>
  118.             <?php showFile("mxObjectTop10"); ?>
  119.         </TABLE>
  120.         <BR>
  121.         <TABLE cellpadding=3 cellspacing=2 border=0>
  122.             <TR bgcolor=#DDDDDD>
  123.                 <TD colspan=2><FONT SIZE="2">;PTR类型TOP10 对象</FONT></TD>
  124.             </TR>
  125.             <?php showFile("ptrObjectTop10"); ?>
  126.         </TABLE>
  127.         <BR>
  128.         <TABLE cellpadding=3 cellspacing=2 border=0>
  129.             <TR bgcolor=#DDDDDD>
  130.                 <TD colspan=2><FONT SIZE="2">SOA类型TOP10 对象</FONT></TD>
  131.             </TR>
  132.             <?php showFile("soaObjectTop10"); ?>
  133.         </TABLE>
  134.         <BR>
  135.         <TABLE cellpadding=3 cellspacing=2 border=0>
  136.             <TR bgcolor=#DDDDDD>
  137.                 <TD colspan=2><FONT SIZE="2">SRV类型TOP10 对象</FONT></TD>
  138.             </TR>
  139.             <?php showFile("srvObjectTop10"); ?>
  140.         </TABLE>
  141.     </TD>
  142. </TR>
  143. </TABLE>

  144. </body>
  145. </html>
  146. <?php
  147. function showFile($fileName){
  148.     $ary=file("/data/webapp/dnsMonitor/".$fileName);
  149.     for($i=0;$i<count($ary);$i++){   
  150.         echo "<tr bgcolor=#EEEEEE>";
  151.         echo "<td>".substr(substr($ary[$i],0,strrpos($ary[$i]," ")),0,25)."</td>";
  152.         echo "<td>".strrchr($ary[$i]," ")."</td>";
  153.         echo "</tr>"."\n";
  154.     }
  155. }

  156. ?>
复制代码

[ 本帖最后由 ttxx 于 2009-6-18 16:04 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2010-11-02 17:07 |只看该作者
有人在会不。。。我怎么做都做不好

论坛徽章:
0
3 [报告]
发表于 2010-11-05 16:31 |只看该作者
http://blog.isyi.com/2010/10/1086/
DNS查询统计图。



您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP