首页 > 解决方案 > 从 JSON 中删除字符

问题描述

我尝试用logstash解析一些json,目前我喜欢输入的文件具有以下结构(简化):

-4: {"audit":{"key1":"value1","key2":"value2"}}
-4: {"audit":{"key1":"value1","key2":"value2"}}

因此我需要删除 -4: 前缀以便使用 json 正确解析文件。不幸的是,我不能将 json 编解码器用于输入插件,因为它的 json 格式不正确。因此我对管道的要求是:

  1. 删除 -4: 前缀
  2. 将事件编码为 json
  3. 进行适当的突变

我尝试使用以下管道,这给了我一个解析错误:

input {
  tcp {
    port => 5001
    codec => multiline {
      pattern => "^-\d:."
      what => previous
    }
    #codec => json_lines
    type => "raw_input"
  }
}

filter {
  if [type] == "raw_input" {
    mutate {
      gsub => ["message", "^-\d:.", ""]
    }
  }

  json {
    source => "message"
  }

  mutate {
    convert => { "[audit][sequenceNumber]" => "integer" }
    add_field => { "test" => "%{[audit][sequenceNumber]}"}
  }
}

output {
  file {
    path => "/var/log/logstash/debug-output.log"
    codec => line { format => "%{message}" }
  }
}

是否可以使用logstash 实现这一目标?有什么建议怎么做吗?

标签: jsonelasticsearchlogstashelastic-stack

解决方案


我会使用dissect过滤器

if [type] == "raw_input" {
  dissect {
    mapping => {
      "message" => "-%{num}: %{msg}"
    }
  }
}

json {
  source => "msg"
}

推荐阅读