apache - 简单的 goaccess 日志解析不起作用

标签 apache logging goaccess

我正在尝试设置 goaccess 来分析一些高度定制的 apache 输出。我不希望有机会直接编写 .goaccessrc 文件,因此决定简化日志(在文本编辑器中)并慢慢开始。但是,我什至无法让这个简单的例子发挥作用。我还尝试了一些标记为“已答复”的示例,但我仍然收到相当简洁的“没有有效的处理”消息。

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

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 时看到“日志格式配置”窗口。我确信这是一件微不足道的事情,但我就是看不到它。这是我最近的终端 session 的完整输出:

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

最佳答案

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

上述问题的解决方案是:

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

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

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

关于apache - 简单的 goaccess 日志解析不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23654204/

相关文章:

c++ - 编译时优化 - 从发布二进制文件中删除调试打印

java - 使用 log4j 配置进行日志记录不起作用

生成 Go Access 报告的 Cron 作业不起作用

logging - 使用goaccess分析nginx日志

apache - 使用 SetEnvIf 根据 SSL_CLIENT_M_SERIAL 值更改变量

php - Symfony 应用程序 403 禁止错误 : You don't have permission to access/on this server

javascript - CORS 在 Chrome 中不工作

linux - 带有重定向的 .htaccess 不起作用

Java 日志记录 : show the source line number of the caller (not the logging helper method)

bash - Bash 脚本上的 Cron Pipe zcat 不起作用