琐碎的goaccess日志解析不工作

时间:2014-05-14 12:02:33

标签: apache logging goaccess

我正在尝试设置goaccess来分析一些高度自定义的apache输出。我不想直接写一个.goaccessrc文件,所以决定简化日志(在文本编辑器中)并慢慢开始。但是,我甚至无法得到这个微不足道的例子。我还尝试了一些标记为“已回答”的SO示例,但我仍然得到了相当简洁的“Nothing valid to process”消息。

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

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时获得Log Format Configuration窗口。我确定这是微不足道的,但我看不到它。这是我最近的终端会话的完整输出:

[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.

1 个答案:

答案 0 :(得分:2)

好的,请参阅here获取完整答案。它基本归结为此。所有解析似乎都由log_format驱动,而令牌分隔符是空格字符。因此,在上面的示例中,%d中的第一个log_format占位符与2014-05-14的末尾匹配,然后停止。然后下一个标记("%r")在找到时间部分的开头时失败。

上述解决方案是:

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

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

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