kient88 发表于 2018-11-19 08:31:33

【运维小分享】Apache日志分析命令汇总

很多像我这样刚入门的小菜鸟,不知道日常怎么对自己的网站的日志进行分析,得出谁访问过我网站,访问什么,响应效果如何等等,在这里我对相关基础分析命令作个总结,大家可以参考一下&给修改意见。


在讲分析命令之前,首先要明确日志格式,每个人的格式不一定一样,如果与我的格式不一样则分析命令的列数号要作对应调整

141.10.225.94 - - "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.102Safari/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 #用空格分出来的第四列是
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 webspider/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等等,但是手工分析是基础,而且有趣一点~



页: [1]
查看完整版本: 【运维小分享】Apache日志分析命令汇总