开源实时Web日志分析器和交互式查看器GoAccess

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 DebianUbuntu存储库

$ 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

pkgsrcNetBSDSolarisSmartOS等)

# pkgin install goaccess

视窗

CowAxessWindows系统的GoAccess实施。它是GoAccessCygwin和许多其他相关工具的包装,以使其成为用于实时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

注意:您可能需要安装这样的构建工具gccautoconf gettextautopoint等编译/从源代码构建软件。例如 base-develbuild-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和匹配模式的工具,如grepawksed,等:

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

文件,状态代码和漫游器

解析特定页面,例如,页面浏览,htmlhtmphp,等的请求中:

# awk '$7~/\.html|\.htm|\.php/' access.log | goaccess -

注意,$7是通用和组合日志格式的请求字段(无虚拟主机),如果您的日志包括虚拟主机,则您可能想使用它$8。最好检查您要拍摄的领域,例如:

# tail -10 access.log | awk '{print $8}'

或解析特定的状态代码,例如500(内部服务器错误):

# awk '$9~/500/' access.log | goaccess -

或多个状态代码,例如所有3xx5xx

# 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能够通过其内部存储逐步处理日志并将其数据转储到磁盘。它以以下方式工作:

  1. 必须先使用持久保存数据集--persist,然后才能加载相同的数据集。
  2. --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问题跟踪器并提取请求以讨论和提交代码更改。

请享用!

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值