奇怪的"模式不匹配"流利的错误

时间:2015-07-31 13:40:07

标签: apache logging 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>

我无法弄清楚上面的错误。

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

您可以为自己的format设置自己的<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> ,而不是找到从ELB-HealthChecker过滤掉日志的方法,而是在前几个字段方面稍微灵活一点。从collectd获取/ server-status检查时遇到了同样的错误(使用它监视SignalFx)。

像这样设置源:

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"

以及:

format

您可以使用Fluentular测试dependencies { wearApp project(path: ':wear', configuration: 'productionRelease') ... } 正则表达式匹配。

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