Logstash - 将 JSON 转换为可读格式 - 在记录到文件期间

Logstash - convert JSON to readable format - during logging to a file

我的 Logstash 配置如下:

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

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

我正在尝试在 "logfile.log" 中记录更易读的消息。

所以如果我的输入数据是 {"attr1":"val1","attr2":"val2"}

我想在日志中写成:

attr1_val1 | attr2_val2

基本上将数据从 JSON 转换为可读格式。

我应该在我的 Logstash 配置中修改什么才能做到这一点?

file 输出的 message_format 选项允许您指定每条消息的格式。如果您的消息的密钥是固定的并且是已知的,您可以简单地这样做:

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

要处理任意字段,您可能必须使用 ruby filter 编写一些自定义 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}"
    ...
  }
}