goaccess
这是什么?
goaccess是一种开源实时Web日志分析仪和交互式查看器,它在 *NIX系统或通过浏览器的终端中运行。它为系统管理员提供快速而有价值的HTTP统计信息,这些系统管理员需要视觉服务器报告。更多信息,网址:https://goaccess.io。
特征
goaccess解析了指定的Web日志文件,并将数据输出到X终端。功能包括:
-
完全实时
所有面板和指标均应定时每200毫秒对终端输出进行一次更新,每秒在HTML输出上每秒更新。 -
需要最小的配置
您只需在访问日志文件上运行它,选择日志格式并让goaccess解析访问日志并向您显示统计信息。 -
跟踪申请响应时间
跟踪为请求服务所花费的时间。如果您想跟踪正在放慢网站的页面,则非常有用。 -
Websocket身份验证:
goaccess提供了增强的Websocket身份验证,并具有安全的令牌刷新功能以及与外部身份验证系统的无缝集成,以支持本地和外部JWT验证。 -
几乎所有网络日志格式
goaccess允许任何自定义日志格式字符串。预定义的选项包括Apache,Nginx,Amazon S3,弹性负载平衡,CloudFront,等。 -
增量日志处理
需要数据持久性吗? goaccess具有通过磁盘持久性选项逐步处理日志的能力。 -
只有一个依赖
goaccess用C编写。为了运行它,您只需要ncurses作为依赖项即可。就是这样。它甚至具有自己的Web套接字服务器-http://*gw*s*ocket.io/。 -
访客
确定按小时或日期最慢的运行请求的命中量,访问者,带宽和指标的数量。 -
每个虚拟主机的指标
有多个虚拟主机(服务器块)吗?它具有一个面板,该面板显示了虚拟主机消耗大多数Web服务器资源的面板。 -
ASN(自主系统编号映射)
非常适合检测恶意交通模式并相应地阻止它们。 -
配色方案可自定义
量身定制的goaccess适合您自己的颜色口味/方案。通过终端,或者只需在HTML输出上应用样式表即可。 -
支持大数据集
goaccess具有通过优化的内存散列表,能够解析大量日志。它具有很好的记忆使用量和相当不错的性能。该存储也支持对盘的持久性。 -
Docker支持
能够从上游构建goaccess的Docker图像。您仍然可以使用音量映射和编辑goaccess .conf完全配置它。请参阅下面的Docker部分。还有文档如何使用Docker-Compose。
几乎所有Web日志格式…
goaccess允许任何自定义日志格式字符串。预定义的选项包括但不限于:
- Amazon Cloudfront(下载分发)。
- 亚马逊简单存储服务(S3)
- AWS弹性负载平衡
- 组合日志格式(XLF/Elf)Apache | nginx
- 通用日志格式(CLF)apache
- Google云存储。
- Apache虚拟主机
- 鱿鱼天然格式。
- W3C格式(IIS)。
- Caddy的JSON结构化格式。
- Traefik的CLF风味
为什么要goaccess ?
goaccess被设计为基于终端的快速日志分析仪。它的核心想法是实时快速分析和查看Web服务器统计信息,而无需使用浏览器(如果您想通过SSH快速分析访问日志,或者您只是喜欢在终端工作)。
尽管终端输出是默认输出,但它具有生成完整,独立的,实时的HTML报告以及JSON和CSV报告的能力。
您可以看到它比其他任何东西都更像是监视器命令工具。
安装
从发布中构建
goaccess可以在 *NIX系统上编译并使用。
下载,提取和编译goaccess :
goaccess-1.9.4.tar.gz
$ tar -xzvf goaccess -1.9.4.tar.gz
$ cd goaccess -1.9.4/
$ ./configure –enable-utf8 –enable-geoip=mmdb
$ make
# make install\”>
$ wget https://tar.*goac*ce*ss.io/ goaccess -1.9.4.tar.gz
$ tar -xzvf goaccess -1.9.4.tar.gz
$ cd goaccess -1.9.4/
$ ./configure --enable-utf8 --enable-geoip=mmdb
$ make
# make install
从GitHub(开发)构建
goaccess
$ autoreconf -fiv
$ ./configure –enable-utf8 –enable-geoip=mmdb
$ make
# make install\”>
$ git clone https://github.c*o**m/allinurl/goaccess.git
$ cd goaccess
$ autoreconf -fiv
$ ./configure --enable-utf8 --enable-geoip=mmdb
$ make
# make install
分布
使用GNU+Linux发行版的首选软件包管理器在GNU+Linux上安装goaccess是最简单的。请注意,并非所有发行版都具有最新版本的goaccess 。
Debian/Ubuntu
# apt-get install goaccess
注意:这很可能会安装过时的goaccess版本。要确保您正在运行最新稳定版本的goaccess ,请参阅下面的替代选项。
官方的goaccess Debian和Ubuntu存储库
goaccess.gpg >/dev/null
$ echo \”deb [signed-by=/usr/share/keyrings/ goaccess .gpg arch=$(dpkg –print-architecture)] https://deb.go**acc*ess.io/ $(lsb_release -cs) main\” | sudo tee /etc/apt/sources.list.d/ goaccess .list
$ sudo apt-get update
$ sudo apt-get install goaccess \”>
$ wget -O - https://deb.*goacce*s*s.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.go**acc*ess.io/ $(lsb_release -cs) main\" | sudo tee /etc/apt/sources.list.d/ goaccess .list
$ sudo apt-get update
$ sudo apt-get install goaccess
笔记:
- 官方存储库中的
.deb软件包也可以通过HTTPS获得。您可能需要安装apt-transport-https。
软呢帽
# yum install goaccess
拱
# pacman -S goaccess
Gentoo
# emerge net-analyzer/ goaccess
OS X / Homebrew
# brew install goaccess
freebsd
goaccess/ && make install clean
# pkg install sysutils/ goaccess \”>
# cd /usr/ports/sysutils/ goaccess / && make install clean
# pkg install sysutils/ goaccess
OpenBSD
goaccess && make install clean
# pkg_add goaccess \”>
# cd /usr/ports/www/ goaccess && make install clean
# pkg_add goaccess
Opensuse
goaccess\”>
# zypper ar -f obs://server:http http
# zypper in goaccess
openindiana
# pkg install goaccess
PKGSRC(Netbsd,Solaris,Smartos,…)
# pkgin install goaccess
视窗
goaccess可以通过Cygwin在Windows中使用。请参阅Cygwin的包裹。或通过Windows 10上的GNU+Linux子系统。
Docker
Docker映像已更新,能够从访问日志中引导输出。如果您只想输出报告,则可以将日志从外部环境中输送到基于Docker的过程:
goaccess -a -o report.html –log-format COMBINED -\”>
touch report.html
cat access.log | docker run --rm -i -v ./report.html:/report.html -e LANG=$LANG allinurl/ goaccess -a -o report.html --log-format COMBINED -
或实时
tail -F access.log | docker run -p 7890:7890 --rm -i -e LANG=$LANG allinurl/ goaccess -a -o report.html --log-format COMBINED --real-time-html -
还有文档如何使用Docker-Compose。
建在孤立的容器中
您还可以在孤立的容器环境中为基于Debian的系统构建二进制系统,以防止使用开发库将本地系统混乱:
goaccess-master
$ docker build -t goaccess /build.debian-12 -f Dockerfile.debian-12 .
$ docker run -i –rm -v $PWD:/ goaccess goaccess /build.debian-12 > goaccess \”>
$ curl -L \"https://github.co**m*/allinurl/goaccess/archive/refs/heads/master.tar.gz\" | tar -xz && cd goaccess -master
$ docker build -t goaccess /build.debian-12 -f Dockerfile.debian-12 .
$ docker run -i --rm -v $PWD:/ goaccess goaccess /build.debian-12 > goaccess
您可以在docker.md中阅读有关使用Docker Image的更多信息。
分销软件包
goaccess的要求很少,它以C编写,仅需要Ncurses。但是,以下是某些发行版中一些可选依赖性的表,可以从源来构建goaccess 。
| 发行版 | ncurses | Geoip(OPT) | geoip2(opt) | OpenSSL(OPT) |
|---|---|---|---|---|
| Ubuntu/Debian | libncurses-dev | libgeoip-dev | libmaxminddb-dev | libssl-dev |
| Rhel/Centos | ncurses-devel | Geoip-Devel | libmaxminddb-devel | Openssl-Devel |
| 拱 | ncurses | 地理 | libmaxminddb | Openssl |
| Gentoo | sys-libs/ncurses | Dev-libs/geoip | dev-libs/libmaxminddb | Dev-libs/openssl |
| Slackware | ncurses | 地理 | libmaxminddb | Openssl |
注意:您可能需要安装构建工具,例如gcc , autoconf , gettext , autopoint等,以从源来编译/构建软件。例如, base-devel , build-essential \"Development Tools\" 。
贮存
默认哈希表
内存存储提供更好的性能,以将数据集大小限制为可用物理内存的数量。 goaccess使用内存中的哈希表。它具有很好的记忆使用量和相当不错的性能。该存储也支持对盘的持久性。
命令行 /配置选项
请参阅可以提供给命令或在配置文件中指定的选项。如果在配置文件中指定,则需要在不预先准备的情况下使用长选项--
用法 /示例
注意:将管道数据输入goaccess不会提示日志/日期/时间配置对话框,您将需要在配置文件或命令行中定义它。
入门
输出到终端并生成交互式报告:
# goaccess access.log
生成HTML报告:
# goaccess access.log -a > report.html
生成JSON报告文件:
# goaccess access.log -a -d -o report.json
为了生成CSV报告以进行STDOUT:
# goaccess access.log --no-csv-summary -o 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 。
多线程支持
使用--jobs=<count> (或-j )启用多线程解析。例如:
# goaccess access.log -o report.html -j 4
并使用--chunk-size=<256-32768>以调整块尺寸,默认块大小为1024。例如:
# goaccess access.log -o report.html -j 4 --chunk-size=8192
实时HTML输出
goaccess具有HTML报告中输出实时数据的能力。您甚至可以通过电子邮件发送HTML文件,因为它由一个没有外部文件依赖性的单个文件组成,这是多么整洁!
生成实时HTML报告的过程与创建静态报告的过程非常相似。仅需要--real-time-html才能实时。
# goaccess access.log -o /usr/share/nginx/html/your_site/report.html --real-time-html
要查看报告,您可以导航到http://*y**our_site/report.html 。
默认情况下, goaccess将使用生成报告的主机名。可选地,您可以指定客户端浏览器将连接到的URL。有关一个更详细的示例,请参见常见问题。
goaccess .io\”>
# 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> and --ssl-key=<priv.key> 。
过滤
与日期合作
另一个有用的管道将是从网络日志中过滤日期
以下将从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 -
如果我们只想从日期到日期开始的某个时间范围来解析,我们可以做:
# 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 -n root@server \'tail -f /var/log/apache2/access.log\' | goaccess -
注意: SSH需要-n因此goaccess可以从Stdin阅读。另外,请确保使用SSH键进行身份验证,因为如果需要密码,它将无法工作。
故障排除
我们收到许多以前已经回答的问题。
- 日期/时间匹配问题?检查您的日志格式和运行goaccess匹配的系统语言环境。参见#1571
- 模式匹配问题?空间通常是一个问题,例如#136,#1579
- 其他问题匹配日志条目:请参阅>关于日志/日期/时间格式的200个封闭问题
- 日志处理问题?请参阅有关日志处理的111个问题
增量日志处理
goaccess具有通过其内部存储逐渐处理日志并将其数据倒入磁盘的能力。它以以下方式工作:
- 必须首先将数据集持续使用
--persist,然后可以加载相同的数据集。 -
--restore。如果传递新数据(管道或通过日志文件),则将其附加到原始数据集。
笔记
goaccess跟踪所有处理的文件的inodes(假设文件将保留在同一分区上),此外,它还从日志中提取数据段,以及每个文件的最后一行和最后一行的时间戳。例如, inode:29627417|line:20012|ts:20171231235059
首先,它比较摘要是否匹配要解析的日志,如果这样做,则假定日志没有发生巨大变化,例如,尚未被截断。如果Inode与当前文件不匹配,则将解析所有行。如果当前文件与Inode匹配,则它读取其余行并更新解析行和时间戳的线计数。作为一种额外的预防措施,它不会用时间戳≤与存储的日志≤分析。
管道数据基于最后一行读取的时间戳。例如,它将解析并丢弃所有传入条目,直到找到时间戳> =比存储的时间戳> =。
例子
goaccess access.log.1 –persist\”>
// last month access log
# goaccess access.log.1 --persist
然后,加载它
goaccess access.log –restore –persist\”>
// append this month access log, and preserve new data
# goaccess access.log --restore --persist
仅读取持续的数据(无需解析新数据)
# goaccess --restore
贡献
欢迎对goaccess的任何帮助。最有用的方法是尝试并提供反馈。请随时使用GitHub问题跟踪器,并提取请求讨论和提交代码更改。
您可以通过直接在github上编辑.po文件或使用视觉界面inlang.com来为我们的翻译做出贡献。
享受!
