说明
Nginx 的日志分析有助于对流量、错误排查,使用工具 goaccess 可以避免写复杂的 awk 函数,可以方便的统计来源 IP、请求流量、请求地址及请求时间分布。
基础
安装
yum install goaccess -y
参数
参数 | 作用 |
---|---|
-o | 输出报告 |
-q | 地址统计不带 query 参数 |
–hour-spec | 默认为 hr 按小时统计,min 按分钟统计 |
–log-format | 指定日志格式,默认的 Nginx 日志需要指定 COMBINED |
使用
- 一般在服务器使用工具分析后,将报告下载到本地或者移动到 web 目录下进行查看
# 交互指定日志格式
goaccess dhccam.log
# 使用默认的 Nginx 日志格式(常用)
goaccess -qo report.html --log-format=COMBINED access.log
# 按分钟统计
goaccess -qo report.html --log-format=COMBINED --hour-spec=min access.log
# 个性化日志格式
goaccess --log-format='%h %^[%d:%t %^] "%r" %s %b' --date-format='%d/%b/%Y' --time-format='%H:%M:%S' --hour-spec=min -o report.html dhccam.log
报告分析
公共统计项
- 请求次数
- 请求流量
- 访问来源
维度 | 子项
- | -
总请求 | 日期
请求地址(除静态资源) | 请求方法; 请求协议; 请求地址
静态资源 | 请求方法; 请求协议; 请求地址
未找到 | 请求方法; 请求协议; 请求地址
来源 IP | 国家; IP
操作系统 | 操作系统
浏览器 | 浏览器
时间分布 | 小时
referer 网站 | referer 网站
HTTP 状态 | HTTP 状态
国际位置 | GEO
附录
日志格式
变量
参数 | nginx 变量
- | -
%h | $remote_addr
%^ | 忽略相关参数
%d | 日期
%t | 时间
%r | $request
%s | $status
%b | $body_bytes_sent
预置格式
# COMBINED
%h %^[%d:%t %^] "%r" %s %b "%R" "%u"
# VCOMBINED
%v:%^ %h %^[%d:%t %^] "%r" %s %b "%R" "%u"
# Common
%h %^[%d:%t %^] "%r" %s %b
# VCOMMON
%v:%^ %h %^[%d:%t %^] "%r" %s %b
# W3C
%d %t %h %^ %^ %^ %^ %r %^ %s %b %^ %^ %u %R
# SQUID(Squid native log format)
%^ %^ %^ %v %^: %x.%^ %~%L %h %^/%s %b %m %U
日志实例
默认
日志格式
$remote_addr - $remote_user [$time_local] "$request" $status $body_bytes_sent "$http_referer" "$http_user_agent"
日志
127.0.0.1 - - [28/Mar/2020:00:00:01 +0800] "GET /opregister/choosedoctor/b08wMg/ZEhDOQ HTTP/1.0" 200 14840 "https://webapp.cmu1h.com/wehospital/opregister/choosedept" "Mozilla/5.0 (iPhone; CPU iPhone OS 13_3_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 MicroMessenger/7.0.11(0x17000b21) NetType/WIFI Language/zh_CN"
命令
goaccess --log-format='%h %^[%d:%t %^] "%r" %s %b' --date-format='%d/%b/%Y' --time-format='%H:%M:%S' access.log --hour-spec=min>report.html
自定义格式
日志格式
[$time_local] [$msec] $status "$request" $body_bytes_sent "$http_referer" "$http_user_agent" "$remote_addr";
日志
[28/Mar/2020:00:00:01 +0800] [1585324801.441] 200 "POST /wehospital/opregister/getschedoclist HTTP/1.1" 245 "https://webapp.cmu1h.com/wehospital/opregister/choosedoctor/b3V3MA" "Mozilla/5.0 (iPhone; CPU iPhone OS 13_3_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 MicroMessenger/7.0.11(0x17000b21) NetType/WIFI Language/zh_CN" "117.136.5.228"
命令
goaccess --log-format='[%d:%t %^] %D %s "%r" %b "%R" "%u" "%h"' --date-format='%d/%b/%Y' --time-format='%H:%M:%S' sslreq.log-20200329 --hour-spec=min>ssl.html
源码安装
wget https://tar.goaccess.io/goaccess-1.3.tar.gz
tar -xzvf goaccess-1.3.tar.gz
cd goaccess-1.3/
./configure --enable-utf8 --enable-geoip=legacy
make
make install