检查数组的 Logstash 仅适用于 1 个以上的元素
Logstash in check for array only works with more than 1 element
这主要是因为我找不到答案,我想知道它是如何工作的works/why。
这是我的过滤器示例:
(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 元素数组,但我不确定。
如果您还可以指出一些解释此行为的文档:)
谢谢
这是一些棘手的行为,但我相信我已经弄清楚了为什么会发生这种情况。这可能是由于双重使用方括号 []
作为数组和字段名称分隔符而造成的一些意外行为。
当括号之间有多个以逗号分隔的元素时,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"
]
}
这主要是因为我找不到答案,我想知道它是如何工作的works/why。
这是我的过滤器示例:
(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 元素数组,但我不确定。
如果您还可以指出一些解释此行为的文档:)
谢谢
这是一些棘手的行为,但我相信我已经弄清楚了为什么会发生这种情况。这可能是由于双重使用方括号 []
作为数组和字段名称分隔符而造成的一些意外行为。
当括号之间有多个以逗号分隔的元素时,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"
]
}