我试图设置goaccess来分析一些高度定制的apache输出。我不想直接写.goaccessrc文件,所以决定简化日志(在文本编辑器中),然后慢慢开始。然而,我甚至不能让这个微不足道的例子起作用。我也尝试过一些例子,标记为“应答”,但我仍然得到了相当简洁的“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配置窗口。我肯定这是件微不足道的事,但我就是看不见。下面是我最近的终端会话的全部输出:
[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.发布于 2014-05-19 12:30:46
好的,完整的答案见这里。基本上可以归结为这一点。所有解析似乎都是由log_format驱动的,标记分隔符是空格字符。因此,在上面的示例中,log_format中的第一个log_format占位符匹配到2014-05-14的末尾,然后停止。然后,当找到时间部分的开头时,下一个令牌("%r")失败。
解决上述问题的办法是:
date_format %Y-%m-%d
log_format %d %^ "%r" %s %h它只匹配日期(仅与时间匹配),然后忽略直到第一个"字符的所有内容,然后匹配请求URL,最后匹配状态和主机地址。
注意,除非日期和时间是单个标记(没有空格),否则无法成功地匹配时间部分。
https://stackoverflow.com/questions/23654204
复制相似问题