Logstash — конвертировать JSON в читаемый формат — во время записи в файл

У меня есть конфигурация Logstash, как показано ниже:

 input {
  udp {
  port => 5043
  codec => json
  }
 }

 output {
  file {
  path => "/logfile.log"
  }
 }

Я пытаюсь регистрировать сообщения в «logfile.log», которые более читабельны.

Итак, если мои входные данные похожи на {"attr1":"val1","attr2":"val2"}

Я хочу записать это в журнал как:

attr1_val1 | attr2_val2

В основном преобразование данных из JSON в читаемый формат.

Что мне нужно изменить в моей конфигурации Logstash, чтобы сделать это?


person sunsin1985    schedule 11.04.2015    source источник


Ответы (1)


Опция message_format выходного файла file позволяет вам указать форматирование каждого сообщения. . Если ключи ваших сообщений фиксированы и известны, вы можете просто сделать это:

output {
  file {
    message_format => "attr1_%{attr1} | attr2_%{attr2}"
    ...
  }
}

Для обработки произвольных полей вам, вероятно, придется написать собственный код Ruby, используя фильтр ruby. Например, следующий фильтр дает те же результаты, что и выше, но не требует жесткого кодирования имен полей:

filter {
  ruby {
    code => '
      values = []
      event.to_hash.each { |k, v|
        next if k.start_with? "@"
        values << "#{k}_#{v.to_s}"
      }
      event["myfield"] = values.join(" | ")
    '
  }
}

output {
  file {
    message_format => "%{myfield}"
    ...
  }
}
person Magnus Bäck    schedule 11.04.2015