goaccess 使用

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
log-format %h - %^ [%d:%t %^] "%r" %s %b "%R" - %^"%u"
log-format %h - %^ [%d:%t %^] "%r" %s %b "%R" - %^"%u" - %^ %T

log_format  main '$remote_addr - $remote_user [$time_local] "$request" '
                '$status $body_bytes_sent "$http_referer" '
                '"$http_user_agent" "$http_x_forwarded_for" "$query_string"';
    
log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                  '$status $body_bytes_sent "$http_referer" '
                  '"$http_user_agent" "$http_x_forwarded_for" $upstream_addr $request_time';


            
            
nginx log_format配置:
log_format  main  '$remote_addr - $remote_user [$time_local] requesthost:"$http_host"; "$request" requesttime:"$request_time"; '
        '$status $body_bytes_sent "$http_referer" - $request_body'
        '"$http_user_agent" "$http_x_forwarded_for"';


GoAccess log_format配置:
log-format %h - %^ [%d:%t %^] requesthost:"%v"; "%r" requesttime:"%T"; %s %b "%R" - %^"%u"

 

posted @ 2023-03-16 09:07  零零柒  阅读(15)  评论(0编辑  收藏  举报