使用GoAccess对Nginx日志进行分析
|Word Count:940|Reading Time:3mins|Post Views:
GoAccess是一个用C语言编写的Web日志分析工具,具有快速、高效、漂亮且支持多种Web服务端特性的且仍在保持快速进化的特点。它不仅可以在终端展现Web Server的日志分析结果,也可以将结果输出成为具有现代外观的HTML展示页面。
2021.09 北京怀柔 日出东方凯宾斯基酒店
功能
- 完全实时:所有指标在终端上每 200 毫秒更新一次,在 HTML 输出上每秒更新一次。
- 跟踪应用程序响应时间:跟踪服务请求所需的时间。如果你想跟踪减慢了网站速度的网页,则非常有用。
- 访问者:按小时或日期确定最慢运行的请求的点击量、访问者数、带宽数和指标。
- 按虚拟主机的度量标准:如果有多个虚拟主机(
Server
),它提供了一个面板,可显示哪些虚拟主机正在消耗大部分 Web 服务器资源。
安装
Goaccess现在已经可以在主流Linux发行版中直接安装了。当然,你也可以获取它的源代码,根据实际需要进行编译部署。
编译
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| # 默认编译参数 # 下载源码安装 $ 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
# git拉取源码安装 $ git clone https://github.com/allinurl/goaccess.git $ cd goaccess $ autoreconf -fi $ ./configure --enable-utf8 --enable-geoip=mmdb $ make # make install
|
包管理
1 2 3 4
| # Fedora 或者 开启epel库 yum install goaccess # Ubuntu apt-get install goaccess
|
Docker
1 2 3 4 5 6
| docker pull allinurl/goaccess
# 输出静态页面 cat access.log | docker run --rm -i -e LANG=$LANG allinurl/goaccess -a -o html --log-format COMBINED - > report.html # 动态实时显示 tail -F access.log | docker run -p 7890:7890 --rm -i -e LANG=$LANG allinurl/goaccess -a -o html --log-format COMBINED --real-time-html - > report.html
|
使用
配置参数
1 2 3 4 5
| # 需要配置的参数 time-format %H:%M:%S date-format %d/%b/%Y log-format %h %^[%d:%t %^] "%r" %s %b "%R" "%u" geoip-database /usr/share/GeoIP/dbip-country-lite-2024-11.mmdb
|
需要注意的是地图展示,需要下载mmdb地理信息包。其默认配置表中的地理信息数据库是商用的。因为我们其实没有那么高的需求,使用免费版本即可。下载链接如下:DB-IP国别信息数据库。额外注意,下载的时候需要点击同意它的使用授权。
效果示意:
终端使用
1 2
| # 使用tab键来切换标签页 goaccess -c /var/log/access.log
|
- 可以按照日志格式进行输出,可以看到有命令格式提示
- 页面展示
输出页面
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| # 输出默认界面 goaccess access.log -o report.html --log-format=COMBINED
# 输出中文界面 LC_TIME="zh_CN.UTF-8" bash -c 'goaccess access.log --log-format=COMBINED -o report.html '
# 指定格式输出到指定页面 # -a 指定列出user-agents信息 # -d 输出IP解析信息 # -p 指定配置文件 # -f 指定输入原始日志文件 # -o 指定输出展示页面文件 goaccess -a -d -f /var/log/nginx/blog.access.log -o /opt/blog/source/html/access.html
# 多个日志同时输出 goaccess access.log access.log.1 access.log.2 -o report.html --log-format=COMBINED cat access.log.2 | goaccess access.log access.log.1 -
# 日志压缩包的输出 zcat access.log.*.gz | goaccess access.log -
|
实时输出
1 2 3 4 5 6 7 8
| # 将goaccess作为后台进程来持续实时输出 goaccess access.log -o report.html --log-format=COMBINED --real-time-html --daemonize # 指定使用其他端口 goaccess access.log -o report.html --real-time-html --daemonize --port=9870 # 指定其他服务器的goaccess来进行分析 ssh -n root@server 'tail -f /var/log/apache2/access.log' | goaccess - # 多个网卡,指定其中一个或指定仅本地访问 goaccess access.log -o report.html --real-time-html --addr=127.0.0.1
|