我使用Logstash 5来摄取包含一组JSON文档的文件,在每个事件中提取每个文档的一部分,并将它们写到另一个文件中。
我想打印输出JSON。我找到了这个线程:如何在日志中打印电子邮件正文的JSON?,它看起来很理想,但是Logstash 5现在阻止您直接访问事件属性,取而代之的是event.get和event.set方法(参见https://www.elastic.co/guide/en/logstash/current/event-api.html)。
我试图按以下方式转换上述内容:
ruby {
init => "require 'json'"
code => "@pretty_body = JSON.pretty_generate(event.get('body'))
event.set('body', @pretty_body)
"
}但得到
ERROR logstash.filters.ruby - Ruby exception occurred: only generation of JSON objects or arrays allowed什么是正确的LS5等价物以上?
发布于 2017-03-22 04:58:50
我想你要找的是:
filter {
ruby {
init => "require 'json'"
code => "event.set('message', JSON.pretty_generate(JSON.parse(event.get('message'))))"
}
}这是我的测试和结果:
input: {"make_me_pretty":"test"}
{
"@timestamp" => 2017-03-22T04:56:00.118Z,
"@version" => "1",
"message" => "{\n \"make_me_pretty\": \"test\"\n}"
}发布于 2017-03-23 07:00:44
谢谢你@fylie!我张贴这是另一个答案,因为我需要调整一下我正在做的事情。
我的问题是,输入文档是包装在另一个JSON文档中的JSON文档,因此内部文档是外部文档中的一个字段,其中包含元数据。因此,"message“包含的内容比我想要写入文件的内容还多。
我不得不尝试将文档简化到我想要的程度,方法是将内部doc字段解析为json过滤器到顶层,删除所有其他内容,然后漂亮地打印剩下的内容。所以我在Ruby过滤器中没什么可用的了。
为了解决这个问题,我保留了所有内容,不要使用json过滤器解析内部doc字段,而是用ruby过滤器漂亮地打印它,然后输出到仅使用文件输出插件中的{ format => %{ field file }}选项的那个字段,并且它可以按需要工作。
发布于 2021-11-26 13:56:26
问题是您想要将JSON输出打印到另一个文件中。只需将文件输出插件与rubydebug编解码器一起使用:
output {
file {
path => "./output/outputFile.json"
codec => rubydebug
}
}(我使用的是logstash 7.15.2)
https://stackoverflow.com/questions/42926514
复制相似问题