八九社区 首页 教程频道

分析Apache日志文件,统计各种实用信息

2019-7-3 10:50

原则上是用 awk 命令处理每一行,分离出有用的信息。因为每一行数据都是安一定标准输出,所以我们处理起来也不难。

用空白字符(空格或Tab)我们可以得到如下基本代码:


awk '{print $1}' access.log    //  ip地址 

awk '{print $2}' access.log   //  RFC 1413 身份 

awk '{print $3}' access.log   // 用户 ID 

awk '{print $4,5}' access.log   // 时间 

awk '{print $9}' access.log     // 状态码 

awk '{print $10}' access.log    // 大小 

awk -F \" '{print $2}' access.log   // 请求 

awk -F \" '{print $4}' access.log   // 引用地址 

​awk -F \" '{print $6}' access.log   // 用户代理 (user agent) 如执行用户代理命令


下面是一些实用的例子:

列出所有用户代理(user agent)并按出现次数排列(从高到低)

awk -F \" '{print $6}' access.log | sort | uniq -c | sort -fr

    

定位网站问题(通过状态码统计)


awk '{print $9}' access.log | sort | uniq -c | sort


第一列个数,第二列状态码(正常值200)

200 – OK

206 – Partial Content

301 – Moved Permanently

302 – Found

304 – Not Modified

401 – Unauthorised (password required)

403 – Forbidden

404 – Not Found

什么引起的404?

丢失文件或资源造成404错误,查看请求 URI 来定位链接。


grep " 404 " access.log | cut -d ' ' -f 7 | sort | uniq -c | sort -nr

   

404请求答复


cat access.log | awk '($9 ~ /404/)' | awk '{ print $7 }' | sort | uniq -c | sort -rn | head -n 25

   

独立请求IP地址


cat access.log | awk '{ print $1 }' | sort | uniq -c | sort -rn | head -n 25

   

独立请求IP地址对应的国家

安装依赖

apt-get install geoip-bin

    

cat access.log | awk '{ print $1 }' | sort | uniq -c | sort -rn | head -n 25 | awk '{ printf("%5dt%-15st", $1, $2); system("geoiplookup " $2 " | cut -d \: -f2 ") }'

   

查看谁在引用你的图片资源(省带宽)


awk -F" '($2 ~ /.(jpg|gif)/ && $4 !~ /^http://blog.topspeedsnail.com/){print $4}' access.log | sort | uniq -c | sort

    

列出空白的用户代理(user agent)

空用户代理有可能是爬虫脚本,当然也有可能是极其重视隐私的用户。用下面命令列出空用户代理对应的IP地址:


awk -F" '($6 ~ /^-?$/)' access.log | awk '{print $1}' | sort | uniq

    

负载过高

当你的网站在高负载下,你应该知道高负载是来自真正的用户还是其他什么东东。

配置问题或系统问题

有机器人频繁访问你的网站

拒接服务攻击


cat access.log | cut -d ' ' -f 1 | sort | uniq -c | sort -nr

    

Top 10 ip


cat access.log | awk '{ print $1 ; }' | sort | uniq -c | sort -n -r | head -n 10

    

每个状态码对应的数据传送量(单位KB)


cat access.log  | awk ' { total[$9] += $10 } END {  for (x in total) { printf "Status code %3d : %9.2f Kbn", x, total[x]/1024 } } '

   

Top 10 URI


cat access.log | awk -F \" ' { print $4 } ' | grep -v '-' | grep -v 'http://www.adayinthelife' | sort | uniq -c | sort -rn | head -n 10

  

Top 10 user-agents


cat access.log | awk -F" ' { print $6 } ' | sort | uniq -c | sort -rn | head -n 10

  

最近10,000次点击


tail -10000 access.log| awk '{print $1}' | sort | uniq -c |sort -n

    

每天的请求量


awk '{print $4}' access.log | cut -d: -f1 | uniq -c


每小时的请求量


grep "15/Nov" access.log | cut -d[ -f2 | cut -d] -f1 | awk -F: '{print $2":00"}' | sort -n | uniq -c

   

注意修改日期参数


每分钟的请求量

   

grep "15/Nov/2015:07" access.log | cut -d[ -f2 | cut -d] -f1 | awk -F: '{print $2":"$3}' | sort -nk1 -nk2 | uniq -c | awk '{ if ($1 > 10) print $0}'

   

所有独立访客


cat access.log | awk '{print $1}' | sort | uniq -c | wc -l

    

今天所有独立访客


cat access.log | grep `date '+%e/%b/%G'` | awk '{print $1}' | sort | uniq -c | wc -l

    

这个月所有独立访客


cat access.* | grep `date '+%b/%G'` | awk '{print $1}' | sort | uniq -c | wc -l

   

所有独立访客-指定日期


cat access.* | grep 15/Nov/2015 | awk '{print $1}' | sort | uniq -c | wc -l

    

所有独立访客-指定月份


cat access.* | grep Nov/2015 | awk '{print $1}' | sort | uniq -c | wc -l

    

IP对应的请求个数


cat access.log | awk '{print "requests from " $1}' | sort | uniq -c | sort

 

最受欢迎的URL


cat access.log | awk '{ print $7 }' | sort | uniq -c | sort -rn | head -n 25

    

实时查看请求


tailf access.log | awk '{ printf("%-15st%st%st%sn", $1, $6, $9, $7) }'

 

独立IP地址


cat access.log | awk '{print $1}' | sort | uniq

    

带时间戳的独立IP地址


cat access.log | awk '{print $1 " " $4}' | sort | uniq

    

独立IP地址和浏览器

cat access.log | awk '{print $1 " " $12 " " $19}' | sort | uniq


独立IP地址和操作系统

cat access.log | awk '{print $1 " " $13}' | sort | uniq


按时间筛选出所有日志

grep "15/Nov/2015:07" access.log


路过

雷人

握手

鲜花

鸡蛋
粉丝 阅读44 回复0

周一至周日9:00-18:00

反馈建议

service#bjjem.com 在线QQ咨询

扫描二维码关注我们

Powered by Discuz! © 2001-2019