日志的重要性不言而喻,但我似乎完全忽略了它,经常会出问题,而且第一时间不去看日志。显然,我完全忽略了它的威力。以nginx访问日志为例,从中可以分析出以下信息:请求的响应时间,请求到达的后端服务器的地址和端口,是否有缓存配置请求体,请求Header、responsebody、responseheader的大小等Client的IP地址、UserAgent等信息自定义变量内容通过这些信息可以得到响应耗时请求以及请求量和并发量,从而分析原因并发性,这是非常重要的,对于应用层服务来说非常重要。什么是GoAccessGoAccess是一个开源的实时网络日志分析器和交互式查看器,可以在类Unix系统的终端中或通过浏览器运行。——为什么GoAccess官方选择了GoAccess?因为GoAccess被设计成一个快速的基于终端的日志分析器。其核心思想是在不使用浏览器的情况下,快速实时地分析和查看网络服务器统计数据。同时,它也可以输入为HTML或CSV、JSON。GoAccess可以解析几乎任何网络日志格式(Apache、Nginx、AmazonS3、ElasticLoadBalancing、CloudFront等)。只需设置日志格式并针对您的日志运行它。GoAccess入门昨天,我在使用GoAccess的时候,踩了一些坑,这让我想到这个工具可能存在一些bug。因为是在看别人的教程中开箱即用的。下面将从安装到使用进行详细的讲解。安装GoAccess因为服务器的操作系统是Ubuntu,所以这里以Ubuntu为例:因为并不是所有的发行版都提供最新版本的GoAccess,所以这里使用官方提供的最新稳定版的安装方法$echo"debhttp://deb.goaccess.io/$(lsb_release-cs)main"|sudotee-a/etc/apt/sources.list.d/goaccess.list$wget-O-https://deb.goaccess.io/gnugpg.key|sudoapt-keyadd-$sudoapt-getupdate$sudoapt-getinstallgoaccess确定日志格式在电脑上安装好GoAccess之后,首先要做的就是确定accesslog的日志格式,可以自己设置永久地,它们也可以在命令行上传递。这里以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.htmlHTTP/1.1"2007798"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(WindowsNT10.0;WOW64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/70.0.3538.110Safari/537.36"首先配置.goaccessrc文件:vim~/.goaccessrctime-format%Tdate-format%d/%b/%Ylog_format%h%^[%d:%t%^]"%r"%s%b"%R""%u"%^方法二,命令行传参:$goaccessnginx/access.log--log-format='%h%^[%d:%t%^]"%r"%s%b"%R""%u"%^'--date-format=%d/%b/%Y--time-format=%T注意:配置文件和命令行参数都不是始终相同,只是相对于您要监视的日志格式而言。运行GoAccess方法一,通过-p参数指定配置文件。$goaccessnginx/access.log-p~/.goaccessrc方法二,直接在命令行参数中指定日志格式,详见上例。终端输出如下日志配置对话框,提示您使用预定义的日志格式供您选择,然后实时显示统计信息。$goaccessnginx/access.log-c通常选择第三种,普通日志格式(CLF),成功后是这样的:控制台下的操作方法:*F1orh主要是帮助。*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-fnginx/access.log.1-p~/.goaccessrc-o/var/www/report.html实时HTML输出$goaccess-a-d-fnginx/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/%Ylog-format常用格式说明:*%x匹配时间格式和日期格式变量的日期和时间字段。当在两个单独的变量中给出时间戳而不是日期和时间时使用。*%t时间字段匹配时间格式变量。*%d与日期格式变量匹配的日期字段。*%v服务器名称根据规范名称(服务器块或虚拟主机)设置。*%e这是由HTTP身份验证确定的请求文档的人的用户ID。*%hhost(客户端IP地址,IPv4或IPv6)*%r来自客户端的请求行。这需要在可解析的请求周围使用特定的分隔符(单引号、双引号等)。否则,将使用特殊格式说明符(例如%m、%U、%q和%H的组合)解析各个字段。注意:使用%r来获取完整的请求或使用%m、%U、%q和%H来形成您的请求,不要同时使用两者。*%m请求方法。*%U请求的URL路径。注意:如果查询字符串在%U中,则不需要%q。但是,如果URL路径不包含任何查询字符串,您可以使用%q并将查询字符串追加到请求中。*%q查询字符串。*%H请求协议。*%s服务器发回客户端的状态码。*%b返回给客户端的对象的大小。*%R"Referer"HTTP请求标头。*%uUser-AgentHTTP请求标头。*%D为请求提供服务所花费的时间,以微秒为单位。*%T为请求提供服务所花费的时间,以毫秒为单位,分辨率为毫秒。*%L为请求提供服务所花费的时间,以毫秒为单位的十进制数。*%^忽略此字段。*%~向前移动日志字符串,直到找到非空格(!isspace)字符。*~hX-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日志将Nginxlog_format转换为goaccess配置文件GoAccess日志格式转换案例1GoAccess日志格式转换案例2GoAccess日志格式转换案例3GoAccess日志格式转换案例4
