【问题标题】:Logstash wrap json objectLogstash 包装 json 对象
【发布时间】:2019-10-10 23:29:10
【问题描述】:

我想包装一个通过 http 侦听器插件发送到 Logstash 的 json 对象,以便我可以将其发送到 Splunk。我得到一个看起来像这样的对象:

{ 
   "foo" : "text", 
   "bar" : "text" 
} 

我需要它看起来像:

{ "event" : 
  { 
     "foo" : "text", 
     "bar" : "text"
  } 
} 

我只是找不到如何访问该顶级对象。

配置:

input {
  http {
    port => 8080
    codec => "json"
  }
}

filter {
  mutate {
    rename => { "WHAT GOES HERE???" => "event" }
  }
}

output {
  stdout { codec => json }
}

非常感谢!

【问题讨论】:

    标签: json logstash dplyr


    【解决方案1】:

    您可以使用renameadd_field

    rename

    mutate {
        rename => { "foo" => "[event][foo]" }
        rename => { "bar" => "[event][bar]" }
    }
    

    add_field

    mutate {
        add_field => { "[event][foo]" => "%{[foo]}" }
        add_field => { "[event][bar]" => "%{[bar]}" }
    }
    

    如果您使用add_field,则foobar 字段会保留在消息中,您可以使用remove_field 将其删除

    mutate {
        remove_field => [ "foo", "bar" ]
    }
    

    【讨论】:

    • 非常感谢,这会起作用,但是你是否知道我是否可以以某种方式获取诸如“*”之类的内容或所有字段,我的对象有更多的键,然后只有 foobar 我希望避免将所有内容都放入此配置中。
    • 你能分享一个你的对象的样本吗?如果它是一个 json 对象,也许您可​​以使用 json 过滤器对其进行解析并将结果存储在 target field 中。
    【解决方案2】:

    另一种优雅的方法是在过滤器中使用 json 目标:

    filter {
       json {
          source => "message"
          target => "event"
       }
    }
    

    https://www.elastic.co/guide/en/logstash/current/plugins-filters-json.html#plugins-filters-json-target

    【讨论】:

      猜你喜欢
      • 2016-08-01
      • 1970-01-01
      • 2016-03-22
      • 2018-03-21
      • 1970-01-01
      • 1970-01-01
      • 2018-03-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多