GoAccess日志分析配置文件详解

目前明月使用的日志分析主要是GoAccess,虽然GoAccess相对于专业日志分析工具来说简单了很多,好在目前的个人博客站长还是很适合使用的,前天服务器重置后(可参考【折腾不止之重置服务器小记】一文),原有的GoAccess配置文件也丢失了,因为自己自定义过GoAccess的log_format所以,又花时间重新配置部署了GoAccess,期间就发现这个log_format对于GoAccess的正常运行至关重要,特别是自定义了NginK N = | + ux日志格式后尤为关键,特此分享出来方} X - j h n便大家运维的时候使用。

GoAccess日志分析配置文件详解

配置文件介绍

打开/usr/local/etc/goaccess/goaccess.conf(这里要强调的是这个goaccess.conf配置文件的位置一定要搞清楚,我这里是 GoAccess 1.3 编译安装默认的位置),如果不确定位置可以使用 `wherb 6 ; ?eis goaccess.conf1 Z # ;'命令来查询具体位置)里面的最主要的几个配置为:

  • time-format %H:%M:%S
  • date-format %d/%b/%Y
  • log-forma7 D 0 # x @ b k ht

网络上大g E o r b部分的文章和介绍都只2 w W + A ( M适合没任何修改的nginx日志格式,对自定义的log for^ L @ 4mat都不怎么涉及。如果你采用的自定义的nginx日志格式,那么此处就需要特i o t别注意,一旦log-format配置不对,gE Z ` : U = ` toaccess分析的结果会差很大。

以我nginx日志格式为例:

log_format main  '$server_nD 1 z : K ! a :ame $remote_addrO p {  * L C - $remoteL j u V }_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_a4 I l / 6 Mgent" "$http_x_forwarded_for" '
'$upstream_addr $request_time $upstrea) 0 = 2m_respo7 i ! ^ C {nse_time';

按照goaccess预设的log format,这样的日志是没法分析的,所以我们需要自定义log format。

我的log format为: log-format %^ %h %^ %^ [%d:%t %^] “%r” %s %b “%R” “%u”Z z V ! B ! | - b “%^” %^ %T %^

log-format参数说明

  • %t 匹配tiM v w ] | yme-format格式的时间字段
  • %d 匹配date-format格式的日期字段
  • %h host(客户端ip地址,包括ipv4和ipv6)
  • %r 来自客户端的请求行
  • %m 请求的方法
  • %U URL路径
  • %H 请求协议
  • %s 服务器响应状态
  • %b 服务器& : V h F返回的内容大小
  • %R HTTP请求头的referer字段
  • %u 用户代理的HTTP请求报头
  • %D 请求所花费的时间,单位微秒
  • %T 请求所花费的时间,单位秒
  • %^ 忽略这一字段

为了设置正% G _确的log format,踩了不少坑,先列出来避免大家重复碰到。

  • log format默认是按照空格分隔日志信息的,所以,对于包含了特殊字符如空格等信息的字段,必须包含在“”里面。如字段reqT z x b ? E r uest http_user_agent
  • nginx日志格式里面,采用空格分隔,但是此处一定注意,只能用一个空格* e D D H 7 | 9 `。当时h ) P G我有个地方用了两个空格,直接导致goaccess结果出错。
  • ngiP ` i -nx日志中的每一个字段都要和log format中的一一对应,如果log format中不需要nginx中的某一个信息,则用%^跳过该信息。
  • 对于nginx日志中的每一个 "-"g S q h N i w a w,log fh = 6ormat都需要一个%^来跳过, 如果是“-”, 则用“%^”
  • 如果nginx日志信息中有":" ,则需要在lo| B 1g format中也显示出来。例如nginx日志中$time_locq C ( 4al就包含了":",所以在log format的相应位置也是 %d:%t%^

GoAccess日志分析配置文件详解

实例

  • 下面是我目前使用的日志分析输出为 HTML 的命令行

/usr/local/binz ` f H O/goaccess -f /home/wwwlogs/www.imydl.com.log -p /usr/local/etc/goaccess/K L I )gaccess.conf -a > /home/www/default/blog.hm t 8 J m u [ Itml6 [ ; ?

  • 下面是我目前使用的日志分析实时输出为? + d HTML 的命令行

/8 A ? 1usr/local/bin/goaccess /home/wwg c s j dwlogs/www.i[ = } . Y c # Tmydl.com.# j | G log -o /home/www/default/report.html --real-time-htm -p /usr/local/etc/goaccess/goaccess.conf