
注: 本文来自https://www.fandenggui.com/post/goaccess-log-analyzer.html
什么是 GoAccess
GoAccess是一个开源的实时网络日志分析器和交互式查看器,可在*nix系统的终端或浏览器中运行。
为什么选择 GoAccess
GoAccess 被设计成一个快速的、基于终端的日志分析器。它的核心思想是快速分析和查看web服务器统计数据,而无需使用浏览器。虽然终端输出是默认输出,但它有能力生成完整的实时HTML报告(用于分析、监视和数据可视化),以及JSON和CSV报告。
关键特性
- 快速,实时,毫秒/秒级更新,C语言编写
- 只有一个依赖ncurses
- 几乎所有的WEB日志格式 (比如:Apache, Nginx, Amazon S3, Elastic Load Balancing, CloudFront, etc)
- 简单地设置日志格式并在日志中运行它
- 漂亮的终端和引导指示板
完整的特性见:Features
安装
RHEL/CENTOS 直接yum安装
yum install GeoIP-devel -y
yum install glib2 glib2-devel GeoIP-devel ncurses-devel zlib zlib-devel -y
yum install goaccess -y
或者编译安装
wget http://tar.goaccess.io/goaccess-1.2.tar.gz
tar -xzvf goaccess-1.2.tar.gz
cd goaccess-1.2/
./configure --enable-utf8 --enable-geoip=legacy
make
make install
更多细节见:官网
使用说明
这里我以分析自定义过的nginx日志为例,分析某一天的日志访问信息。
语法
goaccess [filename] [ options ... ] [-c][-M][-H][-q][-d][...]
选项
可以通过命令行指定,也可以配置到文件中,这里我建议配置在文件中,默认的配置文件是/etc/goaccess.conf
LOG/DATE/TIME 格式化
下面是根据自定义nginx日志格式后的对比说明,不过scheme请求协议用%H解析时有点问题,这里用%^忽略了。
time-format %H:%M:%S
date-format %d/%b/%Y
# NGINX LOG FORMART
# log_format main '$http_host $remote_addr - $remote_user [$time_local] '
# %^ %h %^ %^ [%d/%b/%Y:%H:%M:%S +0800]
# '$scheme "$request" $status $bytes_sent "$http_referer" '
# %H "%r" %s %b "%R"
# '"$http_user_agent" "$http_x_forwarded_for" "$gzip_ratio" $request_time '
# "%u" %^ %^ %T
# '$upstream_addr $upstream_status $upstream_response_time';
# %^ %^ %^
log-format %^ %h %^ %^ [%d:%t %^] %^ "%r" %s %b "%R" "%u" %^ %^ %T %^ %^ %^
默认配置中修改LOG/DATE/TIME FORMAT三处字段就可以使用了。
%t 匹配time-format格式的时间字段
%d 匹配date-format格式的日期字段
%h host(客户端ip地址,包括ipv4和ipv6)
%r 来自客户端的请求行
%m 请求的方法
%U URL路径
%H 请求协议
%s 服务器响应的状态码
%b 服务器返回的内容大小
%R HTTP请求头的referer字段
%u 用户代理的HTTP请求报头
%D 请求所花费的时间,单位微秒
%T 请求所花费的时间,单位秒
%^ 忽略这一字段
执行下面的命令生成日志的分析报告
goaccess -f fandenggui.com.log -a -o result.html
$ goaccess -h
# 常用参数
-a --agent-list 启用由主机用户代理的列表。为了更快的解析,不启用该项
-d --with-output-resolver 在HTML/JSON输出中开启IP解析,会使用GeoIP来进行IP解析
-f --log-file 需要分析的日志文件路径
-p --config-file 配置文件路径
-o --output 输出格式,支持html、json、csv
-m --with-mouse 控制面板支持鼠标点击
-q --no-query-string 忽略请求的参数部分
--real-time-html 实时生成HTML报告
--daemonize 守护进程模式,--real-time-html时使用
更多细节见:Man Page
具体有什么错误提示?