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

很显然我齐全漠视了它的弱小性,就拿 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 ~/.goaccessrctime-format %Tdate-format %d/%b/%Ylog_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 %Tdate-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 日志格局转换案例四