4

有人可以判断 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\""

虽然这是一个格式正确的 apache2 日志:

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

我无法弄清楚上面有什么问题。

4

2 回答 2

0

您可以为 Apache 访问日志设置自己的方法,而不是寻找某种方法从 ELB-HealthChecker 中过滤掉日志,format这在前几个字段方面更加灵活。从 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"

您可以使用Fluentularformat测试正则表达式匹配。

参见相关:Fluentd apache log format with multiple host ip

于 2017-08-08T21:09:47.443 回答
0

问题是这些ELB-HealthChecker行日志有一个空的referer ip 字段。然后日志与 fluentd 的 apache2 日志格式不匹配。

所以解决这个问题的方法是使用ELB-HealthChecker用户代理过滤日志。

于 2015-07-31T15:29:35.037 回答