分析日志中访问最大的前100IP

有一个10G大的apache访问日志,要求找出访问/stat.php面页次数大于10000次的前100个IP。

日志样本:211.11.129.181 — [26/Mar/2015:03:00:01 +0800] “GET/stat.php?pid=016 HTTP/1.1” 302 “-” “-” “”Mozllia/4.0(compatible;MSIE 6.0;Windows NT 5.1)”

分析:10G日志很大了,直接grep或者awk去分析肯定很慢,对内存消耗也是非常大的。若服务器配置较低,可以考虑把日志切割,比如切割成100个100M的文件,然后再针对这100个文件分别去统计排名前100的ip,得出结果后合并到一个文件中,再进行一次分析。

所以使用shell脚本来:

!/bin/bash

sta() {

grep ‘/stat.php’ $1|awk ‘{print $1}’|sort -n |unic -c|sort -n|tail -100

}

logfile=/data/logs/access.log

mkdir /data/logs/tmp

cd /data/logs

split -b 100M access.log smallfile

mv smallfile* tmp

cd tmp

把分割后的小文件里面的ip top100计算出来

for f in ls smallfile*

do

sta $f >> top100.txt

done

编写函数,计算每个ip出现的次数

count_sum() {

sum=0

for f in ls smallfile*

do

n=grep “$1” $f|awk ‘{print $1}|wc -l

sum=$[$sum+$n]

echo $sum $1

done

}

把得到的全部ip去重,作为遍历对象,把所有ip出现次数全部算出来

for ip in awk ‘{print $2}’ top100.txt|sort -n |uniq

do

count_sum $ip >> ip.txt

done

先把ip大于10000次的过滤出来,然后按ip的次数排序,得到前100个

awk ‘$1>10000’ ip.txt|sort -nr |head -100

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值