网站日志分析利器goaccess部署安装教程
1 goaccesss特色:
GoAccess 还支持生成完整的实时 HTML 报告 (这对分析、监控以及数据可视化都是极好的),以及 JSON 和 CSV 格式的报告。
1.0.1 关键功能 —完整功能列表
- 快速, 实时, 毫秒 / 秒级更新, C 语言编写
- 仅依赖 ncurses 模块
- 几乎支持所有 Web 日志 格式 (Apache, Nginx, Amazon S3, Elastic Load Balancing, CloudFront, 等等)
- 简单设置即可支持自定义格式日志
- 漂亮的终端以及 bootstrap 风格控制面板 (易于将 GoAccess 调整为您自己的颜色搭配和风格)
- 当然,我们还支持 Valgrind 测试。
1.0.2 特色功能速览…
- 完全实时:所有面板以及指标均按照指定时间间隔更新,在终端 (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 页面的层叠样式表。
2 goaccess安装部署
2.1 Build from release
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"
.
2.1.1
2.1.2 Debian/Ubuntu
# 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.
2.1.3 Official GoAccess Debian & Ubuntu repository
$ 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 installapt-transport-https
.
2.1.4 Fedora
# yum install goaccess
2.1.5 Arch
# pacman -S goaccess
2.1.6 Gentoo
# emerge net-analyzer/goaccess
2.1.7 OS X / Homebrew
# brew install goaccess
2.1.8 FreeBSD
# cd /usr/ports/sysutils/goaccess/ && make install clean
# pkg install sysutils/goaccess
2.1.9 OpenBSD
# cd /usr/ports/www/goaccess && make install clean
# pkg_add goaccess
2.1.10 openSUSE
# zypper ar -f obs://server:http http
# zypper in goaccess
2.1.11 OpenIndiana
# pkg install goaccess
2.1.12 pkgsrc (NetBSD, Solaris, SmartOS, …)
# pkgin install goaccess
2.1.13 Windows
GoAccess can be used in Windows through Cygwin. See Cygwin’s packages. Or through the GNU+Linux Subsystem on Windows 10.
3
3.1 解析日志文件
对于 Web
服务器的日志输出,是由我们指定的,既可以更多的记录站点的信息也可以大致的做一下记录。当然,最重要信息肯定也是必不可少的。如下,列出了比较重要的日志记录信息。
IP
地址- 用户访问时间戳
- 请求方式
URL
地址- 浏览器版本
- 服务器返回状态
- 返回字节长度
referer
UserAgent
3.2 3.2 分析日志文件
通过对于 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 |
4 goaccess日志格式
一般的选择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
选项时,会自动识别这种标准格式,并能正确解析基于此格式的日志文件。
5 定制goaccess日志格式
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官方博客