我想写一个简单的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/