在CentOS 8中,使用awk+sort+uniq进行Apache访问日志分析

本文介绍在CentOS 8中,通过AWK、Sort、Uniq三个命令,对Apache日志进行分析。

基础准备:

1. 查看Apache Log的格式

通过命令head /var/log/httpd/access_log,获取Apache日志如下。

10.10.0.1 - - [23/Mar/2020:16:43:12 +0800] "GET /noindex/common/css/styles.css HTTP/1.1" 200 71634 "http://10.10.3.212/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:74.0) Gecko/20100101 Firefox/74.0"

2. 按照空格进行分割后,该日志可以拆解为20个字段,具体如下。

第01字段:10.10.0.1

第02字段:-

第03字段:-

第04字段:[23/Mar/2020:16:43:12

第05字段:+0800]

第06字段:"GET

第07字段:/noindex/common/css/bootstrap.min.css

第08字段:HTTP/1.1"

第09字段:200

第10字段:99548

第11字段:"http://10.10.3.212/"

第12字段:"Mozilla/5.0

第13字段:(Windows

第14字段:NT

第15字段:10.0;

第16字段:Win64;

第17字段:x64;

第18字段:rv:74.0)

第19字段:Gecko/20100101

第20字段:Firefox/74.0"

分析案例:

访问量最高的10个来源IP地址

cat /var/log/httpd/access_log | awk '{print $1}' | sort | uniq -c | sort -nr | head -1

访问次数最多的文件或页面

cat /var/log/httpd/access_log | awk '{print $11}' | sort | uniq -c | sort -nr | head -20

访问量最高的视频文件

cat /var/log/httpd/access_log | awk '($7~/\.css/) { print $7} ' | sort -nr | uniq -c | head -10

文件大小超过40M的视频文件的访问量

cat /var/log/httpd/access_log | awk '($10 > 40000000 && $7~/\.mp4/){print $7}' | sort -n | uniq -c | sort -nr | head -100

统计网站流量

cat /var/log/httpd/access_log | awk '{sum+=$10} END {print sum/1024/1024 "MB"}'

发生404响应的用户请求

cat /var/log/httpd/access_log | awk '($9 ~/404/)' | awk '{print $9,$7}' | sort | uniq -c

统计http status

cat /var/log/httpd/access_log | awk '{print $9}' | sort | uniq -c | sort -nr

网站访问最常用的协议

cat /var/log/httpd/access_log | awk '{print $8}' | sort | uniq -c | sort -nr

用户访问网站最常用的浏览器

cat /var/log/httpd/access_log | awk '{print $20}' | sort |uniq -c | sort -nr | head -20

访问网站的客户端设备使用情况

cat /var/log/httpd/access_log | awk '{print $16 "\t" $15 "\t" $17 "\t" $20 "\t" $19}' | sort |uniq -c | sort -nr | head -20