Bootstrap

goaccess 基本使用

说明

Nginx 的日志分析有助于对流量、错误排查,使用工具 goaccess 可以避免写复杂的 awk 函数,可以方便的统计来源 IP、请求流量、请求地址及请求时间分布。

goaccess 工程地址

报告示例

基础

安装

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
;