前言
在 Linux 操作系统下,分析日志文件是一件非常头疼的事情,它记录了很多日志,对于大多数的新手及系统管理员不知该如何下手进行分析,除非你在分析日志方面有足够的经验积累,那就是 Linux 系统高手了。
而在 Linux 操作系统中也有许多分析日志工具,GoAccess 是允许用户轻松分析 Web 服务器日志的工具之一,在这篇文章中我们将详细介绍 GoAcccess 工具。
什么是 GoAccess?
GoAccess 是一个开源的实时 Web 日志分析器
和交互式查看器
,可以在 *nix 系统中的终端运行或通过浏览器进行访问,它需要的依赖少,采用 C 语言编写,只需 ncurses,支持 Apache、Nginx 和 Lighttpd 日志
,为需要动态可视化服务器报告的系统管理员提供了高效的
、具有价值的 HTTP 统计信息
。
为什么要用 GoAccess?
GoAccess 可解析指定的 Web 日志文件并将数据输出至终端和浏览器,基于终端的快速日志分析器,其主要还是实时快速分析并查看 Web 服务器上的统计信息,无需使用浏览器,默认是在终端输出,能够将完整的实时 HTML 报告以及 JSON 和 CSV 报告。
GoAccess 支持任何自定义日志格式,Apache/Nginx中的组合日志格式:XLF/ELF,Apache 中的通用日志格式:CLF,但并不限于此。
GoAccess 的功能
GoAccess 默认所支持的 Web 日志格式
GoAccess 日期格式
time-format
变量后需要跟一个空格,指定日志格式日期。该日期包含常规字符
和特殊格式说明符
的任意组合。以百分比(%)符号
开头。可参考:man strftime
,%T
或%H:%M:%S
。注意:以毫秒为单位的时间戳,则
%f
必须将其用作时间格式。
date-format
变量后需要跟一个空格,指定日志格式日期。该日期包含常规字符
和特殊格式说明符
的任意组合。以百分比(%)符号
开头。可参考:man strftime
。注意:时间戳以微秒为单位,则
%f
必须用作日期格式。
空格
或\t制表符分隔符
,指定日志格式字符串。特殊字符所代表的含义
%m
,%U
,%q
和%H
解析各个字段,可使用%r
获取完整的请求,也可使用%m
,%U
,%q
和%H
组合你的请求,但不能同时使用;%U
中,无需使用%q
。如果URL路径
不包含任何查询字符串,则使用%q
,查询字符串将附加到请求中;GoAccess 三个存储选项
安装 GoAccess
源码安装
# wget https://tar.goaccess.io/goaccess-1.3.tar.gz
# tar -xzvf goaccess-1.3.tar.gz
# cd goaccess-1.3/
# ./configure --enable-utf8 --enable-geoip=legacy
# make
# make install
Debian / Ubuntu 系统
# apt-get install goaccess
获取最新 GoAccess 包,请使用 GoAccess 官方存储库,如下:
$ 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 add -
$ sudo apt-get update
$ sudo apt-get install goaccess
注意:
Trusty +
或 Wheezy +
)可执行:$ sudo apt-get install goaccess-tcb
.deb
官方库的软件包可以通过HTTPS
获取,这里可能需要安装,可执行:$ apt-transport-https
RHEL / CentOS 系统
# yum install goaccess
OS X / Homebrew
# brew install goaccess
使用 GoAccess
不同方式的输出格式:
输出至终端并生成交互式报告:
# goaccess access.log
生成 HTML 报告:
# goaccess access.log -a -o report.html
生成 JSON 报告:
# goaccess access.log -a -d -o report.json
生成 CSV 文件:
# goaccess access.log --no-csv-summary -o 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 access.log access.log.1
读取常规文件时从管道中解析文件:
# cat access.log.2 | goaccess access.log access.log.1-
注意:单破折号附加到命令行以使GoAccess知道它应该从管道读取,在Mac OS X上,请使用 gunzip -c 代替 zcat。
实时 HTML 输出格式:
生成实时 HTML 报告的过程与创建静态报告的过程类似,只需加个参数选项:--real-time-html
使其实现实时的效果。
# goaccess access.log -o /usr/share/nginx/html/site/report.html --real-time-html
除上述三种操作使用外,还可以与日期、虚拟主机、文件,状态代码和启动、服务器一起相结合使用,更多细节请参考其man手册页
或帮助
。
# man goaccess
或
# goaccess --help
Matters needing attention
每个活动面板共有366
个项目,或实时HTML
报告中的50
个项目,可使用max-items
自定义项目数量。但是,只有CSV
和JSON
输出允许的最大数量大于每个面板366
个项目的默认值。
使用磁盘B + Tree
两次分析同一日志文件--keep-db-files
并--load-from-disk
在每次运行时使用和时,GoAccess 将每个条目计数两次。
匹配是请求访问日志中的内容,10个请求 = 10个匹配。具有相同IP
,日期
和用户代理
的HTTP请求
被视为唯一访问。
Problems during installation
安装过程中,难免会出现一些问题,具体可参考如下链接:
1、https://www.cnblogs.com/zkfopen/p/10126959.html 2、https://www.cnblogs.com/jshp/p/10143170.html
Reference
1、https://github.com/allinurl/goaccess 2、https://goaccess.io/features 3、https://goaccess.io/get-started 4、https://goaccess.io/man 5、https://goaccess.io/download
总结
通过本篇文章介绍了什么是 GoAccess、为什么要用 GoAccess、GoAccess 的功能、GoAccess 默认所支持的 Web 日志格式、GoAccess 日期格式、GoAccess 特殊字符所代表的含义、GoAccess 三个存储选项、安装以及结合不同场景使用GoAccess,希望大家在今后的工作中能运用起来并通过该工具来解决日常 Web 服务器一些日志的相关问题。