论坛首页 编程语言技术论坛

简简单单 Rails Request log 分析

浏览 4086 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2008-11-10  


1. 通过 wvanbergen-request-log-analyzer
安装:
gem sources -a http://gems.github.com
sudo gem install wvanbergen-request-log-analyzer

$ request-log-analyzer /var/log/my_app.log
可以分析大多内容,例如:

Top 10 most requested actions

Top 10 actions by time – cumulative

Top 10 actions by time – per request mean

Top 10 worst DB offenders – cumulative time

Top 10 worst DB offenders – mean time

Requests graph – per hour

2, 得到独立IP数量
cat production.log | grep “^Processing” | awk ‘{print $4}’ | uniq | wc -l

3, 每个IP的访问次数
cat production.log | grep “^Processing” | awk ‘{print $4}’ | uniq -c

4, 得到网站所有访问数量
cat production.log | grep “^Processing” |wc |awk ‘{print $1}’

5, 统计每个页面的各自访问次数
cat production.log |grep “200 OK” | awk ‘{print $17}’ | sort | uniq -c
   发表时间:2008-11-10  
其实就用shell统计就够用了,比方说统计action的耗时:

cat production.log |grep "200 OK" | awk '{print $17}'|sort|uniq -c | sort -r -n | head -n 500 > stat.log


统计前200个访问最多的IP:

grep Processing production.log | awk '{print $4}' | sort | uniq -c | sort -r -n | head -n 200 > stat_ip.log 


等等
0 请登录后投票
   发表时间:2008-11-10   最后修改:2008-11-10
用ruby可以处理更复杂的情况,比如统计中忽略/system/check_alive(需要修改这个插件源码).
一次请求生成的log是多行的,简单用shell不容易做到吧?
附带问问有人玩过rush不?
http://rush.heroku.com/
0 请登录后投票
   发表时间:2008-11-10  
liusong1111 写道
用ruby可以处理更复杂的情况,比如统计中忽略/system/check_alive(需要修改这个插件源码).
一次请求生成的log是多行的,简单用shell不容易做到吧?
附带问问有人玩过rush不?
http://rush.heroku.com/


第一句话没看懂…… 
什么文本问题不能用shell处理呢? sed + awk 一切轻松搞定

有问题交给拥有十年shell经验的robbin,估计都是轻松加easy吧
0 请登录后投票
   发表时间:2008-11-10  
我的需求是,系统里有个/system/check_alive的url,另有个后台进程隔段时间就访问一下它,看看进程是不是还活着.
在输出的报表里,比如Requests graph会显示一天24时中,每个小时的访问数,但我不希望上面url也被统计进来,需要在log analyzer代码里进行一次过滤.
仔细想了想,似乎应该能用shell解决.
log analyzer有一个parser类,用于把log文本解析成ruby数据结构,这样就能很好的利用,我刚才的例子只是担心纯文本扫描有没有那么强.
0 请登录后投票
   发表时间:2008-11-10  
liusong1111 写道
我的需求是,系统里有个/system/check_alive的url,另有个后台进程隔段时间就访问一下它,看看进程是不是还活着.
在输出的报表里,比如Requests graph会显示一天24时中,每个小时的访问数,但我不希望上面url也被统计进来,需要在log analyzer代码里进行一次过滤.
仔细想了想,似乎应该能用shell解决.
log analyzer有一个parser类,用于把log文本解析成ruby数据结构,这样就能很好的利用,我刚才的例子只是担心纯文本扫描有没有那么强.


grep -v "\/system\/check_alive"


一个过滤匹配就搞定了,把这个匹配用管道加到上面的命令里面去,可以收工了。貌似你比想了半天写ruby code要快nn倍。
0 请登录后投票
   发表时间:2008-11-11  
我喜欢 shell 我也贴一个我用的

有错的自动发邮件出来
cat production.log | grep "Error" -6 -n | mail -s "Error Logs" xxxx@agideo.com


0 请登录后投票
   发表时间:2008-11-11  
你们让我真真见识了shell的强大。谢谢。
0 请登录后投票
   发表时间:2008-12-05  
强大的shell
0 请登录后投票
论坛首页 编程语言技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics