【问题标题】:Trivial goaccess log parsing not working琐碎的 goaccess 日志解析不起作用
【发布时间】:2014-07-02 11:34:08
【问题描述】:

我正在尝试设置 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.

【问题讨论】:

    标签: apache logging goaccess


    【解决方案1】:

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

    上面的解决方法是:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-08-06
      • 1970-01-01
      • 2013-12-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-14
      相关资源
      最近更新 更多