GoAccess
是一个开源的实时Web日志分析器
和交互式查看器
,可在*nix系统上的终端或通过浏览器运行。它为系统管理员提供了实时而有价值的HTTP统计信息。
HTML Dashboard
GoAccess
被设计为一种基于终端的快速日志分析器。它的核心思想是无需使用浏览器就可以快速实时地实时分析和查看Web服务器统计信息(如果您想通过SSH快速分析访问日志,或者只是喜欢在终端中工作,那将是一个很好的选择)。
终端输出是默认输出,但它具有生成完整的,独立的实时 HTML
报告以及 JSON
和 CSV
报告的功能。
GoAccess
解析指定的Web日志文件,并将数据输出到X终端。功能包括:
B + Tree
数据库增量处理日志。ncurses
作为依赖项GoAccess允许任何自定义日志格式字符串。使用 -log-format
参数指定日志格式,预定义的选项包括但不限于:
GoAccess 支持三种类型的存储方式。请根据你的需要和系统环境进行选择。
$ 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
$ echo "deb https://deb.goaccess.io/ $(lsb_release -cs) main" | sudo tee -a /etc/apt/sources.list.d/ goaccess.list
$ wget -O - https://deb.goaccess.io/gnugpg.key | sudo apt-key add -
$ sudo apt-get update
$ sudo apt-get install goaccess
注意事项:
sudo apt-get install goaccess-tcb
.deb
官方仓库中的软件包也可以通过HTTPS获得。您可能需要安装 apt-transport-https
$ yum install goaccess -y
$ brew install goaccess
$ goaccess access.log
$ goaccess --log-format=COMBINED access.log -a > report.html
$ goaccess --log-format=COMBINED access.log -a -d -o json > report.json
$ goaccess --log-format=COMBINED access.log --no-csv-summary -o csv > report.csv
$ tail -f access.log | goaccess -
tail -f
和匹配模式的工具,如grep
,awk
,sed
,等:
$ tail -f access.log | grep -i --line-buffered 'firefox' | goaccess --log-format=COMBINED -
$ tail -f -n +0 access.log | grep -i --line-buffered 'firefox' | goaccess -o report.html --real-time-html -
$ goaccess access.log access.log.1
$ goaccess --log-format=COMBINED access.log -o /usr/share/nginx/html/your_site/report.html --real-time-html
有两种方法自定义配置日志格式。最简单的方式是运行 GoAccess 时使用 -c
显示一个配置窗口。但是这种方式不是永久有效的,因此你需要在配置文件中设定格式。
配置文件位于:%sysconfdir%/goaccess.conf
或者 ~/.goaccessrc
注意
:%sysconfdir%
可能是 /etc/
, /usr/etc/
或者 /usr/local/etc/
time-format
参数 time-format 后跟随一个空格符,指定日志的时间格式,包含普通字符与特殊格式说明符的任意组合。他们都由百分号 (%)开始。参考 man strftime
。%T 或者 %H:%M:%S
注意
:如果给定的时间戳以微秒计算,则必须在 time-format 中使用参数 %f
。
date-format
参数 date-format 后跟随一个空格符,指定日志的日期格式,包含普通字符与特殊格式说明符的任意组合。他们都由百分号 (%)开始。参考 man strftime
。
注意
:如果给定的时间戳以微秒计算,则必须在 date-format 中使用参数 %f
。
log-format
参数 log-format 后跟随一个空格符或者制表分隔符(\t
),用于指定日志字符串格式。
特殊格式说明符
:
%x
匹配 time-format 和 date-format 变量的日期和时间字段。用于使用时间戳来代替日期和时间两个独立变量的场景。%t
匹配 time-format 变量的时间字段。%d
匹配 date-format 变量的日期字段。%v
根据 canonical 名称设定的服务器名称(服务区或者虚拟主机)。%e
请求文档时由 HTTP 验证决定的用户 ID。%h
主机(客户端IP地址,IPv4 或者 IPv6)。%r
客户端请求的行数。这些请求使用分隔符(单引号,双引号)引用的部分可以被解析。否则,需要使用由特殊格式说明符(例如:%m
, - %U
, %q
和 %H
)组合格式去解析独立的字段。注意
: 既可以使用 %r
获取完整的请求,也可以使用 %m
, %U
, %q
and %H
去组合你的请求,但是不能同时使用。%m
请求的方法。%U
请求的 URL。注意
: 如果查询字符串在 %U
中,则无需使用 %q
。但是,如果 URL 路径中没有包含任何查询字符串,则你可以使用 %q
查询字符串将附加在请求后面。%q
查询字符串。%H
请求协议。%s
服务器回传客户端的状态码。%b
回传客户端的对象的大小。%R
HTTP 请求的 "Referer" 值。%u
HTTP 请求的 "UserAgent" 值。%D
处理请求的时间消耗,使用微秒计算。%T
处理请求的时间消耗,使用带秒和毫秒计算。%L
处理请求的时间消耗,使用十进制数表示的毫秒计算。%^
忽略此字段。%~
继续解析日志字符串直到找到一个非空字符(!isspace)。~h
在 X-Forwarded-For (XFF) 字段中的主机(客户端 IP 地址,IPv4 或者 IPv6)。每一个活动面板上最多有 366 个对象,如果是实时 HTML 报告则为 50 个对象。对象上限可以通过最大对象数自定义,但是只有 CSV 和 JSON 格式的输出允许超过默认值,即 366 对象每面板。
在使用磁盘B+树(使用参数 --keep-db-files
和 --load-from-disk
)加载了同一个日志两次,则 GoAccess 会将每个请求也计算两次。问题#334 详细说明了此问题。
一次访问就是一次请求(访问日志中的每一行),例如,10 次请求 = 10 次访问。具有相同 IP,日期,和 UserAgent 的 HTTP 请求将被认为是一个独立访问。