【发布时间】: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 => rubydebug { metadata => true } } }
-
@AlainCollins 我已经验证了元数据,是的,它包含了
formatter字段 -
@AlainCollins 数据很好,问题是如何将数据分配给
message字段,我看过doc,似乎Logstash 更喜欢通过字符串格式分配数据和迷恋 grok match 风格
标签: logstash elastic-stack logstash-grok filebeat