免费注册 查看新帖 |

Chinaunix

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

用PHP写了一个APACHE IP 统计的脚本 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-05-03 03:40 |只看该作者 |倒序浏览
不做运维很久了, awk,sed 快忘光了,前两天要做access_log ip 统计,所以只能拿PHP当shell来用了

功能: 统计apache access_log 日志文件中的每ip 访问次数排行.

#!/usr/local/php/bin/php     
<?
$arr = file("./access_log";
$ip_array = array();
foreach($arr as $v){
    $array = explode(" ",$v);
    $ip_array[] = $array[0];
}
$temp = array_count_values($ip_array);
asort($temp);
foreach($temp as $k=>$v) {
    echo $k."       ".$v."\n";
}
$ip_num = count($temp);
$maxcount = max($temp);
$totalcount = array_sum($temp);

foreach ($temp as $k=>$v) {
    if ($v == $maxcount) {
        $topip = $k;
        break;
    }
}
echo "\n";
echo "=== Total {$ip_num} ips ===\n";                   // 总共不同的IP数
echo "=== Total {$totalcount} counts ===\n";       // 总访问数
echo "=== The Max counts ip is {$topip} the count is {$maxcount} ===\n"; // 访问数最高的IP及访问次数
?>

论坛徽章:
0
2 [报告]
发表于 2008-05-03 09:43 |只看该作者
这样子的脚本对访问量小的还行, 访问量大的这样的脚本也太没效率了!!

论坛徽章:
0
3 [报告]
发表于 2008-05-03 22:30 |只看该作者

那量大的呢

2楼 发表于 2008-5-3 09:43   
这样子的脚本对访问量小的还行, 访问量大的这样的脚本也太没效率了!!


那量大的呢

论坛徽章:
0
4 [报告]
发表于 2008-05-14 13:22 |只看该作者
第一行写的就不行。
不能file,一次读进内存,你也不怕死机啊!

$handle=fopen("文件名", "r");
while (!feof($handle)) {
  $content = fread($handle, 4096);
}

这么写是一行一行的读

论坛徽章:
3
金牛座
日期:2013-10-12 15:42:452015年辞旧岁徽章
日期:2015-03-03 16:54:15IT运维版块每日发帖之星
日期:2016-06-01 06:20:00
5 [报告]
发表于 2008-05-14 13:35 |只看该作者
原帖由 克隆熊猫 于 2008-5-14 13:22 发表
第一行写的就不行。
不能file,一次读进内存,你也不怕死机啊!

$handle=fopen("文件名", "r");
while (!feof($handle)) {
  $content = fread($handle, 4096);
}

这么写是一行一行的读

认识到这个的,多少应该有点C功底。

论坛徽章:
0
6 [报告]
发表于 2008-05-14 13:48 |只看该作者
我天天写日志分析,写的都想吐了~~~~

论坛徽章:
0
7 [报告]
发表于 2008-05-14 17:34 |只看该作者
我如果只干一次这事,那我会 load data infile..... 然后 select ........
如果总干这事我就装个 awstats
要是没那么多要求我就页面上加个雅虎统计百度统计什么的。。。

论坛徽章:
0
8 [报告]
发表于 2008-05-14 22:22 |只看该作者
活用一下下面的就好了,我写shell很菜,不过,用PHP来做这个事不如shell来得痛快

tcpdump 抓包 ,用来防止80端口被人攻击时可以分析数据
[root@host root]# tcpdump -c 10000 -i eth0 -n dst port 80 > /root/pkts

然后检查IP的重复数 并从小到大排序 注意 "-t\ +0"  中间是两个空格
[root@host root]# less pkts | awk {'printf $3"\n"'} | cut -d. -f 1-4 | sort | uniq -c | awk {'printf $1" "$2"\n"'} | sort -n -t\  +0

查看有多少个活动的php-cgi进程
netstat -anp | grep php-cgi | grep ^tcp | wc -l

各种状态TCP连接数
netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'

论坛徽章:
0
9 [报告]
发表于 2008-05-14 22:42 |只看该作者
php灵活性不是shell可以比拟的。shell只能完成相对直观的一些分析。深处理就做不到了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP