很多像我这样刚入门的小菜鸟,不知道日常怎么对自己的网站的日志进行分析,得出谁访问过我网站,访问什么,响应效果如何等等,在这里我对相关基础分析命令作个总结,大家可以参考一下&给修改意见。
在讲分析命令之前,首先要明确日志格式,每个人的格式不一定一样,如果与我的格式不一样则分析命令的列数号要作对应调整
141.10.225.94 - - [09/Dec/2016:15:42:45 +0800] "GET /wp-content/uploads/2016/12/56.jpg HTTP/1.1" 304 - "http://www.vrfxie.cn/" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36" 0
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %T" combined
%…h: 远程主机
%…l: 远程登录名字(来自identd,如提供的话)
%…u: 远程用户(来自auth;如果返回状态(%s)是401则可能是伪造的)
%…t: 以公共日志时间格式表示的时间(或称为标准英文格式)
%…r: 请求的第一行
%…s: 状态。对于进行内部重定向的请求,这是指*原来*请求 的状态。如果用%…>s,则是指后来的请求
%…b: CLF格式的已发送字节数量,不包含HTTP头。例如当没有发送数据时,写入‘-’而不是0
%{Referer}i: 前一个页面,或者说从按个页面引过来的
%{User-Agent}i: 客户端主体信息
%T: 响应时间
基础:
1.找出访问次数最多的10个IP
cat access_log | awk '{print $1}' | sort | uniq -c | sort -rn | head -n 10
结果:
4 101.226.35.225
2 91.92.120.102
2 123.126.113.161
1 98.143.148.107
1 95.213.187.188
1 81.169.223.210
1 61.216.2.13
1 220.181.108.106
1 139.199.66.174
1 139.162.88.63
解析:
awk #首先将每条日志中的IP抓出来,如日志格式被自定义过,可以 -F 定义分隔符,然后print指定列
sort #进行初次排序,为的使相同的记录排列到一起
upiq -c #合并重复的行,并记录重复次数
sort -nr #按照数字进行倒叙排序
head #进行前十名筛选
功能:
1.访问最多的IP地址,一般来说单个ip访问量就两位数左右吧,什么几千几万次的,就有点奇怪了
2.进一步,可以查看对应IP做过在对你网站做什么,做得最多的是什么,访问时间段……..
2.找到访问最多的页面
cat access_log | awk '{print $11}' | sort | uniq -c | sort -rn | head -n 10
结果:
3068 "http://139.199.66.174/phpmyadmin/index.php/index.php"
52 "-"
31 "http://139.199.66.174/wp-admin/post-new.php"
27 "http://139.199.66.174/?p=58"
23 "http://139.199.66.174/wp-content/themes/sparkling/inc/css/font-awesome.min.css?ver=4.3.6"
22 "http://139.199.66.174/"
21 "http://vrfxie.blog.51cto.com/11026252/1877410"
21 "http://139.199.66.174/wp-content/themes/sparkling/inc/css/bootstrap.min.css?ver=4.3.6"
16 "http://www.vrfxie.cn/"
13 "http://139.199.66.174/wp-admin/post.php?post=58&action=edit&message=6"
与1同理,只是换了一个列数
功能:
1.找出访问最多的页面
2.进一步可以查看对应页面的响应效率,如果效率不正常,则要进行优化调整
3.找出网站的响应质量
cat access_log | awk '{print $9}' | sort | uniq -c | sort -rn | head -n 10 #查状态码
结果:
9 200
3 404
2 400
1 405
1 301
cat access_log | awk '{print $NF}' | sort | uniq -c | sort -rn | head -n 10 #查响应时间
功能:
1.状态码2开头表示正常,4的话就代表出错了,如果占得比例比较多则证明网站响应质量比较差,要查找对应原因了
2.响应时间一般为0,也就是零点几秒,大于0则要检查一下了
4.找出访问次数最多的那个小时
cat access_log | awk '{print $4}' | cut -c 14-15 | sort | uniq -c | sort -rn | head -n 10
结果:
3074 19
171 17
53 15
25 16
7 22
5 02
4 20
3 21
2 00
1 05
解析:
awk #用空格分出来的第四列是[09/Jan/2010:00:59:59;
cut -c #提取14到15个字符,就是表示小时那段
功能:
找出访问最多的时候,进一步可以查找,访问量高的原因,针对这段时间做优化。
进阶:
其实就是把上述的基本命令相互结合使用,或者加上一些特定条件,进行定位分析
下面我举几个典型例子,其他的大家可以类比去定制自己的分析命令即可
1.查看当天ip连接数
cat access_log | grep "09/Dec/2016" | awk '{print $1}' | sort | uniq -c | sort -rn | head -n 10
关键在于grep,规定好特定前提--哪一天!
2.查看客户端主体信息,可知道它是不是spider之类的东西
cat access_log | awk -F '"' '{print $6}' | sort | uniq -c | sort -rn | head -n 10
关键在于awk -F改变分隔符为" 取其第六段--客户端主体信息
spider样子:
Sogou web spider/4.0(+http://www.sogou.com/docs/help/webmasters.htm#07)
Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html)
……
3.列出传输时间超过30秒的文件
cat access_log | awk '($NF > 30){print $7}'| sort -n | uniq -c | sort -nr | head -10
关键在于$NF > 30,按照我的日志格式$NF--最后一列是表示响应时间,响应时间大于30秒是前提
建议大家可以把对应你所需的分析命令汇合成一个脚本,定期执行形成报告,方便你查看,更牛的,可以根据报告结果,对异常的地方作出告警。
当然现在有很多日志分析软件如Logcheck等等,但是手工分析是基础,而且有趣一点~