目录

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

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

image-20240307091812042

  • 快速, 实时, 毫秒 / 秒级更新, 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:

$ 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.

Distro NCurses GeoIP (opt) GeoIP2 (opt) OpenSSL (opt)
Ubuntu/Debian libncursesw6-dev libgeoip-dev libmaxminddb-dev libssl-dev
RHEL/CentOS ncurses-devel geoip-devel libmaxminddb-devel openssl-devel
Arch ncurses geoip libmaxminddb openssl
Gentoo sys-libs/ncurses dev-libs/geoip dev-libs/libmaxminddb dev-libs/openssl
Slackware ncurses GeoIP libmaxminddb openssl

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".

# 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.

$ 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.
# yum install goaccess
# pacman -S goaccess
# emerge net-analyzer/goaccess
# brew install goaccess
# cd /usr/ports/sysutils/goaccess/ && make install clean
# pkg install sysutils/goaccess
# cd /usr/ports/www/goaccess && make install clean
# pkg_add goaccess
# zypper ar -f obs://server:http http
# zypper in goaccess
# pkg install goaccess
# 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 平均时间的流量 sum line char
2 平均响应时间 sum line char
3 top 10 URL count bar chat
4 top 10 IP count bar char
5 top 10 UserAgent count bar char
6 响应状态的分布 group by pie chat or stack chat
7 UserAgent 的分布 group by pie chat or stack chat
8 HTTP 版本的分布 group by pie chat or stack chat

一般的选择COMBINED

–log-format=COMBINED

%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"$remote_addr - $remote_user [$time_local] "$request" $status $body_bytes_sent "$http_referer" "$http_user_agent"'

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

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
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网络安全行业门户