GoAccess 是一个免费的(由MIT许可)且开源的实时 Web 日志分析器和交互式查看器,可在 *nix 系统的终端中或通过浏览器运行。
具体功能可以到 https://goaccess.io 查看。这里就不再赘述。
实战 -- 简单分析 Nginx 日志
先上命令
goaccess /usr/local/nginx/logs/access.log
--ignore-panel=VISITORS
--ignore-panel=HOSTS
--ignore-panel=OS
--ignore-panel=BROWSERS
--ignore-panel=VIRTUAL_HOSTS
--ignore-panel=REFERRERS
--ignore-panel=REFERRING_SITES
--ignore-panel=KEYPHRASES
--ignore-panel=REMOTE_USER
--ignore-panel=GEO_LOCATION
--log-format=COMBINED
-q -a -o /usr/local/nginx/report/index.html
--real-time-html --daemonize
以守护进程(--daemonize)实时分析(--real-time-html)nginx 日志(--log-format=COMBINED,通用日志格式,Nginx 适用于这种日志格式)的运行,并且忽略(--ignore-panel)一些不关心的模块。
goaccess 创建了一个网页 —— index.html,该文件包含了监控数据,我们可以通过浏览器进行查看。
Nginx 配置查看报表数据
Nginx 配置一个域名解析到相应的目录,这个目录包含了 goaccess 的报表页面(/usr/local/nginx/report/index.html)。
为了数据安全,这里简单的试用了 Nginx 的 ngx_http_auth_basic_module 提供的认证功能,默认情况下,nginx 已经安装了该模块。
首先需要创建一个密码文件(/usr/local/nginx/logs/goaccess_pwd),此文件的书写格式是 用户名:密码
,每行一个账户,密码必须使用函数 crypt() 加密。
# 使用 goaccess 分析 nginx 日志生成的报表 html 页面
# 页面账号 xxx 密码 xxx
server {
listen 80;
server_name domainName;
location / {
auth_basic "goaccess-login!";
auth_basic_user_file /usr/local/nginx/logs/goaccess_pwd;
root /usr/local/nginx/report/;
index index.html;
}
}
more
- 在分析 200M 的 Nginx 日志时系统资源占用几乎可以忽略不计,只占用了 6M 的内存:
[root@xxx~]# ps aux|grep goaccess
root 15339 0.1 0.0 282836 6464 ? Ssl 13:35 0:01 goaccess /usr/local/nginx/logs/access.log
-
-q
参数可以忽略请求的查询字符串。例如,www.google.com/page.htm? query => www.google.com/page.htm
注意:删除查询字符串可以大大减少内存消耗,尤其是在带有时间戳的请求上。 -
使用
--daemonize
使得 GoAccess 成为守护进程的时候所有参数后的值都必须是绝对路径,否则将无法创建守护进程。