免费注册 查看新帖 |

Chinaunix

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

每天5G的nginx日志,需要怎么分析? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-12-09 13:16 |只看该作者 |正序浏览
RT,要分析出每IP的访问数量和每IP的访问内容。
61.4.184.92 - - [05/Dec/2013:00:10:05 +0800] "GET /data/?areaid=329103324&type=observe&date=201312042349&appid=7fde98&key=BUyFU0GyXhzGNDIFEDMQaortggDQ= HTTP/1.1" 200 76 "-" "Dalvik/1.6.0 (Linux; U; Android 4.1.1; MI 2S MIUI/JLB23.0)" -
61.4.184.91 - - [05/Dec/2013:00:10:05 +0800] "GET /data/?areaid=101243506&type=observe&date=201301012336&appid=7cfdf9&key=oMqeris3J3IZ3CHkbOKd06X5NYg= HTTP/1.1" 200 77 "-" "Dalvik/1.4.0 (Linux; U; Android 4.0; US900G Build/GRK39F)" -
如示例数据中
1统计出每个用户请求的数量,(用户由appid字段的值来区分)
2每个用户请求的areaid和type,
3每个IP访问的数量
每天的日志有5G或者更多,这样的数据怎么处理?
在shell版块问了,用awk.效率有点低,perl是不是会比较快一些?
awk的代码:
/appid/&&/areaid/&&/type/{
        appid=gensub(/.*appid=([^&]*).*/,"\\1",1);
        areaid=gensub(/.*areaid=([^&]*).*/,"\\1",1);
        type=gensub(/.*type=([^&]*).*/,"\\1",1);
        IP=$1;

        a[appid]++;
        if(!x[appid,areaid]++)b[appid]=b[appid]?b[appid]" "areaid:areaid;
        if(!y[appid,type]++)c[appid]=c[appid]?c[appid]" "type:type;
        d[IP]++;
}

END{
        for(i in a)printf "appid:\t%s\ntimes:\t%d\nareaid:\t%s\ntype:\t%s\n\n",i,a[i],b[i],c[i];
        for(i in d)print i,d[i];
}

论坛徽章:
0
37 [报告]
发表于 2013-12-23 09:43 |只看该作者
本帖最后由 yu34po 于 2013-12-23 10:12 编辑

回复 36# rubyish

太牛了。。

论坛徽章:
7
戌狗
日期:2013-12-15 20:43:38技术图书徽章
日期:2014-03-05 01:33:12技术图书徽章
日期:2014-03-15 20:31:17未羊
日期:2014-03-25 23:48:20丑牛
日期:2014-04-07 22:37:44巳蛇
日期:2014-04-11 21:58:0915-16赛季CBA联赛之青岛
日期:2016-03-17 20:36:13
36 [报告]
发表于 2013-12-21 03:13 |只看该作者
biru:
  1. #!/usr/bin/perl

  2. my $log = 'mytestlog';
  3. open my $f, $log or die "$log: $!";
  4. my ( %ip, %id, %url );

  5. while (<$f>) {
  6.     my $url = ( split /"/, $_, 3 )[1];
  7.     $url = substr $url, 4;
  8.     next unless $url;
  9.     my ( $ip, $appid ) = /^(\S+).*?appid=(\w+)/;
  10.     next unless $appid;
  11.     $url{$url}{times}++;
  12.     $ip{$ip}{times}++;
  13.     $id{$appid}{times}++;
  14.     $ip{$ip}{url}{$url}       = 1;
  15.     $ip{$ip}{appid}{$appid}   = 1;
  16.     $url{$url}{ip}{$ip}       = 1;
  17.     $url{$url}{appid}{$appid} = 1;
  18.     $id{$appid}{url}{$url}    = 1;
  19.     $id{$appid}{ip}{$ip}      = 1;
  20. }

  21. while ( my ( $k, $v ) = each %id ) {
  22.     next if length $k != 6;
  23.     print "appid:\t", $k, $/;
  24.     print "times:\t", $v->{times}, $/;
  25.     print "url:\t", join( ', ', keys %{ $v->{url} } ), $/;
  26.     print "ip:\t", join( ', ', keys %{ $v->{ip} } ), $/, $/;
  27. }

  28. print $/;

  29. while ( my ( $k, $v ) = each %ip ) {
  30.     next if $v->{times} < 1000;
  31.     print "ip:\t$k$/";
  32.     print "times:\t$v->{times}$/";
  33.     print "url:\t", join( ', ', keys %{ $v->{url} } ), $/;
  34.     print "appid:\t", join( ', ', keys %{ $v->{appid} } ), $/, $/;
  35. }

  36. print $/;

  37. while ( my ( $k, $v ) = each %url ) {
  38.     next if $v->{times} < 1000;
  39.     print "url:\t$k$/";
  40.     print "times:\t$v->{times}$/";
  41.     print "ip:\t", join( ', ', keys %{ $v->{ip} } ), $/;
  42.     print "appid:\t", join( ', ', keys %{ $v->{appid} } ), $/, $/;
  43. }
复制代码

论坛徽章:
0
35 [报告]
发表于 2013-12-20 08:30 |只看该作者
1111111111111111111111

论坛徽章:
0
34 [报告]
发表于 2013-12-19 12:03 |只看该作者
回复 31# rubyish


    大神快来啊

论坛徽章:
0
33 [报告]
发表于 2013-12-19 09:36 |只看该作者
回复 31# rubyish


    一条ip可能对应多条appid和多条ref,这还真难弄了。

论坛徽章:
0
32 [报告]
发表于 2013-12-19 09:28 |只看该作者
本帖最后由 yu34po 于 2013-12-19 21:36 编辑

回复 31# rubyish

61.4.184.92 - - [05/Dec/2013:00:10:05 +0800] "GET /data/?areaid=101091101&type=observe&date=201312042349&appid=74uq29&key=BfefdfdhzGNDNVpMQaortggDQ= HTTP/1.1" 200 76 "-" "Dalvik/1.6.0 (Linux; U; Android 4.1.1; MI 2S MIUI/JLB23.0)" -
61.4.184.90 - - [05/Dec/2013:00:10:06 +0800] "GET /data/?areaid=101210101&type=forecast&date=201312042349&appid=f61f32&key=Cums98rfefesdmJA85YDaOO4DEG74%3D HTTP/1.1" 200 1167 "-" "SAMSUNG-Android"
我去,这下完了,说要统计以appid为key对应的ip,url和请求的次数,还要以ip为key,对应的appid,url和请求的次数,再要以url为key,对应的appid,ip和请求的次数,
我去……。adkh
appid:    d30b9f//以appid为key
times:    30
url:        "/data/?areaid=101091101&type=observe&date=201312042349&appid=74uq29&key=BfefdfdhzGNDNVpMQaortggDQ= HTTP/1.1","..."
ip:         "10.10.10.10","11.11.11.11","..."

ip:         "1.1.1.1"//以ip为key,只统计超过1000条的数据
times:    300
url:        "/data/?areaid=101091101&type=observe&date=201312042349&appid=74uq29&key=BfefdfdhzGNDNVpMQaortggDQ= HTTP/1.1","..."
appid:    "d30b9f"

url:        "/data/?areaid=101091101&type=observe&date=201312042349&appid=74uq29&key=BfefdfdhzGNDNVpMQaortggDQ= HTTP/1.1"//以url为  
             key,只统计超过1000条的数据
times:    40
ip:         "10.10.10.11","..."
appid:    "d30b9f","..."

论坛徽章:
7
戌狗
日期:2013-12-15 20:43:38技术图书徽章
日期:2014-03-05 01:33:12技术图书徽章
日期:2014-03-15 20:31:17未羊
日期:2014-03-25 23:48:20丑牛
日期:2014-04-07 22:37:44巳蛇
日期:2014-04-11 21:58:0915-16赛季CBA联赛之青岛
日期:2016-03-17 20:36:13
31 [报告]
发表于 2013-12-19 00:35 |只看该作者
现在主要的问题是url是某段?~

61.4.184.92 - - [05/Dec/2013:00:13:54 +0800] "GET /data/?areaid=101211001&type=observe&date=201312042352&appid=f63d32&key=hktQjJJME8FVe1RKC6cg2vIfh3M%3D HTTP/1.1" 200 297 "-" "SAMSUNG-Android" 10.239.163.3
61.4.184.90 - - [05/Dec/2013:00:13:54 +0800] "GET /data/?areaid=101080801&type=observe&date=201312042352&appid=7c1429&key=cLX3kjDH4xin7TeXbA1jTfbKHnw= HTTP/1.1" 200 77 "-" "Dalvik/1.6.0 (Linux; U; Android 4.1.2; Coolpad 7268 Build/JZO54K)" -

论坛徽章:
0
30 [报告]
发表于 2013-12-17 15:21 |只看该作者
回复 29# pitonas


擦,url就是url,这个需求我还纳闷呢,是要把每个url都给统计出来
   

论坛徽章:
5
丑牛
日期:2014-01-21 08:26:26卯兔
日期:2014-03-11 06:37:43天秤座
日期:2014-03-25 08:52:52寅虎
日期:2014-04-19 11:39:48午马
日期:2014-08-06 03:56:58
29 [报告]
发表于 2013-12-17 15:19 |只看该作者
大牛,where is 这个url的访问的url次数?{:2_172:}
  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP