我想知道是否可以使用Logstash消息中的字段作为Grok模式的输入 . 假设我有一个看起来像这样的条目:
{
"message":"10.1.1.1",
"grok_filter":"%{IP:client}"
}
我希望能够做到这样的事情:
filter {
grok {
match => ["message", ["%{grok_filter}"]]
}
}
问题是这会导致Logstash崩溃,因为它似乎将“%”视为Grok过滤器本身而不是grok_filter的值 . Logstash崩溃后我得到以下内容:
The error reported is:
pattern %{grok_filter} not defined
无论如何从Grok过滤器块中获取字段的值并将其用作Grok模式的输入?
1 回答
答案是否定的 - 初始化过滤器时,
grok
过滤器会编译其模式 . 如果你需要做类似的事情,你必须编写自己的过滤器,每次编译模式(并支付性能损失) .如果不知道为什么要这样做,很难推荐最好的行动方案 . 如果你的模式数量有限,你可以设置一个
grok_filter_type
参数然后有一堆if [grok_filter_type] == 'ip' { grok { ... } }
类型的东西 .这是一个自定义过滤器,可以让你做你想要的 - 它主要是一个grok代码的副本,但有一些变化/简化 . 我测试了它,它似乎对我有用 .