这主要是因为我无法找到答案,我想知道它是如何工作的/它的工作原理。
以下是我的过滤器示例:
(1):
if [message] in ["a","b"] {
mutate {
add_field => { "tet" => "world2" }
}
}
这对于" a"或" b"。添加了一个新字段。完美。
(2)
if [message] == "a" {
mutate {
add_field => { "tet" => "world2" }
}
}
当消息是" a"时,工作完全正常。
(3)
if [message] in ["a"] {
mutate {
add_field => { "tet" => "world2" }
}
}
这不起作用。如果消息是" a"检查仍然失败,我的活动中没有添加任何字段。
为什么最后一次检查失败?这是一个错误吗?我想,通过打字,logstash并不是" a"应该是1元素数组,但我不确定。
如果您还可以向我指出一些解释此行为的文档:)
由于
答案 0 :(得分:0)
这是一些棘手的行为,但我相信我弄清楚了为什么会这样。这可能是由于使用方括号[]
作为数组和字段名称分隔符而创建的一些非预期行为。
当括号之间有多个以逗号分隔的元素时,logstash将["a","b"]
作为数组读取。当只有一个元素时,logstash会读取字段名称,因此检查in ["a"]
会查找名为"a"
的字段及其值。
过滤器:
mutate {
add_field => {'"pop"' => "corn"}
}
if "corn" in ["pop"] {
mutate {
add_tag => ["zing"]
}
}
输入:
foo
输出:
{
"message" => "foo",
"@version" => "1",
"@timestamp" => "2016-07-05T20:08:44.297Z",
"host" => "4244ed3ff45a",
"\"pop\"" => "corn",
"tags" => [
[0] "zing"
]
}