apache Fluentd上出现奇怪的“模式不匹配”错误

kxkpmulp  于 2022-11-16  发布在  Apache
关注(0)|答案(2)|浏览(352)

有人能告诉我们fluentd在td-agent.log文件中引发此错误是否正常吗?

2015-07-31 13:15:19 +0000 [warn]: pattern not match: "- - - [31/Jul/2015:13:15:19 +0000] GET http://172.31.108.218/ HTTP/1.1 200 0 \"-\" \"ELB-HealthChecker/1.0\""

虽然这是一个格式良好的apache 2日志:

- - - [31/Jul/2015:13:15:19 +0000] GET http://172.31.108.218/ HTTP/1.1 200 0 \"-\" \"ELB-HealthChecker/1.0\"

下面是源配置:

<source>
  type tail
  format apache2
  path /var/log/varnish/varnishncsa.log
  pos_file /var/log/td-agent/tmp/access.log.pos
  tag "apache2.varnish-access"
</source>

我想不出上面有什么问题。

moiiocjp

moiiocjp1#

您可以为Apache访问日志设置自己的format,而不是从ELB-HealthChecker中过滤出日志,这在前几个字段方面更灵活一些。我在从collectd获取/server-status检查时遇到了同样的错误(使用它来监视SignalFx)。
如下设置源:

<source>
  type tail
  format /^(?<host>[^ ]*(?:\s+[^ ]+)*) [^ ]* (?<user>[^ ]*) \[(?<time>[^\]]*)\] "(?<method>\S+)(?: +(?<path>[^ ]*) +\S*)?" (?<code>[^ ]*) (?<size>[^ ]*)(?: "(?<referer>[^\"]*)" "(?<agent>[^\"]*)")?$/
  time_format %d/%b/%Y:%H:%M:%S %z
  path /var/log/apache2/access.log
  pos_file /var/log/td-agent/apache2.pos
  tag apache2.log
</source>

允许两个日志行,如:

172.18.0.2:80 127.0.0.1 - - [08/Aug/2017:19:58:38 +0000] "GET /server-status?auto HTTP/1.1" 200 508 "-" "collectd/5.7.2.sfx0"

以及:

192.168.0.1 - - [28/Feb/2013:12:00:00 +0900] "GET / HTTP/1.1" 200 777 "-" "Opera/12.0"

您可以使用Fluentular测试format正则表达式匹配。
参见相关:Fluentd apache log format with multiple host ip

9fkzdhlc

9fkzdhlc2#

问题是这些ELB-HealthChecker行日志的引用IP字段为空。然后日志与fluentd的apache 2日志格式不匹配。
因此,解决此问题的方法是使用ELB-HealthChecker用户代理过滤日志。

相关问题