日志分析能力

编    写:袁    亮
时    间:2014-01-16
说    明:后端开发人员需要会的apache日志简单分析能力

一、说明
1、作为一个开发人员,查看分析日志的能力是必须掌握的,出现问题,第一个反应就是看日志
2、学会一些简单的命令行,对开发能力的提升帮助非常大

二、apache日志记录项说明
1、例子,这是我们服务器常见的日志记录格式,一行代表一个请求,以空格作为分割符
192.168.0.253 101.39.76.182, 124.193.166.140, 222.186.129.150 - - [16/Jan/2015:14:21:16 +0800] "GET /flashsale/specialsale-taobao-119.html HTTP/1.0" 200 2410 31020 "http://shop.ci123.com/flashsale/specialsale-taobao-119.html" "Mozilla/5.0 (Linux; U; Android 4.2.2; zh-cn; GT-I9152 Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30  WebView (com.ci123.pregnancy; 4.8; 38)"

2、具体说明:
2.1 前端代理ip:
192.168.0.253
apache服务最后一个交互的ip,一般是我们的nginx前端
详细可以参考文档:ip传递过程
2.2 x-forward-ip
101.39.76.182, 124.193.166.140, 222.186.129.150
这是从客户端带前端代理,总共经过的ip记录
第一个一般就是客户端的真实ip
2.3 apache进程启动时间
16/Jan/2015:14:21:16
2.4 请求方式
"GET
一般只有get和post两种请求
2.5 请求路径
/flashsale/specialsale-taobao-119.html
http请求头里的请求地址path
2.6 http协议版本号
HTTP/1.0"
2.7 返回状态码
200
http响应状态码,可以查看百度百科,也可以参考文档http常见状态码
2.8 apache返回数据大小
2410
单位字节,表名这是请求返回的内容大小
2.9 apache响应时间
31020
单位微秒,这是apache的响应时间,在性能分析的时候第一个要关注的就是这个
2.10 请求referer
"http://shop.ci123.com/flashsale/specialsale-taobao-119.html"
从哪个页面过来的
2.11 用户的user-agent
"Mozilla/5.0 (Linux; U; Android 4.2.2; zh-cn; GT-I9152 Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30  WebView (com.ci123.pregnancy; 4.8; 38)"

3、日志文件位置
3.1 我们的apache日志一般在/opt/ci123/apache/logs下
3.2 命名一般是***.ci123.com-access.****
3.3 查不到的话,请根据apache配置自行查找

三、apache日志分析常用命令
1、查看日志文件
less shop.ci123.com-access.0116
切忌不要使用vim,日志文件一般都很大,vim打开会很惨
可以使用shift+g跳到最后
2、实时监控日志文件变化
tail -f shop.ci123.com-access.0116
3、查看最新1000个请求
tail -n 1000 shop.ci123.com-access.0116|less
4、搜索指定记录(时间、指定链接、特定ip、状态码等)
grep ' 500 ' shop.ci123.com-access.0116|less
查看500报错请求
5、awk命令
awk '{print $2}' baobao.ci123.com-access.0725 |less
打印每一行的第二列数据
每行默认是以空格做为分割符分割为多列,也可以使用-F参数指定分割符

四、常用命令组合
1、查看某个连接的所有访问记录
grep '/sadmin/' shop.ci123.com-access.0120|less
查看所有带/sadmin/的请求

2、查看错误访问记录
grep 'HTTP/1.0" 500' shop.ci123.com-access.0120|less
grep 'HTTP/1.0" 404' shop.ci123.com-access.0120|less
查看对应的错误状态码的请求

3、查看某个ip的访问记录
grep '111.13.47.163' shop.ci123.com-access.0120|less
grep '111.13.47.163' shop.ci123.com-access.0120|wc -l
前面是这个ip对应的所有访问记录
后面是这个ip的访问次数

4、查看某个页面有多少个独立ip访问
grep '/sadmin/' shop.ci123.com-access.0120|awk '{print $2}'|sort|uniq -c|wc -l

5、查看某个页面每个ip的访问次数,并根据访问次数排序
grep '/sadmin/' shop.ci123.com-access.0120|awk '{print $2}'|sort|uniq -c|sort -nr|less

6、查看某段时间或者某个链接最慢的查询
grep '/sadmin/' shop.ci123.com-access.0120|awk -F '+0800' '{print $2}'|sort -k6 -nr|less

7、统计某个时间段或者链接的平均访问时间
awk -F '+0800]' '{print $2}' shop.ci123.com-access.0120 |awk '{sum +=$6;num+=1}END{print sum/num/1000}'|less
根据+0800]分割每一行的数据,并输出第二列
对每一行的第6列累加,并记录行数num
输出第六列的和除以行数,计算平均响应时间,除以1000是把微秒转成毫秒方便查看

8、分析日志,最主要的是根据需求将以上这些命令组合
能过滤数据的命令先执行,把影响范围先缩进,再去统计、分析、排序,做所有其他分析的时候也遵循的是这个规则
如果发现自己执行的命令卡住了,使用ctrl+c中止进程
其他的日志分析原理基本上一致

发表评论