Удалить символы из JSON

Я пытаюсь разобрать некоторый json с помощью logstash, в настоящее время файл, который мне нравится вводить, имеет следующую структуру (упрощенную):

-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? Любые предложения, как это сделать?

Как сделать HTTP-запрос в Javascript?
Как сделать HTTP-запрос в Javascript?
В JavaScript вы можете сделать HTTP-запрос, используя объект XMLHttpRequest или более новый API fetch. Вот пример для обоих методов:
0
0
145
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я бы использовал dissect фильтр

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

json {
  source => "msg"
}

Круто, рад, что помогло!

Val 02.04.2021 20:33

Другие вопросы по теме