日志的重要性显而易见,可我仿佛齐全疏忽了它,导致往往呈现什么问题,第一工夫并不是去看日志。
很显然我齐全漠视了它的弱小性,就拿 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 ~/.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-format
和date-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 日志格局转换案例四