网站日志分析利器goaccess部署安装教程

GoAccess 还支持生成完整的实时 HTML 报告 (这对分析、监控以及数据可视化都是极好的),以及 JSON 和 CSV 格式的报告。

https://wd-jishu.oss-cn-hangzhou.aliyuncs.com/img/image-20240307091812042.png@!full

  • 快速, 实时, 毫秒 / 秒级更新, C 语言编写
  • 仅依赖 ncurses 模块
  • 几乎支持所有 Web 日志 格式 (Apache, Nginx, Amazon S3, Elastic Load Balancing, CloudFront, 等等)
  • 简单设置即可支持自定义格式日志
  • 漂亮的终端以及 bootstrap 风格控制面板 (易于将 GoAccess 调整为您自己的颜色搭配和风格)
  • 当然,我们还支持 Valgrind 测试。
  • 完全实时:所有面板以及指标均按照指定时间间隔更新,在终端 (Terminal) 下是 200ms,HTML 则是每秒。
  • 支持几乎所有 Web 日志格式:GoAccess 允许任意自定义日志格式。 可预定义的格式包括: Apache, Nginx, Amazon S3, Elastic Load Balancing, CloudFront, 等等
  • 跟踪应用响应时间:跟踪处理请求的时间消耗。对于解决站点页面访问速度下降非常有用。
  • 增长日志处理:需要持续保持数据?GoAccess 有能力处理在磁盘上以 B+Tree 数据库存储并且不断增长的日志。
  • 仅依赖一个模块:GoAccess 是用 C 语言编写的。 仅仅需要 ncurses 这一个模块即可运行。同时 GoAccess 甚至还拥有自己的兼容 RFC6455 协议的 Web Socket 服务器。
  • 易于使用:您可以直接运行 GoAccess 去处理您的访问日志文件,仅需选取日志格式然后让 GoAccess 解析日志内容并将统计结果展示出来。
  • 访客画像:可以按照小时或者指定日期确定最慢请求的访问次数,访客数量,带宽以及其他相关度量值。
  • 支持虚拟主机:拥有多个虚拟主机?在控制面板中能够显示出哪一个虚拟主机消耗 Web 服务器上最多的资源。
  • 配色风格可定制:GoAccess 的配色风格十分易于定制化。无论是通过终端,还是仅仅通过简单修改 HTML 页面的层叠样式表。

GoAccess can be compiled and used on *nix systems.

Download, extract and compile GoAccess with:

1
2
3
4
5
6
$ wget https://tar.goaccess.io/goaccess-1.9.1.tar.gz
$ tar -xzvf goaccess-1.9.1.tar.gz
$ cd goaccess-1.9.1/
$ ./configure --enable-utf8 --enable-geoip=mmdb
$ make
# make install

GoAccess has minimal requirements, it’s written in C and requires only ncurses. However, below is a table of some optional dependencies in some distros to build GoAccess from source.

DistroNCursesGeoIP (opt)GeoIP2 (opt)OpenSSL (opt)
Ubuntu/Debianlibncursesw6-devlibgeoip-devlibmaxminddb-devlibssl-dev
RHEL/CentOSncurses-develgeoip-devellibmaxminddb-developenssl-devel
Archncursesgeoiplibmaxminddbopenssl
Gentoosys-libs/ncursesdev-libs/geoipdev-libs/libmaxminddbdev-libs/openssl
SlackwarencursesGeoIPlibmaxminddbopenssl

Note: You may need to install build tools like gcc, autoconf, gettext, autopoint etc. for compiling/building software from source. e.g., base-devel, build-essential, "Development Tools".

1
# apt-get install goaccess

Note: It is likely this will install an outdated version of GoAccess. To make sure that you’re running the latest stable version of GoAccess see alternative option below.

1
2
3
4
5
6
$ wget -O - https://deb.goaccess.io/gnugpg.key | gpg --dearmor \
    | sudo tee /usr/share/keyrings/goaccess.gpg >/dev/null
$ echo "deb [signed-by=/usr/share/keyrings/goaccess.gpg arch=$(dpkg --print-architecture)] https://deb.goaccess.io/ $(lsb_release -cs) main" \
    | sudo tee /etc/apt/sources.list.d/goaccess.list
