首页 > 代码库 > 【运维小分享】Apache日志分析命令汇总

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

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


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

 

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等等,但是手工分析是基础,而且有趣一点~技术分享

本文出自 “走在产品路上的运维dog~” 博客,转载请与作者联系!

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