apache - fluidd 上出现奇怪的 "pattern not match"错误

标签 apache logging fluentd

有人可以判断 fluidd 在 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>

我不明白上面出了什么问题。

最佳答案

您可以为 Apache 访问日志设置自己的格式,而不是寻找某种方法来过滤来自 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

关于apache - fluidd 上出现奇怪的 "pattern not match"错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31747632/

相关文章:

php - 使用 .htaccess 将所有 URL 定向到一页

node.js - 在新的不同文件中用 log4js 写日志?

ruby-on-rails - 管理严重错误 : logging & email

java - 对象工具不是包 scala 的成员

java - 验证 MM/dd/yyyy 格式的 Excel 日期

docker - 如何配置 apache(安装在服务器中)以在 docker 中运行 Web 应用程序(django)?

elasticsearch - Fluentd Sidecar无法将日志发送到Elasticsearch:类型删除已弃用在批量请求中指定类型

docker - 无法在 ubuntu 上使用 EFK 堆栈获取 Kubernetes 集群的日志

python - 无法获取管理员工作的静态文件

node.js - SailsJS 中的自定义记录器