Apachepipe道日志logging失败

我想写一个简单的Apachepipe道日志logging指令,我正在失败。 我只想grep出200个响应代码集中我的日志文件到ELK。 这是我创build的自定义日志格式。

LogFormat "%s %h %l %u %t \"%r\" %b" remove 

这是pipe道日志

 CustomLog "|/bin/grep -v '^200' /var/log/apache2/pi-mirror.com/access.log" remove 

我在apache2错误日志中得到以下错误。

 AH00106: piped log program '/bin/grep -v '^200' /var/log/apache2/pi-mirror.com/access.log' failed unexpectedly 

我似乎无法弄清楚这里发生了什么。 我通过apaches文档阅读pipe道日志logging,我找不到任何可能做错的事情。

这在Apache2 2.4.7上运行

预先感谢您的帮助。

注意

进一步研究,我发现apache 2.2和apache 2.4改变了这种做法。 以前,shell是自动生成的,但在新的2.4版本中,您必须手动指定一个shell。 结果我改变了我的语法

 CustomLog "|$/bin/grep -v '^200' /var/log/apache2/pi-mirror.com/access.log" remove 

这个改变做了以下。 由于某种原因,当我重新启动apache2它吐出所有的输出到stdout,我从terminal看到这一切。 但是,然后失败,相同的错误信息。 这几乎就像apache没有真正开始这个重复的,这让我想知道如果我需要做别的事情来解决这个问题。

问题在于你的grep试图过滤磁盘上的日志,但是当你使用带有pipe道的CustomLog时,所有新的日志消息被发送到那个文件而不是文件,所以文件不存在。 你可能真正想要的是:

 CustomLog "|/bin/grep -v '^200' | cat >> /var/log/apache2/pi-mirror.com/access.log" remove 

那将会是一个反向grep为200(你原来的),然后它会回显到日志文件。 欲了解更多信息,请参阅: https : //workshop.avatarnewyork.com/post/filtering-apache-piped-logs-to-centralize-logging-of-errors-and-warnings/