日志的重要性显而易见,可我仿佛齐全疏忽了它,导致往往呈现什么问题,第一工夫并不是去看日志。
很显然我齐全漠视了它的弱小性,就拿 nginx 的拜访日志来说,能够从中剖析出如下信息:
- 申请的响应工夫
- 申请达到的后端服务器的地址和端口
- 申请是否存在缓存配置
- 申请体、申请头、响应体和响应头的大小等
- 客户端的 IP 地址、UserAgent 等信息
- 自定义变量的内容
通过这些信息,能够失去响应耗时的申请以及申请量和并发量,从而剖析并发起因,这对于利用级别的服务来说是十分重要的。
GoAccess 是什么
GoAccess 是一个开源的 实时网络日志分析器 和交互式查看器,能够在类 Unix 零碎中的终端或通过浏览器运行。—— GoAccess 官网
为什么抉择 GoAccess?
- 因为 GoAccess 被设计成一个基于终端的疾速日志分析器。它的核心思想是实时疾速剖析和查看 Web 服务器统计信息,而无需应用浏览器。同时也能够将输出到 HTML 或者 CSV、JSON。
- GoAccess 简直能够解析任何 Web 日志格局(Apache,Nginx,Amazon S3,Elastic Load Balancing,CloudFront 等)。只须要设置日志格局并依据您的日志运行它。
GoAccess 入门
昨天在应用 GoAccess 时,踩到了一些坑,导致我一度认为这个工具是不是存在什么 Bug。因为在看他人的教程中都是开箱即用。
上面从装置到应用会一一具体阐明。
装置 GoAccess
因为服务器的操作系统是 Ubuntu
,所以这里以 Ubuntu
为例:
因为并非所有发行版都提供最新版本的 GoAccess,所以这里应用官网提供的最新稳定版的装置形式
$ echo "deb http://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
确定日志格局
在计算机装置了 GoAccess 之后,要做的第一件事件就是确定拜访日志的日志格局,能够在永恒设置它们,也能够通过命令行传递他们。
这里用 Nginx 的 access.log 为例
36.113.128.155 - - [28/Apr/2019:02:20:01 +0000] "GET /Manage/Dingdan/fail_index/startTime/2019-04-28+00%3A00%3A00/endTime/2019-04-28+23%3A59%3A59.html HTTP/1.1" 200 7798 "http://www.692213.com/Manage/Dingdan/fail_index/startTime/2019-04-28+00%3A00%3A00/endTime/2019-04-28+23%3A59%3A59.html" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36"
形式一,配置 .goaccessrc
文件:
vim ~/.goaccessrc
time-format %T
date-format %d/%b/%Y
log_format %h %^[%d:%t %^] "%r" %s %b "%R" "%u" %^
形式二,在命令行传递参数:
$ goaccess nginx/access.log --log-format='%h %^[%d:%t %^]"%r"%s %b"%R""%u" %^' --date-format=%d/%b/%Y --time-format=%T
留神:无论是配置文件还是命令行参数 都不是永远不变的,只是绝对于你要监控的日志格局。
运行 GoAccess
形式一,通过 -p
参数,指定配置文件。
$ goaccess nginx/access.log -p ~/.goaccessrc
形式二,间接在命令行参数中指定日志格局,详情见下面的例子。
终端输入
以下提醒应用预约义日志格局的日志配置对话框供您抉择,而后实时显示统计信息。
$ goaccess nginx/access.log -c
通常抉择第三个,通用日志格局(CLF),胜利之后就是这样个样子:
管制台下的操作方法:
* F1 或 h 次要帮忙。* F5 重绘主窗口。* q 退出程序,以后窗口或折叠流动模块
* o 或 ENTER 开展所选模块或关上窗口
* 0- 9 并将 Shift + 0 所选模块设置为活动状态
* j 在开展的模块中向下滚动
* k 在扩大模块中向上滚动
* c 设置或更改计划色彩
* ^ f 在流动模块中向前滚动一个屏幕
* ^ b 在流动模块中向后滚动一个屏幕
* TAB 迭代模块(转发)* SHIFT + TAB 迭代模块(向后)* s 对流动模块的排序选项
* / 搜寻所有模块(容许正则表达式)* n 找到下一个呈现的地位
* g 移至屏幕的第一个我的项目或顶部
* G 挪动到屏幕的最初一项或底部
动态 HTML 输入
以下内容剖析拜访日志并在动态 HTML 报告中显示统计信息。
$ goaccess -a -d -f nginx/access.log.1 -p ~/.goaccessrc -o /var/www/report.html
实时 HTML 输入
$ goaccess -a -d -f nginx/access.log.1 -p ~/.goaccessrc -o /var/www/report.html --real-time-html
而后用浏览器拜访,大略就是这个样子:
配置文件及日志格局阐明
GoAccess 的配置文件位于 %sysconfdir%/goaccess.conf
或~/.goaccessrc
其中,%sysconfdir% 是 /etc/,/usr/etc/ 或 /usr/local/etc/
time-format
和 date-format
的格局通常都是固定的,只有 log-format
的格局视具体日志格局而定。
time-format %T
date-format %d/%b/%Y
log-format
罕用格局阐明:
* %x 与工夫格局和日期格局变量匹配的日期和工夫字段。当给出工夫戳而不是日期和工夫在两个独自的变量中时应用。* %t 工夫字段匹配工夫格局变量。* %d 与日期格局变量匹配的日期字段。* %v 服务器名称依据标准名称设置(服务器块或虚拟主机)。* %e 这是 HTTP 身份验证确定的申请文档的人的用户标识。* %hhost(客户端 IP 地址,IPv4 或 IPv6)* %r 来自客户端的申请行。这须要围绕申请的特定分隔符(单引号,双引号等)可解析。否则,应用非凡的格局说明符,如组合 %m,%U,%q 和 %H 解析各个字段。留神:应用或者 %r 取得残缺的申请 OR %m,%U,%q 并 %H 造成你的要求,不要同时应用。* %m 申请办法。* %U 申请的 URL 门路。留神:如果查问字符串在 %U,则无需应用 %q。然而,如果 URL 门路不蕴含任何查问字符串,则能够应用 %q 并将查问字符串附加到申请中。* %q 查问字符串。* %H 申请协定。* %s 服务器发送回客户端的状态代码。* %b 返回给客户端的对象大小。* %R“Referer”HTTP 申请标头。* %u 用户代理 HTTP 申请标头。* %D 服务申请所需的工夫,以微秒为单位。* %T 服务申请所需的工夫,以毫秒为单位,分辨率为毫秒。* %L 服务申请所用的工夫,以毫秒为单位的十进制数。* %^ 疏忽此字段。* %~ 向前挪动日志字符串,直到找到非空格(!isspace)char。* ~h X-Forwarded-For(XFF)字段中的主机(客户端 IP 地址,IPv4 或 IPv6)。
罕用参数
-f
:指定须要剖析的日志文件门路-c
:程序启动时提醒日志 / 日期配置窗口-p
:指定要应用的自定义配置文件-d
:在 HTML 或 JSON 输入上启用 IP 解析器-o
:输入到指定扩展名文件中(Html、Json、CSV)-a
:按主机启用用户代理列表。为了更快地解析,请不要启用此标记-d
:在 HTML 或 JSON 输入上启用 IP 解析器。
总结:GoAccess 从装置到应用还是十分不便的,不仅能够对历史的日志进行剖析,也能实时对日志进行剖析,所反对的日志格局根本能满足大多数利用场景。
参考链接
- GoAccess 官网
- GoAccess 入门
- 应用 GoAccess 剖析 Nginx 日志
- 将 Nginx log_format 转换为 goaccess 配置文件
- GoAccess 日志格局转换案例一
- GoAccess 日志格局转换案例二
- GoAccess 日志格局转换案例三
- GoAccess 日志格局转换案例四