【问题标题】:How can Filebeat specify match rules to LogstashFilebeat如何为Logstash指定匹配规则
【发布时间】:2019-04-15 03:17:45
【问题描述】:

我想让Logstash'gork过滤器使用Filebeat给的匹配规则

这是我的 Filebeat 配置:

filebeat.inputs:
- type: log
  enabled: true
  paths:
    - /root/Log-test/test.log
  fields:
    "@metadata":
        formatter: "%{TIMESTAMP_ISO8601:timestamp} - %{NOTSPACE:module} - %{LOGLEVEL:level} - %{NOTSPACE:filename} - %{GREEDYDATA:log_message}"
  fields_under_root: true

output.logstash:
  hosts: ["localhost:5045"]

这是我的 Logstash 配置:

input {
    beats {
        port => "5045"
    }
}

filter {
  grok {
    match => { "message" => "%{[@metadata][formatter]}" }
  }
}

output {
  file {
    path => "/tmp/log-test.log"
    codec => rubydebug { metadata => true }
  }
}

所以,我想让 grok 知道我的匹配规则内容(message 字段)是 "%{TIMESTAMP_ISO8601:timestamp} - %{NOTSPACE:module} - %{LOGLEVEL:level} - %{NOTSPACE:filename} - %{GREEDYDATA:log_message}"

但是上面的设置不起作用,我想知道我怎样才能实现这样的功能?或者有可能做到吗?

谢谢!

【问题讨论】:

  • 验证元数据是否按预期出现:输出 { stdout { codec => ruby​​debug { metadata => true } } }
  • @AlainCollins 我已经验证了元数据,是的,它包含了formatter 字段
  • @AlainCollins 数据很好,问题是如何将数据分配给message 字段,我看过doc,似乎Logstash 更喜欢通过字符串格式分配数据和迷恋 grok match 风格

标签: logstash elastic-stack logstash-grok filebeat


【解决方案1】:

来自posting,“不支持具有动态 %{field} 引用的 Grok 表达式”。该帖子的原作者打开了一个github问题,现在是here(一年后仍未解决)。

【讨论】:

  • 感谢您的回复。我也收到了 Elastic 成员的回复,似乎无法使用动态 %{field} 作为 grok 模式,请参阅我在 Elastic 讨论中的帖子here
猜你喜欢
  • 2015-02-24
  • 2017-03-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-20
  • 1970-01-01
相关资源
最近更新 更多