值有逗号的 Logstash kv 过滤器问题

Logstash kv filter issue with value having comma

我的 kv 过滤器的字段拆分如下所示 -

field_split => ", "

field_split 基于逗号后跟 space。但我的价值观之一是 json 字符串。而 logstash 的输出似乎在遇到第一个逗号后忽略了该值。 示例 - 日志的 mdc 字段类似于: abc=abcvalue 请求={"key1":"value1","key2":"value2"}

它解析成的是(输出指向elasticsearch): "abc": "abcvalue" "request": "{"key1":"value1""

如何让请求字段变成下面这样? "request": "{"key1":"value1","key2":"value2"}"

如果你确实有 json,你可以匹配 json 并使用 json 过滤器解析它。

例如:

filter {
  grok {
     match => ["request=(?<request_json>{[^}]+})"] // match from { to first } and put in request_json
  }
  json {
     source => "request_json"
     target => "request"
     remove_field => ["request_json"]
  }
}