Logstash Filebeat如何指定日志存储的匹配规则

Logstash Filebeat如何指定日志存储的匹配规则,logstash,elastic-stack,logstash-grok,filebeat,Logstash,Elastic Stack,Logstash Grok,Filebeat,我想让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:l

我想让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"]
这是我的日志存储配置:

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

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

output {
  file {
    path => "/tmp/log-test.log"
    codec => rubydebug { metadata => true }
  }
}
因此,我想让grok知道我的匹配规则内容(
消息
字段)是
“%{TIMESTAMP\u ISO8601:TIMESTAMP}-%{NOTSPACE:module}-%{LOGLEVEL:level}-%{NOTSPACE:filename}-%{greedyddata:log\u message}”

但是上面的设置不起作用,我想知道如何实现这样的功能?还是有可能做到


谢谢

由此可知,“不支持具有动态%{field}引用的Grok表达式”。这篇文章的原作者提出了一个github问题,现在(一年后仍未解决)。

验证元数据是否如预期的那样出现:output{stdout{codec=>rubydebug{metadata=>true}}}@AlainCollins我已经验证了元数据,是的,它包含了
格式化程序
field@AlainCollins数据很好,问题是如何将数据分配到
消息
字段,我看了一下,似乎Logstash更喜欢通过字符串格式分配数据,这与grok match Style非常相似谢谢你的回复。我还收到了一位弹性成员的回复,似乎不可能使用动态%{field}作为grok模式,请参阅我在弹性讨论中的帖子