KV 过滤器不包括空间值

For*_*e85 1 logstash

Logstashkv过滤器不包含带空格的值。请检查下面 Logstash 生成的输入和输出消息。所需的输出应包含空格。

输入消息:

key1=first value key2=second value key3=value3
Run Code Online (Sandbox Code Playgroud)

期望的输出:

{
    "key1" => "first value",
    "key2" => "second value",
    "key3" => "value3",
    "message" => "key1=first value key2=second value key3=value3"
}
Run Code Online (Sandbox Code Playgroud)

获得的输出:

{
    "key1" => "first",
    "key2" => "second",
    "key3" => "value3",
    "message" => "key1=first value key2=second value key3=value3"
}
Run Code Online (Sandbox Code Playgroud)

我需要将值中的空格包含在字段中。如何在 Logstash 中执行此操作?

bau*_*dsp 5

过滤kv器用空格分隔键值对(默认情况下)。所以在解析时key1=first value key3=value3,它会选择key1=first, valueand key3=value3value被丢弃,因为它没有键值分隔符 ( =),然后处理这两对,给出"key1" => "first"& "key3" => "value3"

这不能用 kv 滤波器来解决;您必须先修改输入,然后再将其发送到kv, ,如下所示: => 有了这个,您就可以像在配置中一样key1=first value, key2=second value, key3=value3使用。,field_splitkv

您可以在过滤器mutate之前使用在键值对之间kv添加,如下所示:,

mutate {
    gsub => ["message", "(\S+=)", ", \1"]
}
Run Code Online (Sandbox Code Playgroud)

这会将符号之前的所有非空白字符替换=为自身前面的,

然后使用:

kv {
    field_split => ","
}
Run Code Online (Sandbox Code Playgroud)