首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Logstash 5中打印JSON文档

在Logstash 5中打印JSON文档
EN

Stack Overflow用户
提问于 2017-03-21 11:59:24
回答 3查看 2.2K关注 0票数 1

我使用Logstash 5来摄取包含一组JSON文档的文件,在每个事件中提取每个文档的一部分,并将它们写到另一个文件中。

我想打印输出JSON。我找到了这个线程:如何在日志中打印电子邮件正文的JSON?,它看起来很理想,但是Logstash 5现在阻止您直接访问事件属性,取而代之的是event.get和event.set方法(参见https://www.elastic.co/guide/en/logstash/current/event-api.html)。

我试图按以下方式转换上述内容:

代码语言:javascript
复制
ruby  {
    init => "require 'json'"
    code => "@pretty_body = JSON.pretty_generate(event.get('body'))
             event.set('body', @pretty_body)
            "
}

但得到

代码语言:javascript
复制
ERROR logstash.filters.ruby - Ruby exception occurred: only generation of JSON objects or arrays allowed

什么是正确的LS5等价物以上?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-03-22 04:58:50

我想你要找的是:

代码语言:javascript
复制
filter {
  ruby  {
    init => "require 'json'"
    code => "event.set('message', JSON.pretty_generate(JSON.parse(event.get('message'))))"
  }
}

这是我的测试和结果:

代码语言:javascript
复制
input: {"make_me_pretty":"test"}
{
    "@timestamp" => 2017-03-22T04:56:00.118Z,
      "@version" => "1",
       "message" => "{\n  \"make_me_pretty\": \"test\"\n}"
}
票数 4
EN

Stack Overflow用户

发布于 2017-03-23 07:00:44

谢谢你@fylie!我张贴这是另一个答案,因为我需要调整一下我正在做的事情。

我的问题是,输入文档是包装在另一个JSON文档中的JSON文档,因此内部文档是外部文档中的一个字段,其中包含元数据。因此,"message“包含的内容比我想要写入文件的内容还多。

我不得不尝试将文档简化到我想要的程度,方法是将内部doc字段解析为json过滤器到顶层,删除所有其他内容,然后漂亮地打印剩下的内容。所以我在Ruby过滤器中没什么可用的了。

为了解决这个问题,我保留了所有内容,不要使用json过滤器解析内部doc字段,而是用ruby过滤器漂亮地打印它,然后输出到仅使用文件输出插件中的{ format => %{ field file }}选项的那个字段,并且它可以按需要工作。

票数 0
EN

Stack Overflow用户

发布于 2021-11-26 13:56:26

问题是您想要将JSON输出打印到另一个文件中。只需将文件输出插件与rubydebug编解码器一起使用:

代码语言:javascript
复制
output {
    file {
         path => "./output/outputFile.json"
         codec => rubydebug
    }
}

(我使用的是logstash 7.15.2)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42926514

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档