- 论坛徽章:
- 0
|
最近一直在找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[i]}' | 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[i]}' | 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[i]}' | 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[i]}' | 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[i]}' | 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[i]}' | 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[i]}' | 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[i]}' | 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[i]}' | 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[i]}' | 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[i]}' | 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[i]}' | 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 [email=scpuser@xxx.xx.xx.xx]scpuser@xxx.xx.xx.xx[/email]:/data/webapp/dnsMonitor/rrdSource/" scpuser
- #su -c "/usr/bin/scp /data/dnsStat/*Top10 [email=scpuser@xxx.xx.xx.xx]scpuser@xxx.xx.xx.xx[/email]:/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
引用
[ 本帖最后由 ttxx 于 2009-6-18 16:04 编辑 ] |
|