免费注册 查看新帖 |

Chinaunix

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

[经验分享]查isa2000日志,找出上传下载的NO.1 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2003-12-17 19:23 |只看该作者 |倒序浏览

  1. 192.168.1.232   cc      IEXPLORE.EXE:3:5.0      2003-12-17      08:38:09        S10     -       61.172.244.150  80      7953    284165     80      TCP     Connect 20000   14008   880747
复制代码


这个是isa2000的w3c扩展日志.其中第11段和第12段为上传和下载的byte数.ok知道这些就可以统计下载的流量了.
不过我首先要抓一些倒霉鬼.


  1. tail -99000 FWSEXTD20031217.log |awk '{if ($12>0 && $11>1500)print $1}'|sort|uniq|less>uplist
复制代码


上面这个代码是说从日志文件末尾起弄99000个记录,然后通过管道到awk来处理,如果$12(下载)>0和$11(上传)>1500
把这些记录打印出来.并且用sort|uniq组合把重复的ip去掉.然后通过>符号导入到uplist这个文件中.


接着就可以来处理这个uplist文件了.

把下面的代码保存成search.sh

  1. #!/bin/sh
  2. for ip in `cat uplist`
  3. do
  4. cat FWSEXTD20031217.log |grep "$ip\b"|awk -v ip2="$ip" '{count+=$11}END{printf "%13s %15d\n",ip2,count}'
  5. done
复制代码


上面这个脚本执行一个循环(for循环).
for ip in `cat uplist`是把uplist的东西作为for的循环列表.
``是用来执行cat uplist,并且把这个结果作为一个数组变量.

grep "$ip\b"

$ip表示是从刚才那个数组变量$ip中取的的一个记录,\b表示一个单词的边界.
也就是说192.168.5.11只会匹配192.168.5.11而不会匹配192.168.5.111

然后管道|把结果传到awk来处理

-v表示允许用户的自定义变量参与到awk的运算中
这里用户的自定义变量ip2被赋值上$ip,也就是ip2变成了数组变量中的一个ip

接着再{}中的是awk的动作了.把$11(11列)累加.并赋值到一个自定义变量count中


END表示awk完成累加后的动作,用printf来打印规范的格式.

%s表示字符串,中间的13表示字符串的长度,
%d表示整数,15表示长度
\n表示回车
ip2对应第一个%s,
count对应第二个%d


这样这个脚本就ok了.

chmod 755 search.sh

./search >up.txt


同时为了排序可以用
sort -g -k2 up.txt>sort.up.txt
-k表示排序的参考列.2表示第二列.

这样最终的sort.up.txt就是最终的结果(节选).

  1. 192.168.5.113       336943666
  2. 192.168.5.115       416217456
  3. 192.168.5.104      1681544713
  4. 192.168.5.189     5.43456e+09
复制代码


104是1G多的byte

下面是一个查下载的脚本

  1. #!/bin/sh
  2. tail -99000 FWSEXTD20031217.log |awk '{if ($12>1500 && $11>0)print $1}'|sort|uniq|less>dllist
  3. for ip in `cat dllist`
  4. do
  5. cat FWSEXTD20031217.log |grep "$ip\b"|awk -v ip2="$ip" '{count+=$12}END{printf "%13s %15d\n",ip2,count}'>>dl.txt
  6. done
  7. sort -g -k2 dl.txt>sort.dl.txt
复制代码




这里有个疑问,我用grep过滤ip,有没有办法让awk来过滤ip?
我一直没找到awk怎么能实现过滤ip

也就是
  1. awk -v ip2="$ip" '/ip2\y/{....}'
复制代码
,这个始终不能有结果.

  1. awk -v ip2="$ip" '$1 ~ ip2{.....}'
复制代码
又没法确定ip的边界,
192.168.5.11往往匹配192.168.5.111


  

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
2 [报告]
发表于 2003-12-17 19:48 |只看该作者

[经验分享]查isa2000日志,找出上传下载的NO.1

朋友,问题是不是复杂化了?
  1. awk '{if($11>0)a[$1]+=$11;if($12>1500)b[$1]+=$12}END{for(i in a)printf"%15s Upload: %d KB, Download: %d KB\n",i,a[i]/1024,b[i]/1024}' yourlogfile | sort -k 1
复制代码

论坛徽章:
0
3 [报告]
发表于 2003-12-17 20:15 |只看该作者

[经验分享]查isa2000日志,找出上传下载的NO.1

汗...没想到数组这么好用.而且awk只跑一次.效率高很多...
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP