awstats 日志分析工具linux下的安装和使用

合并日志文件可以使用 bash 的sort命令:

#sort -m -t " " -k  -o log_all access*.log

也可以使用  awstats 提供的 logresolvemerge.pl

#perl /usr/local/awstats/tools/logresolvemerge.pl -dnslookup= -showsteps access*.log >log_all
-showsteps 表示每8192行显示一次进度。
-dnslookup=100 表示用100个线程对 访问 IP进行dns解析。
优先使用 logresolvemerge.pl。因为在日志中时间混乱的情况下,使用 sort命令合并文件可能会在后面操作中报"Corrupted record"错误。
Corrupted record (date 20161210101739 lower than 20170109235927-20000)

以上命令,将需要分析的日志合并成一个 log_all文件

#perl awstats_configure.pl
#perl awstats.pl -config=www.mysite.com -update -showdropped -showcorrupted
#perl awstats_buildstaticpages.pl -config=www.mysite.com -month= -year=2016 -dir=/usr/local/awstats/wwwroot/

如果后期在日志中添加了其它列,例如添加了 referance 或user-agent, awstats会因为前后的列不匹配,而不能显示。这时需要在之前的日志中行尾添加 -

先找到添加了referance的第一行的行号

[root@iZ62jhlmsymZ tomcat_log]# grep -m 2 -n -C 2 '" " -' log_all
2027122-180.97.106.162 - - [24/May/2016:13:15:37 +0800] "GET /res/jqueryForm/jqueryForm.tar.bz2 HTTP/1.0" 404 -
2027123-125.35.62.66 - - [24/May/2016:13:15:38 +0800] "GET /xwzxBmdt/237575.jhtml HTTP/1.1" 200 10320
2027124:223.12.179.216 - - [24/May/2016:13:15:58 +0800] "GET /r/cms/taiyuan/red/images/wm_6.jpg HTTP/1.1" 200 - "http://www.mysite.com/" "Mozilla/5.0 (iPad; U; CPU OS 9_3 like Mac OS X; zh-CN; iPad4,2) AppleWebKit/534.46 (KHTML, like Gecko) UCBrowser/2.9.5.735 U3/ Mobile/10A403 Safari/7543.48.3" " -
2027125:223.12.179.216 - - [24/May/2016:13:15:58 +0800] "GET /r/cms/taiyuan/red/images/wm_4.jpg HTTP/1.1" 200 - "http://www.mysite.com/" "Mozilla/5.0 (iPad; U; CPU OS 9_3 like Mac OS X; zh-CN; iPad4,2) AppleWebKit/534.46 (KHTML, like Gecko) UCBrowser/2.9.5.735 U3/ Mobile/10A403 Safari/7543.48.3" " -
[root@iZ62jhlmsymZ tomcat_log]# sed -i 1,2027123s/'.$'/'\0 "-" "-"'/g log_all
[root@iZ62jhlmsymZ tomcat_log]# sed -n '2027121,2027124p' log_all
180.97.106.37 - - [24/May/2016:13:15:37 +0800] "GET /r/cms/www.bz2 HTTP/1.0" 404 - "-" "-"
180.97.106.162 - - [24/May/2016:13:15:37 +0800] "GET /res/jqueryForm/jqueryForm.tar.bz2 HTTP/1.0" 404 - "-" "-"
125.35.62.66 - - [24/May/2016:13:15:38 +0800] "GET /xwzxBmdt/237575.jhtml HTTP/1.1" 200 10320 "-" "-"
223.12.179.216 - - [24/May/2016:13:15:58 +0800] "GET /r/cms/taiyuan/red/images/wm_6.jpg HTTP/1.1" 200 - "http://www.mysite.com/" "Mozilla/5.0 (iPad; U; CPU OS 9_3 like Mac OS X; zh-CN; iPad4,2) AppleWebKit/534.46 (KHTML, like Gecko) UCBrowser/2.9.5.735 U3/ Mobile/10A403 Safari/7543.48.3" " -
[root@iZ62jhlmsymZ tomcat_log]#

第一个指令 grep '"$' log_all表示查找 log_all 中以双引号结尾的行,并显示行号( -n ) 。为便于观察,我们使用 "-m 2 -C 2"参数使结果显示前后两行。结果显示,第2027124行开始,记录中含有 referance字段和 user-agent字段。

第二个指令 sed -i 1,2027123s/'.$'/'\0 "-" "-"'/g log_all 表示自第1行至第2027123行,在行尾加上“  "-" "-"”。 参数"-i"表示直接将修改的结果写入文件。

第三个指令是查看修改后的结果。

对以上日志格式,配置文件awastats.www.mysite.com.conf 中,LogFormat 的配置的值如下:

[root@iZ62jhlmsymZ tomcat_log]# grep ^LogFormat /etc/awstats/awstats.www.mysite.com.conf
LogFormat = "%host %other %logname %time1 %methodurl %code %bytesd %refererquot %uaquot"
[root@iZ62jhlmsymZ tomcat_log]#

需要关注的参数:
Not viewed traffic * 里面包含了ua 为爬虫的数据,以及应答码为404错误等信息。

awstats是用于统计分析的,一些指标不能分析到,一些时候我们需要查相关的原始日志。这些情况可以考虑使用正则表达式工具直接对日志进行分析。

如果是 windows下的 log文件,在unix下使用正则表达式处理,需要将末尾的 \r\n 替换为 \n.可以使用 dos2unix命令,但如果日志中有二进制数据,会失败。这时需要使用 sed命令。

#sed -i -e 's/^M$/\n/g' log_all

-i 表示修改结果直接写入到文件。

-e 表示使用正则表达式

筛选日志中的源IP列表

[root@iZ62jhlmsymZ tomcat_log]# grep -o ^[-\.]* log_all | sort -u >log_ip_uniq.list

与攻击IP进行碰撞

[root@iZ62jhlmsymZ tomcat_log]# grep -x -F -f log_ip_uniq.list .sip.quchong.txt > crash.ip
[root@iZ62jhlmsymZ tomcat_log]# wc -l crash.ip
crash.ip

一共碰撞出234个IP.看看这234个IP访问频率。

 grep -o ^[0-9\.]* 234ip |sort | uniq -c

参数说明:

-f  要匹配的内容所在文件

-F 指示要匹配的内容以换行符分隔

-x 表示全行匹配

上一篇:OpenERP ORM 对象方法列表


下一篇:nginx跳转访问