关于nginx:日志分析工具-GoAccess

178次阅读

共计 3527 个字符,预计需要花费 9 分钟才能阅读完成。

日志的重要性显而易见,可我仿佛齐全疏忽了它,导致往往呈现什么问题,第一工夫并不是去看日志。

很显然我齐全漠视了它的弱小性,就拿 nginx 的拜访日志来说,能够从中剖析出如下信息:

  1. 申请的响应工夫
  2. 申请达到的后端服务器的地址和端口
  3. 申请是否存在缓存配置
  4. 申请体、申请头、响应体和响应头的大小等
  5. 客户端的 IP 地址、UserAgent 等信息
  6. 自定义变量的内容

通过这些信息,能够失去响应耗时的申请以及申请量和并发量,从而剖析并发起因,这对于利用级别的服务来说是十分重要的。

GoAccess 是什么

GoAccess 是一个开源的 实时网络日志分析器 交互式查看器,能够在类 Unix 零碎中的终端或通过浏览器运行。—— GoAccess 官网

为什么抉择 GoAccess?

  1. 因为 GoAccess 被设计成一个基于终端的疾速日志分析器。它的核心思想是实时疾速剖析和查看 Web 服务器统计信息,而无需应用浏览器。同时也能够将输出到 HTML 或者 CSV、JSON。
  2. 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-formatdate-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 日志格局转换案例四

正文完
 0