Total Pageviews

5,390,124

Thursday, 20 March 2025

GoAccess 是一个开源的实时 Web 日志分析工具

它能够将 Web 服务器的访问日志转换成易于阅读的报告和交互式仪表板。

官方网址-https://goaccess.io/

    支持多种日志格式,并提供了许多功能,如过滤、排序、统计等,使用户可以深入了解其网站的流量和访问情况。
    还支持在终端中实时监控日志流,这使得它成为一种快速轻便的实时监控工具。
    可以以图像化的方式通过WebSoxket协议实时的把access.log的变迁反应到浏览器提供查看

安装
从软件源安装

注意

不是所有发行版都提供最新的 goaccess 版本,有些软件库中只有 1.3 版本

# 安装
yum install goaccess

# 或使用
sudo apt-get install goaccess


手动安装

官方最新版本指引-https://goaccess.io/download

#  从 GoAccess 的官方网站下载源代码包。
wget https://tar.goaccess.io/goaccess-1.7.1.tar.gz
# 解压缩源代码包。
tar -xzvf goaccess-1.7.1.tar.gz

cd goaccess-1.7.1/

# 安装依赖
yum install ncurses ncurses-devel

# 增加对 utf8 支持
# 增加对 geoip 数据库,支持,类型为 mmdb(geoip2)
# socket server 添加 opessl 支持(ws-url)
./configure --enable-utf8 --enable-geoip=mmdb --with-openssl
make
make install

将安装路径添加到 $PATH 环境变量

# vim ~/.bashrc
export PATH="/home/goaccess:$PATH"

这样就可以直接在命令行调用 goaccess 了

image.png

相关信息

./config 过程可能会出现缺少依赖的情况

请根据具体提示安装相应的库

# configure: error: ssl library missing
sudo yum install openssl-devel

# configure: error:
# *** Missing development files for libmaxminddb library.
sudo yum install libmaxminddb-devel

# configure: error: *** Missing development libraries for ncursesw
sudo yum install ncurses-devel

基本使用
配置文件常用配置

    goaccess 在启动的时候也可以使用 命令参数 --param="xxx" 来补充本次运行的配置

如果是每次运行都使用相同的参数,则可以直接写在配置文件中,这样可以很方便的启动

默认配置文件路径:/etc/goaccess/goaccess.conf

# 指定了时间格式
time-format %H:%M:%S

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

# 日志文件的格式,与分析的日志文件格式对应。例如 access.log
# 与 access.log 的 log_format 格式对应,每个参数以空格或者制表符分割
log-format %h %^[%d:%t %^] "%r" %s %b "%R" "%u" %^ %T %^

# 启用实时 HTML 输出模式
real-time-html true

# 监听端口
port 7890

# 存放 goaccess html 目录
output /home/goaccess/

# https 相关
ssl-cert
ssl-key
ws-url

log-format 说明

    如果没有改动过 Apache 或者 nginx 等的日志格式,则可以使用默认 log-format 值

    Apache 的默认值为 COMBINED
    nginx 的默认值为Nginx

    如果自定义了日志格式,则需要自己对应填写匹配的 log-format

GoAccess日志格式变量    nginx日志格式变量    变量说明
%h    $remote_addr    主机(客户端的 IPv4 或 IPv6 地址)
%d:%t    $time_local    访问日期和时间(服务器本地时间)
%r    $request    客户端的请求路径(location)
%M    $sent_http_content_type    请求的资源类型(MIME-type)
%s    $status    服务器返回客户端的状态代码
%b    $body_bytes_sent    对象返回客户端的大小
%T    $request_time    服务器响应请求的时间(毫秒计量)
%K    $ssl_protocol    建立连接的 TLS 加密协议类型
%k    $ssl_cipher    建立连接的 TLS 加密算法类型
%R    $http_referer    请求标头中的来源(Referer)信息
%u    $http_user_agent    请求标头中的 user-agent 信息
%v    $host    虚拟主机名称
%e    $remote_user    通过 HTTP 身份认证访问网站的用户标识
%C    $upstream_cache_status    服务器返回对象的缓存状态
启动 goaccess

goaccess /var/log/nginx/access.log  -o /home/goaccess/index.html --real-time-html --config-file=/etc/goaccess/goaccess.conf --daemonize

    --real-time-html:启用实时 HTML 输出模式。
    -o /home/goaccess/index.html:将报告保存到指定的 HTML 文件路径。
    --daemonize:启用守护进程模式,在后台运行 GoAccess。

启动后
退出 goaccess

如果使用了后台运行,退出运行可以找到端口占用, kill 掉

# 这里 7890 为设置的端口
lsof -i:7890

# kill 掉程序
kill [pid]

高级使用
汉化

goaccess 默认使用系统默认语言

    根据使用的系统,安装中文语言包

    修改系统默认语言(可选,此处以 Centos 为例)

# 查看当前语言
echo $LANG

# 查看系统支持的语言
locale -a

# 修改文件中语言为 zh_CN.UTF-8
vim /etc/locale.conf

# 应用语言更改
source /etc/locale.conf

# 查看当前语言
echo $LANG

    重新启动 goaccess

如果启动后仍然没有改变语言,可以在启动命令后增加LC_TIME=zh_CN.utf8
更详细的日志

# nginx.conf

log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                  '$sent_http_content_type $status $body_bytes_sent '
                  '$request_time $ssl_protocol/$ssl_cipher "$http_referer" '
                  '"$http_user_agent" "$http_x_forwarded_for"';

# goaccess.conf

log-format %h %^[%d:%t %^] "%r" %M %s %b %T %K/%k "%R" "%u"

反向代理

# nginx.conf

location /goaccess {
    alias /home/goaccess/;
    index index.html;
}

收集详细 ip 归属地区

需要地理位置功能,可以先去下个geoip数据包 https://dev.maxmind.com/geoip/geoip2/geolite2/

# goaccess.conf

geoip-database /usr/share/GeoIP/GeoLite2-City.mmdb

No comments:

Post a Comment