GoAccess日志分析教程,以Nginx日志为例

在网站运营中,日志分析还是挺重要的,它可以帮我们了解用户行为和可能存在的性能问题。GoAccess 作为一款轻量级且功能强大的实时Web日志分析工具,因其简洁的命令行操作和直观的可视化界面而广受欢迎。本文将以 Nginx 日志为例,详细介绍如何使用 GoAccess 进行日志分析。

安装 GoAccess

  • 通过源码编译安装
    wget https://tar.goaccess.io/goaccess-1.9.3.tar.gz
    tar -xzvf goaccess-1.9.3.tar.gz
    cd goaccess-1.9.3/
    ./configure --enable-utf8 --enable-geoip=mmdb
    make
    make install
    
  • 通过包管理器安装
    apt-get install goaccess
    

配置 GoAccess

GoAccess 的配置需要与 Nginx 日志的格式相匹配,否则运行的时候就会报错。以一个我自己常用的 Nginx 日志格式为例:

http {
    log_format main '"$request_time" $http_x_forwarded_for - $remote_addr [$time_local] '
                '"$request" $status $body_bytes_sent '
                '"$http_referer" "$http_user_agent"';
    access_log /var/log/nginx/access.log main;
}

实际日志内容就像这样:“0.046” 66.249.73.1 - 172.70.211.142 [10/Dec/2024:12:00:48 +0800] “GET / HTTP/2.0” 200 8116 “-” “Mozilla/5.0 (Linux; Android 6.0.1; Nexus 5X Build/MMB29P)”

GoAccess 配置文件一般在 /etc/goaccess/goaccess.conf 中,参照上面的 Nginx 日志格式,相对应的 GoAccess 配置需要如下:

#时间格式
time-format %H:%M:%S %z

# 日期格式
date-format %d/%b/%Y

# 日志格式
log-format "%T" %h - %h [%d:%t] "%r" %s %b "%R" "%u"

日志格式中说明符的简要解释:

  • “%T” 代表秒数对应日志中的 “0.046”
  • %h 代表客户端IP对应日志中的 66.249.73.1 和 172.70.211
  • [%d:%t] 代表日期对应日志中的 [10/Dec/2024:12:00:48 +0800]
  • “%r” 代表用户请求对应日志中的 “GET / HTTP/2.0”
  • %s %b 代表响应状态和字节数对应日志中的 200 8116
  • “%R” “%u” 代表 referer 和 user_agent 请求头对应日志中的 “-” “Mozilla/5.0 (Linux; Android 6.0.1; Nexus 5X Build/MMB29P)”

对应日志格式的说明符,想要详细了解的话,可以自行看下官方文档

分析 Nginx 日志, 生成 HTML 报告

通过命令行运行goaccess /var/log/nginx/access.log -o report.html,会在本地目录中生成 report.html 文件,直接在浏览器中打开,就可以看到相应的日志分析报告。