GoAccess
它是什么?
GoAccess是一个开源的实时Web日志分析器和交互式查看器,可在* nix系统上的终端中或通过 浏览器运行。它为需要实时可视服务器报告的系统管理员提供了快速而有价值的HTTP统计信息。有关更多信息,请访问:https : //goaccess.io。
特征
GoAccess解析指定的Web日志文件,并将数据输出到X终端。功能包括:
- 完全实时
所有终端和指标的时间安排是在终端输出上每200 ms更新一次,在HTML输出上每秒钟更新一次。 - 所需的最低配置
您可以仅对访问日志文件运行它,选择日志格式,然后让GoAccess解析访问日志并向您显示统计信息。 - 跟踪应用程序响应时间
跟踪服务请求所花费的时间。如果您要跟踪正在降低网站速度的页面,则非常有用。 - 几乎所有Web日志格式
GoAccess允许使用任何自定义日志格式字符串。预定义的选项包括Apache,Nginx,Amazon S3,Elastic Load Balancing,CloudFront等。 - 增量日志处理是否
需要数据持久性?GoAccess可以通过磁盘上的持久性选项逐步处理日志。 - 仅用
C编写了一个依赖项 GoAccess。要运行它,您仅需要ncurses作为依赖项。而已。它甚至具有自己的Web套接字服务器-http://gwsocket.io/。 - 访问者
按小时或日期确定运行最慢的请求的点击数,访问者,带宽和指标。 - 每个虚拟主机的指标
有多个虚拟主机(服务器块)?它具有一个面板,该面板显示哪个虚拟主机正在消耗大多数Web服务器资源。 - 颜色方案可定制的
Tailor GoAccess可以适合您自己的颜色口味/方案。通过终端,或者简单地在HTML输出上应用样式表。 - 对大型数据集的支持
由于其优化的内存哈希表,GoAccess具有解析大型日志的功能。它具有很好的内存使用率和相当不错的性能。该存储也支持磁盘上的持久性。 - Docker支持
能够从上游构建GoAccess的Docker映像。您仍可以使用卷映射和编辑对其进行完整配置goaccess.conf。请参阅 下面的Docker部分。
几乎所有的网络日志格式...
GoAccess允许任何自定义日志格式字符串。预定义的选项包括但不限于:
- Amazon CloudFront(下载发行版)。
- 亚马逊简单存储服务(S3)
- AWS弹性负载平衡
- 组合日志格式(XLF / ELF)Apache Nginx的
- 通用日志格式(CLF)Apache
- Google云端存储。
- Apache虚拟主机
- Squid本机格式。
- W3C格式(IIS)。
为什么选择GoAccess?
GoAccess被设计为基于终端的快速日志分析器。它的核心思想是无需使用浏览器就可以快速实时地实时分析和查看Web服务器统计信息(如果您想通过SSH对访问日志进行快速分析,或者您只是喜欢在终端中工作,那将非常有用)。
终端输出是默认输出,但它具有生成完整的,独立的实时HTML 报告以及JSON和 CSV报告的功能。
您可以从更多的监视器命令工具中看到它。
安装
从发行版本构建
GoAccess可以在* nix系统上编译和使用。
使用以下方法下载,提取和编译GoAccess:
$ wget https://tar.goaccess.io/goaccess-1.4.tar.gz
$ tar -xzvf goaccess-1.4.tar.gz
$ cd goaccess-1.4/
$ ./configure --enable-utf8 --enable-geoip=legacy
$ make
# make install
从GitHub构建(开发)
$ git clone https://github.com/allinurl/goaccess.git
$ cd goaccess
$ autoreconf -fiv
$ ./configure --enable-utf8 --enable-geoip=legacy
$ make
# make install
发行版
使用Linux发行版的首选软件包管理器在Linux上安装GoAccess最简单。请注意,并非所有发行版都具有最新版本的GoAccess。
Debian / Ubuntu
# apt-get install goaccess
注意:这可能会安装GoAccess的过时版本。为确保您正在运行最新的稳定版GoAccess,请参见下面的替代选项。
官方GoAccess Debian和Ubuntu存储库
$ echo "deb https://deb.goaccess.io/ $(lsb_release -cs) main" | sudo tee -a /etc/apt/sources.list.d/goaccess.list
$ wget -O - https://deb.goaccess.io/gnugpg.key | sudo apt-key --keyring /etc/apt/trusted.gpg.d/goaccess.gpg add -
$ sudo apt-get update
$ sudo apt-get install goaccess
注意事项:
- .deb官方仓库中的软件包也可以通过HTTPS获得。您可能需要安装apt-transport-https。
软呢帽
# yum install goaccess
Arch Linux
# pacman -S goaccess
Gentoo
# emerge net-analyzer/goaccess
OS X /自制软件
# brew install goaccess
FreeBSD
# cd /usr/ports/sysutils/goaccess/ && make install clean
# pkg install sysutils/goaccess
OpenBSD的
# cd /usr/ports/www/goaccess && make install clean
# pkg_add goaccess
openSUSE
# zypper ar -f obs://server:http http
# zypper in goaccess
印第安纳州
# pkg install goaccess
pkgsrc(NetBSD,Solaris,SmartOS等)
# pkgin install goaccess
视窗
CowAxess是Windows系统的GoAccess实施。它是GoAccess,Cygwin和许多其他相关工具的包装,以使其成为用于实时Web日志分析的完整且立即可用的解决方案,所有这些均在4 MB的包装中。我们遵循了GoAccess网站上提供的标准说明。
如果您想走更乏味的路线,可以在Windows中通过Cygwin使用GoAccess。请参见Cygwin的软件包。或通过Windows 10上的Linux子系统。
发行套餐
GoAccess具有最低要求,它是用C语言编写的,只需要ncurses。但是,下面是一些从源代码构建GoAccess的发行版中一些可选依赖项的表。
发行版 | 护士 | GeoIP(可选) | OpenSSL(可选) |
Ubuntu / Debian | libncursesw5-dev | libgeoip-dev | libssl开发 |
RHEL / CentOS | ncurses-devel | Geoip-devel | openssl-开发 |
Arch Linux | 诅咒 | Geoip | 的openssl |
Gentoo | sys-libs / ncurses | 开发库/ geoip | dev-libs / openssl |
松弛软件 | 诅咒 | GeoIP | 的openssl |
注意:您可能需要安装这样的构建工具gcc,autoconf, gettext,autopoint等编译/从源代码构建软件。例如 base-devel,build-essential,"Development Tools"。
码头工人
Docker映像已更新,能够引导访问日志中的输出。如果只想输出报告,则可以将日志从外部环境传递到基于Docker的进程:
cat access.log | docker run --rm -i -e LANG=$LANG allinurl/goaccess -a -o html --log-format COMBINED - > report.html
或实时
cat 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
您可以在DOCKER.md中阅读有关使用docker映像的更多信息。
存储
默认哈希表
内存中存储以将数据集大小限制为可用物理内存量为代价,提供了更好的性能。GoAccess使用内存中的哈希表。它具有很好的内存使用率和相当不错的性能。该存储也支持磁盘上的持久性。
命令行/配置选项
看到的选项可以被提供给命令或指定的配置文件中 如果在配置文件中指定,则需要使用长选项,而无需添加--。
用法/示例
注意:将数据插入GoAccess不会提示日志/日期/时间配置对话框,您需要事先在配置文件或命令行中定义它。
入门
要输出到终端并生成交互式报告:
# goaccess access.log
生成HTML报告:
# goaccess access.log -a > report.html
生成JSON报告:
# goaccess access.log -a -d -o json > report.json
生成CSV文件:
# goaccess access.log --no-csv-summary -o csv > report.csv
GoAccess还为实时过滤和解析提供了极大的灵活性。例如,要从goaccess启动以来通过监视日志来快速诊断问题:
# tail -f access.log | goaccess -
更妙的是,进行筛选,同时保持打开的管道保持实时分析,我们可以利用的tail -f和匹配模式的工具,如grep,awk,sed,等:
# tail -f access.log | grep -i --line-buffered 'firefox' | goaccess --log-format=COMBINED -
或从文件的开头进行解析,同时保持管道打开并应用过滤器
# tail -f -n +0 access.log | grep -i --line-buffered 'firefox' | goaccess -o report.html --real-time-html -
多个日志文件
有几种使用GoAccess解析多个日志的方法。最简单的方法是将多个日志文件传递到命令行:
# goaccess access.log access.log.1
甚至可以在读取常规文件时从管道解析文件:
# cat access.log.2 | goaccess access.log access.log.1 -
注意:单破折号附加在命令行后,以使GoAccess知道应从管道读取。
现在,如果我们想为GoAccess增加更多的灵活性,我们可以使用它zcat --force 来读取压缩和未压缩的文件。例如,如果我们要处理所有日志文件access.log.*,则可以执行以下操作:
# zcat --force access.log.* | goaccess -
注意:在Mac OS X上,请使用gunzip -c代替zcat。
实时HTML输出
GoAccess可以在HTML报表中输出实时数据。您甚至可以通过电子邮件发送HTML文件,因为它是由单个文件组成的,没有外部文件依赖性,这真是太好了!
生成实时HTML报告的过程与创建静态报告的过程非常相似。只--real-time-html需要使其实时即可。
# goaccess access.log -o /usr/share/nginx/html/your_site/report.html --real-time-html
要查看报告,您可以导航到http://your_site/report.html。
默认情况下,GoAccess将使用生成的报告的主机名。(可选)您可以指定客户端浏览器将连接到的URL。有关更多详细示例,请参见FAQ。
# goaccess access.log -o report.html --real-time-html --ws-url=goaccess.io
默认情况下,GoAccess侦听端口7890,以使用7890以外的其他端口,您可以将其指定为(确保该端口已打开):
# goaccess access.log -o report.html --real-time-html --port=9870
要将WebSocket服务器绑定到0.0.0.0以外的其他地址,可以将其指定为:
# goaccess access.log -o report.html --real-time-html --addr=127.0.0.1
注意:要通过TLS / SSL连接输出实时数据,您需要使用 --ssl-cert=<cert.crt>和--ssl-key=<priv.key>。
筛选
处理日期
另一个有用的管道是从网络日志中过滤日期
下面将使所有HTTP请求从头开始05/Dec/2010直到文件结束。
# sed -n '/05\/Dec\/2010/,$ p' access.log | goaccess -a -
或使用相对日期,例如昨天或明天:
# sed -n '/'$(date '+%d\/%b\/%Y' -d '1 week ago')'/,$ p' access.log | goaccess -a -
如果我们只想分析从DATE a到DATE b的某个时间范围,则可以执行以下操作:
# sed -n '/5\/Nov\/2010/,/5\/Dec\/2010/ p' access.log | goaccess -a -
如果我们只想保留一定数量的数据并回收存储,则只能保留一定的天数。例如保留并显示最近5天:
# goaccess access.log --keep-last=5
虚拟主机
假设您的日志包含虚拟主机字段。例如:
vhost.io:80 8.8.4.4 - - [02/Mar/2016:08:14:04 -0600] "GET /shop HTTP/1.1" 200 615 "-" "Googlebot-Image/1.0"
并且您想将虚拟主机附加到请求中,以查看顶级URL属于哪个虚拟主机:
awk '$8=$1$8' access.log | goaccess -a -
为此,还使用实时过滤和解析:
tail -f access.log | unbuffer -p awk '$8=$1$8' | goaccess -a -
要排除虚拟主机列表,您可以执行以下操作:
# grep -v "`cat exclude_vhost_list_file`" vhost_access.log | goaccess -
文件,状态代码和漫游器
解析特定页面,例如,页面浏览,html,htm,php,等的请求中:
# awk '$7~/\.html|\.htm|\.php/' access.log | goaccess -
注意,$7是通用和组合日志格式的请求字段(无虚拟主机),如果您的日志包括虚拟主机,则您可能想使用它$8。最好检查您要拍摄的领域,例如:
# tail -10 access.log | awk '{print $8}'
或解析特定的状态代码,例如500(内部服务器错误):
# awk '$9~/500/' access.log | goaccess -
或多个状态代码,例如所有3xx和5xx:
# tail -f -n +0 access.log | awk '$9~/3[0-9]{2}|5[0-9]{2}/' | goaccess -o out.html -
并获得有关攻击您的服务器的机器人(爬虫)数量的概述:
# tail -F -n +0 access.log | grep -i --line-buffered 'bot' | goaccess -
提示
另外,值得指出的是,如果我们想以较低的优先级运行GoAccess,可以将其运行为:
# nice -n 19 goaccess -f access.log -a
如果您不想将其安装在服务器上,仍然可以从本地计算机上运行它!
# ssh root@server 'cat /var/log/apache2/access.log' | goaccess -a -
故障排除
我们收到许多以前已经回答过的问题。
- 日期/时间匹配问题?检查您的日志格式和运行GoAccess的系统语言环境是否匹配。参见#1571
- 模式匹配有问题吗?空间通常是一个问题,例如,参见#136,#1579
- 与日志条目匹配的其他问题:关于日志/日期/时间格式,请参阅> 200个已解决的问题
- 日志处理有问题吗?请参阅> 111关于日志处理的问题
增量日志处理
GoAccess能够通过其内部存储逐步处理日志并将其数据转储到磁盘。它以以下方式工作:
- 必须先使用持久保存数据集--persist,然后才能加载相同的数据集。
- --restore。如果传递了新数据(通过管道或通过日志文件),它将把它附加到原始数据集中。
笔记
GoAccess跟踪所有已处理文件的inode(假设文件将保留在同一分区上)以及每个文件的最后一行和最后一行的时间戳。例如, inode:29627417|line:20012|ts:20171231235059
如果索引节点与当前文件不匹配,它将解析所有行。如果当前文件与索引节点匹配,则它将读取剩余的行并更新已解析的行数和时间戳。作为额外的预防措施,它不会解析时间戳小于或等于存储的时间戳的日志行。
管道传输数据基于最后读取的行的时间戳工作。例如,它将解析并丢弃所有传入的条目,直到找到时间戳> =而不是存储的时间戳。
例子
// last month access log
# goaccess access.log.1 --persist
然后,用
// append this month access log, and preserve new data
# goaccess access.log --restore --persist
仅读取持久数据(不解析新数据)
# goaccess --restore
贡献
欢迎使用GoAccess。最有用的方法是尝试一下并提供反馈。随时使用Github问题跟踪器并提取请求以讨论和提交代码更改。
请享用!