最近了解到一款Nginx日志分析工具GoAccess ,这里记录一下。
1 介绍
GoAccess 是一款开源(MIT许可证)的且具有交互视图界面的实时 Web 日志分析工具,通过你的 Web 浏览器或者 *nix 系统下的终端程序即可访问。
能为系统管理员提供快速且有价值的 HTTP 统计,并以在线可视化服务器的方式呈现。 GoAccess 解析指定的 Web 日志文件并将统计结果输出到 X 终端。功能如下:
- 通用统计: 此面板展示了几个主要指标,比如:有效和无效请求的数量,分析这些数据所花费的时间,独立访客的情况,请求的文件,静态文件(CSS, ICO, JPG 等)的完整URL,404错误,被解析的日志文件的大小以及消耗的带宽。
- 独立访客: 此面板按照日期展示了访问次数,独立访客数,以及累计消耗的带宽等指标。具有相同IP,相同访问时间,相同的 UserAgent 的 HTTP 请求将会被识别为独立访客。默认情况下包含了网络爬虫。
您也可以选择使用 --date-spec=hr 参数将按照日期分析修改为按照小时,例如:05/Jun/2016:16 。这对于希望在小时级别去跟踪每日流量非常有帮助。 - 请求的文件: 此面板展示您服务器上被请求次数最多的文件。包含访问次数,独立访客数,百分比,累计消耗带宽,使用的协议,请求方式。
- 请求的静态文件: 列出请求频率最高的静态文件类型,例如:
JPG
,CSS
,SWF
,JS
,GIF
, 和PNG
, 以及和上一个面板一样的其他指标。 另外静态文件可以被添加到配置文件中。 - 404 或者文件未找到: 展示内容与之前的面板类似,但是其数据包含了所有未找到的页面,以及俗称的 404 状态码。
- 主机: 此面板展示主机自身的详细信息。能够很好的发现不怀好意的爬虫以及识别出是谁吃掉了你的带宽。
扩展面板将向您展示更多信息,比如主机的反向DNS解析结果,主机所在国家和城市。如果开启了 参数,选择想查看的 IP 地址并按回车,将会显示 UserAgent 列表。 - 操作系统: 此面板将显示主机使用的操作系统的信息。GoAccess 将尽可能尝试为每一款操作系统提供详细的信息。
- 浏览器: 此面板将显示来访主机使用的浏览器信息。GoAccess 将尽可能尝试为每一款浏览器提供详细的信息。
- 访问次数: 此面板按小时报告。因此将显示24个数据点,每一个均对应每一天的某一个小时。
使用 --hour-spec=min 参数可以设定为按每十分钟报告,并将以 16:4 的格式显示时间。这对发现服务器的峰值访问时段很有帮助。 - 虚拟主机: 此面板将显示从访问日志中解析出来的不同的虚拟主机的情况。此面板仅在日志格式中启用了 %v 参数时显示。
- 来路URL: 如果问题主机通过其他的资源访问了你的站点,以及通过从其他主机上的链接或者跳转到你的站点,则这些来路URL将会被显示在此面板。可以在配置文件中通过
`--ignore-panel`
开启此功能。(默认关闭) - 来路站点: 此面板将仅显示主机的部分,而不是完整的URL。
- 关键字: 报告支持用在谷歌搜索,谷歌缓存,谷歌翻译上使用关键字。目前仅支持通过 HTTP 使用谷歌搜索。 可以在配置文件中通过
`--ignore-panel`
开启此功能。(默认关闭) - 地理位置: 根据 IP 地址判断地理位置。统计数据按照大洲和国家分组。需要地理位置模块的支持。
- HTTP 状态码: 以数字表示的 HTTP 请求的状态编码。
- 远程用户(HTTP验证) 通过 HTTP 验证来确定访问文档的权限。如果文档没有被密码保护起来,这部分将会显示为 “-”。此面板默认为开启,除非在日志格式变量中设置了参数
%e
。
GoAccess 是一款轻量、快速的日志分析工具,可以很方便的用于 Nginx/Apache/IIS 等的日志分析上,可以直接在控制台中方便的查看分析结果,也可以将结果导出成 html、csv、json 等格式,甚至还可以支持控制台和 html 的实时刷新!可谓是非常之强大。
2 安装
GoAccess 的安装非常之简单,CentOS/Fedore 下直接执行 yum install goaccess
即可,Debian/Ubuntu 下使用 apt-get install goaccess
,OS X 可以用 brew install goaccess
安装。
2.1、安装依赖包。
如果需要启用 IP 解析支持需要安装 geoip
库。CentOS 下执行:
$ yum install geoip-devel
GeoIP 在 Ubuntu 下的包名为 libgeoip-dev
,其它系统详见官网下载页最后面的 Distribution Packages
。
2.2、下载源码并解压
$ wget http://tar.goaccess.io/goaccess-1.0.2.tar.gz
2.3、配置并安装
$ ./configure --enable-geoip --enable-utf8
$ make
# make install
3 基本用法
3.1 直接在控制台查看日志分析结果
$ goaccess -f xxxx.log
或者
- $ goaccess -a -d -f /data/logs/access.log -p /etc/goaccess.conf
会弹出来一个窗口选择日志格式,如果是 Nginx 标准的日志格式直接选择第一项即可(空格选中,回车确认)。
3.2 输出分析结果到 html 文件
下面的命令会使用默认的配置文件导出到 HTML,如果需要使用自己的配置文件,请添加 -p
参数。
$ goaccess -f xxxx.log -o xxxxx.html
或者
$ goaccess -a -d -f /data/logs/access.log -p /etc/goaccess.conf -o /data/html/public/go-access.html
3.3 实时监控
需要在启动命令后追加--real-time-html --daemonize
参数。
$ goaccess -a -d -f /data/logs/access.log -p /etc/goaccess.conf -o /data/html/public/go-access.html --real-time-html --daemonize
# 监听端口7890
$ netstat -tunpl | grep "goaccess"
tcp 0 0 0.0.0.0:7890 0.0.0.0:* LISTEN 21136/goaccess
以守护进程启动 GoAccess 后,使用 Websocket 建立长连接,它默认监听 7890 端口。
3.4 crontab定时监控
在某些场景下,没有这样的实时性要求,可采用 crontab 机制实现定时更新 HTML 报表。
# 每天执行
0 0 1 * * goaccess -a -d -f /data/logs/fanhaobai.com.access.log -p /etc/goaccess.conf -o /data/html/hexo/public/go-access.html 2> /data/logs/go-access.log
3.5 历史监控
当 access 日志被切割后,怎么合理使用 GoAccess 分析日志?
可以试试磁盘存储选项
- --keep-db-files
在磁盘上保存已解析的数据。如果数据库文件存在,则文件将被覆盖。此参数应用于第一个数据集。如果设置此参数为 false 则在退出程序时将删除所有数据库。示例见下文。
仅在设置了 --enable-tcb=btree 时有效。
- --load-from-disk
从磁盘载入之前存储过的数据。如果仅读取已保存的数据,则需要退出数据库文件。参考
keep-db-files
即相关示例见下文。仅在设置了 --enable-tcb=btree 时有效。
- --db-path <dir>
设置磁盘数据库文件的存储路径。默认值为
/tmp
目录。仅在设置了 --enable-tcb=btree 时有效。
4 常用选项
4.1 文件选项
-f
--log-file=<logfile>
指定日志文件的路径。-p
--config-file=<configfile>
指定配置文件的路径。 默认的配置文件位于/usr/local/etc/goaccess.conf
4.2 解析选项
-d
--with-output-resolver
在导出成 HTML 或 JSON 格式时启用 IP 地址解析-e
--exclude-ip <IP|IP-range>
排除的 IP 或 IP 段-o
--output=<json|csv|html>
指定输出的文件路径,根据后缀判定输出格式-q
--no-query-string
忽略 URL 后的面查询字符串--ignore-crawlers
忽略爬虫
配置 HTML 实时刷新
参考: