1

我有一个 Logstash 配置,如下所示:

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

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

我正在尝试将消息记录在更具可读性的“logfile.log”中。

因此,如果我的输入数据类似于 {"attr1":"val1","attr2":"val2"}

我想在日志中写成:

attr1_val1 | attr2_val2

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

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

4

1 回答 1

4

文件输出的 message_format 选项允许您指定每条消息的格式。如果您的消息的密钥是固定的并且已知,您可以简单地执行以下操作:

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}"
    ...
  }
}
于 2015-04-11T14:50:18.853 回答