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}"
...
}
}
我的 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}"
...
}
}