介绍
goaccess 是一个在本地解析日志的工具, 可以直接在命令行终端环境中使用 TUI 界面查看分析结果, 也可以导出为更加丰富的 HTML 页面. 官网:
https://goaccess.io/
下载安装
常见的 Linux 包管理器中都包含了 goaccess, 直接安装就行. 以 Ubuntu 为例:
sudo apt install -y goaccss
如果使用 Amazon Linux 2023, 官方的 Repo 里面并不包含 goaccess, 需要手动下载编译安装:
dnf install -y libmaxminddb-devel
wget https://tar.goaccess.io/goaccess-1.9.4.tar.gz
tar -xzvf goaccess-1.9.4.tar.gz
cd goaccess-1.9.4/
./configure --enable-utf8 --enable-geoip=mmdb
make
make install
注意, 如果不先安装
libmaxminddb-devel
依赖, 那么在配置的时候则会遇到下面的错误:
configure: error:*** Missing development files for libmaxminddb library.
安装成功后检查版本信息:
# goaccess --version
GoAccess - 1.9.4.
For more details visit: https://goaccess.io/
Copyright (C) 2009-2024 by Gerardo OrellanaBuild configure arguments:--enable-utf8--enable-geoip=mmdb
基本使用
- 分析本地 nginx 的访问日志
goaccess /var/log/nginx/access.log
日志格式选择第一个 NCSA Combined Log Format
加载出来的分析结果:
按 Tab 键可以在不同的类目中进行跳转切换
按回车可以展开当前类目显示更多详情
查看 IP 归属地
需要先下载 IP 地址归属地数据库 GeoLite2, 下面用的是精准到国家一级:
wget https://cdn.jsdelivr.net/npm/geolite2-country/GeoLite2-Country.mmdb.gz
gunzip GeoLite2-Country.mmdb.gz
如果需要精准到城市级别:
wget https://cdn.jsdelivr.net/npm/geolite2-city/GeoLite2-City.mmdb.gz
gunzip GeoLite2-City.mmdb.gz
如果直接访问 jsdelivr 有困难, 可以用下面的国内镜像地址:
- Country
https://cdn.jsdmirror.cn/npm/geolite2-country/GeoLite2-Country.mmdb.gz - City
https://cdn.jsdmirror.cn/npm/geolite2-city/GeoLite2-City.mmdb.gz
有了数据库文件后, 再使用参数启动 goaccess:
goaccess --geoip-database=GeoLite2-Country.mmdb /var/log/nginx/access.log
此时分析结果中会多出来一个 Geo Location 的类目, 展开就可以查看日志中对应的客户端 IP 归属国家/城市(取决于传入命令的数据库)
批量打开所有已归档的日志
首先需要编辑配置文件 /etc/goaccess/goaccess.conf
指定默认的时间日期以及日志格式, 找到下面行内容取消注释, 或者直接在文件末尾追加下面内容:
time-format %H:%M:%S
date-format %d/%b/%Y
log-format %h %^[%d:%t %^] "%r" %s %b "%R" "%u"
再配合管道符批量打开所有日志:
zcat /var/log/nginx/access.log.*.gz | goaccess --geoip-database=/root/GeoLite2-Country.mmdb /var/log/nginx/access.log -