$ sudo apt-get update
$ sudo apt-get install goaccess

Note:

  • .deb packages in the official repo are available through HTTPS as well. You may need to install apt-transport-https.
1
# yum install goaccess
1
# pacman -S goaccess
1
# emerge net-analyzer/goaccess
1
# brew install goaccess
1
2
# cd /usr/ports/sysutils/goaccess/ && make install clean
# pkg install sysutils/goaccess
1
2
# cd /usr/ports/www/goaccess && make install clean
# pkg_add goaccess
1
2
# zypper ar -f obs://server:http http
# zypper in goaccess
1
# pkg install goaccess
1
# pkgin install goaccess

GoAccess can be used in Windows through Cygwin. See Cygwin’s packages. Or through the GNU+Linux Subsystem on Windows 10.

对于 Web 服务器的日志输出,是由我们指定的,既可以更多的记录站点的信息也可以大致的做一下记录。当然,最重要信息肯定也是必不可少的。如下,列出了比较重要的日志记录信息。

  • IP 地址
  • 用户访问时间戳
  • 请求方式
  • URL 地址
  • 浏览器版本
  • 服务器返回状态
  • 返回字节长度
  • referer
  • UserAgent

通过对于 Nginx 日志的分析,我们可以得到很多东西,不只是我下面表格列出的这几条。分析得到的结果,可以有助于我们来优化网站性能、统计网站访问量以及实时展示有很大的帮助。

编号获取到的内容如果统计如何展示
1平均时间的流量sumline char
2平均响应时间sumline char
3top 10 URLcountbar chat
4top 10 IPcountbar char
5top 10 UserAgentcountbar char
6响应状态的分布group bypie chat or stack chat
7UserAgent 的分布group bypie chat or stack chat
8HTTP 版本的分布group bypie chat or stack chat

一般的选择COMBINED

–log-format=COMBINED

1
%h %l %u %t "%r" %>s %b "%{Referer}i" "%{User-Agent}i"

各个字段含义如下:

  • %h: 客户端 IP 地址
  • %l: 远程登录名(在大多数现代设置中通常为空 -
  • %u: 已认证的用户(如果适用的话,否则也是 -
  • %t: 时间戳,通常是 [%d/%b/%Y:%H:%M:%S %z] 或类似的格式
  • "%r": 请求行,包括方法、URI 和协议版本
  • %>s: 响应状态码
  • %b: 发送给客户端的响应体大小(不包括头部),以字节表示;如果未知,则显示 -
  • "%{Referer}i": 请求头中的 Referer 字段内容
  • "%{User-Agent}i": 请求头中的 User-Agent 字段内容

对于 Nginx,它的默认 Combined 日志格式可能稍有不同,但与这个格式非常相似:

Code

1
1"$remote_addr - $remote_user [$time_local] "$request" $status $body_bytes_sent "$http_referer" "$http_user_agent"'

GoAccess 使用 --log-format=COMBINED 选项时,会自动识别这种标准格式,并能正确解析基于此格式的日志文件。

1
2
3
4
5
log_format 2urs '$remote_addr - [$geoip2_data_country_enlog] $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" $http_x_forwarded_for'
'$upstream_addr $upstream_response_time $request_time '; 
实际日志:119.123.35.231 - [China] - [21/Feb/2024:21:41:49 +0800] "GET /lib/sharer/sharer.min.js HTTP/2.0" 304 0 "https://2urs.com/eset-nod32-la2urs-key-2024-02-18-part2/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36" -- - 0.000
1
LANG="zh_CN.UTF-8" bash -c "/usr/local/bin/goaccess /usr/local/nginx/logs/test.log --log-format='%h - [%v] %^[%d:%t %z] "%r" %>s %b "%R" "%u" %^ %^ %T' --date-format=%d/%b/%Y --time-format=%H:%M:%S --geoip-database=/usr/share/GeoIP/GeoLite2.mmdb -o /xxxx/webhome/log.html"

参考:

基于 Amazon Security Lake 打造统一日志分析平台 方案设计与实践 | 亚马逊AWS官方博客

可视化GC日志分析工具 — 我的技术知识分享 (niocoder.com)

打造一款日志分析工具 - FreeBuf网络安全行业门户

随机文章