我正在尝试设置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.
答案 0 :(得分:2)
好的,请参阅here获取完整答案。它基本归结为此。所有解析似乎都由log_format
驱动,而令牌分隔符是空格字符。因此,在上面的示例中,%d
中的第一个log_format
占位符与2014-05-14
的末尾匹配,然后停止。然后下一个标记("%r"
)在找到时间部分的开头时失败。
上述解决方案是:
date_format %Y-%m-%d
log_format %d %^ "%r" %s %h
匹配日期(仅限时间),然后忽略第一个"
字符的所有内容,然后匹配请求URL,最后匹配状态和主机地址。
请注意,除非日期和时间是单个标记(没有空格),否则您无法成功匹配时间部分。