kv
过滤Logstash不包含带空格的值。请检查下面的输入消息和Logstash生成的输出。所需的输出应包括空格。
输入讯息:
key1=first value key2=second value key3=value3
必需的输出:
{
"key1" => "first value",
"key2" => "second value",
"key3" => "value3",
"message" => "key1=first value key2=second value key3=value3"
}
获得输出:
{
"key1" => "first",
"key2" => "second",
"key3" => "value3",
"message" => "key1=first value key2=second value key3=value3"
}
我需要将空间值包含在字段中。如何在Logstash中执行此操作?
答案 0 :(得分:1)
kv
过滤器将键值对(默认情况下)与空格分开。因此,在解析key1=first value key3=value3
时,它会选择key1=first
,value
和key3=value3
。 value
被丢弃,因为它没有键值分隔符(=
),然后处理这两对,给出"key1" => "first"
& "key3" => "value3"
。
使用kv过滤器无法解决此问题,您必须在将输入发送到kv
之前修改输入,如下所示:key1=first value, key2=second value, key3=value3
=>有了这个,您就可以在,
配置中将field_split
用作kv
。
您可以在kv
过滤器之前在键值对之间添加,
:
mutate {
gsub => ["message", "(\S+=)", ", \1"]
}
这会在=
符号之前替换所有非空格字符,其前面有,
。
然后使用:
kv {
field_split => ","
}