琐碎的goaccess日志解析不起作用



我试图设置goaccess来分析一些高度定制的apache输出。我不希望直接编写.goaccessrc文件,所以决定简化日志(在文本编辑器中)并慢慢开始。然而,我甚至不能让这个微不足道的例子工作。我也尝试了一些例子,从SO标记为"回答",但我仍然得到相当简洁的"没有有效的处理"消息。

下面是我的简化日志文件中的一行:

2014-05-14 06:26:18 "GET / HTTP/1.1" 200 37.157.246.146

这里是我的。goaccessrc:

date_format %Y-%m-%d %H:%M:%S
log_format %d "%r" %s %h

我确信.goaccessrc文件在正确的位置并被读取,因为如果我删除它,我在运行goaccess时得到日志格式配置窗口。我肯定是小事,但我就是看不出来。以下是我最近的终端会话的完整输出:

[root@dev ~] # cat .goaccessrc
date_format %Y-%m-%d %H:%M:%S
log_format %d "%r" %s %h
[root@dev ~] # cat /var/log/apache2/simple.log
2014-05-14 06:26:18 "GET / HTTP/1.1" 200 37.157.246.146
[root@dev ~] # goaccess -f /var/log/apache2/simple.log
GoAccess - version 0.7.1 - Apr 18 2014 21:28:20
An error has occurred
Error occured at: goaccess.c - render_screens - 456
Message: Nothing valid to process.

好的,完整答案见这里。基本上可以归结为这一点。所有解析似乎都是由log_format驱动的,令牌分隔符是空格字符。所以在上面的例子中,log_format中的第一个%d占位符匹配到2014-05-14的末尾,然后停止。然后下一个令牌("%r")在找到时间部分的开始时失败。

解决上述问题的方法是:

date_format %Y-%m-%d
log_format %d %^ "%r" %s %h

匹配日期(只匹配日期,不匹配时间),然后忽略直到第一个"字符的所有内容,然后匹配请求URL,最后匹配状态和主机地址。

请注意,除非日期和时间是单个标记(没有空格),否则您无法成功匹配时间部分。

相关内容

  • 没有找到相关文章

最新更新