Goaccess 分析网站日志
可以根据nginx日志一键生成报告。
安装
大部分 Linux 都可以一键安装。apt install goaccess 或者 yum install goaccess
确定日志格式
主要确定日志中的日期时间以及对应的字段。
根据Goaccess官方文档,它可以识别以下字段。%x 预先定义的时间戳格式,就是下面的日期、时间字段合并。需用--datetime-format=选项来定义后才能在--log-format=中使用。这个功能在1.6.1添加。如果提示不能使用这个参数,请检查goaccess版本是否大于等于1.6.1。%t 预先定义的时间格式,需用--date-format=定义后才能在--log-format=中使用。%d 预先定义的日期格式,需用--time-format=定义后才能在--log-format=中使用。%v The server name according to the canonical name setting (Server Blocks or Virtual Host).%e HTTP基本鉴权的用户名%C 缓存状态%h 客户端IP,v4或者v6%r 客户端请求字符串,包括请求方式、地址等信息的特定格式的字符串。我也不知道是个什么格式,所以就用 %m %U %q %H 单独解析每个字段。
- 注意:
%r就是用%m%U%q%H组合出来的,所以用一种方式就好。
%m 请求的方法: get, post, option。%U 请求的路径。
- 注意: 如果请求路径中带了参数,那就没必要用
%q。
%q 请求的参数。%H 请求的协议,HTTP/1.1等。%s 服务器响应码:200,403,404,500等。%b 服务器响应大小,单位是bit。%R 引用页,用户进入该网址之前的网页。%u 用户代理,表明浏览器类型的一串字符。%K TLS 加密设置。 (In Apache LogFormat: %{SSL_PROTOCOL}x).%k TLS 加密设置。 (In Apache LogFormat: %{SSL_CIPHER}x).%M 服务器响应类型。 (In Apache LogFormat: %{Content-Type}o)%D 服务器响应时间,单位:微秒。%T 服务器响应时间,单位:秒,精确到毫秒。%L 服务器响应时间,单位:毫秒。%n 服务器响应时间,单位:纳秒。%^ 忽略这个字段。%~ 向后移动到一个非空字段。~h 从X-Forwarded-For中读取的客户端IP,v4或v6。
我之前在这篇文章中自定义了Nginx日志,增加了IP和归属地字段。下面就以我自定义的日志格式为例,说明如何配置Goaccss。
US 52.167.144.145 [03/Jan/2025:14:15:31 +0800] GET /article/1111 HTTP/1.1 404 2246 - Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm) Chrome/116.0.1938.76 Safari/537.36这行日志可以拆分为以下几个部分:US IP归属地,没有对应的字段,忽略。%^52.167.144.145 客户端IP地址。%h03/Jan/2025 请求日期。%d14:15:31 请求时间。%t+0800 服务器时区,忽略。%^GET 请求方法。%m/article/1111 请求路径。%UHTTP/1.1 协议。%H404 服务器状态码。%s2246 服务器返回的大小。%b- 引用页,这个请求的引用页为空,所以此处是一个短横线。%RMozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko;compatible;bingbot/2.0;+http://www.bing.com/bingbot.htm) Chrome/116.0.1938.76 Safari/537.36 用户代理。%u
如果你的goacces版本大于等于1.6.1,就可以用时间戳。--datetime-format='%d/%b/%Y:%H:%M:%S %z'(日/月/年:时:分:秒 时区)
goaccess /home/wwwlogs/web.log -o /home/wwwroot/report.html --log-format='%^ %h [%x] %m %U %H %s %b %R %u' --datetime-format='%d/%b/%Y:%H:%M:%S %z'Goacces版本小于1.6.1要单独定义日期和时间。
goaccess /home/wwwlogs/web.log -o /home/wwwroot/report.html --log-format='%^ %h [%d:%t %^] %m %U %H %s %b %R %u' --date-format='%d/%b/%Y' --time-format='%H:%M:%S'命令测试正常,就可以把格式写入配置文件/etc/goaccess/goaccess.conf了。
date-format %d/%b/%Y
time-format %H:%M:%S
log-format %^ %h [%d:%t %^] %m %U %H %s %b %R %u总结
总是,就是要一一对应,每个字段的值要让程序能够正确识别,出现Token '/article/201' doesn't match specifier '%s' 之类的错误,就看看对应的字段是否合适。
本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。
FLY2X