介紹
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 -