使用元素字段生成的字段将Logstash,json数组转换为单个事件?

时间:2016-11-17 04:50:40

标签: arrays json logstash

我使用http_poller作为输入并返回一个json数组。我正在使用默认的json编解码器。 json看起来像这样:

  

[{ “名称”: “UsedMemory”, “值”:   { “值”: “222932448”, “类型”: “java.lang.Long中”}},   { “名称”: “FreeMemory”, “值”:{ “值”: “308630048”, “类型”: “java.lang.Long中”}},   { “名称”: “堆”, “值”:{ “值”: “531562496”, “类型”: “java.lang.Long中”}},{ “名称”: “正常运行时间”, “值”:{ “值”: “29900897”, “类型”: “java.lang.Long中”}},{ “名称”: “ProcessCPU”, “值”:{ “值”: “0.15846178794662266”, “类型”:“的java .lang.Double“},   { “名称”: “GcCount”, “值”:{ “值”: “2198”, “类型”: “java.lang.Long中”}},{ “名称”: “GcTime”, “值”:{ “值”: “35658”, “类型”: “java.lang.Long中”}}]

我看到logstash通过拆分数组将每个数组元素视为一个新事件。 例如

{
    "name" => "UpTime",
    "value" => {
    "value" => "29579549",
    "type" => "java.lang.Long"
},
    "@version" => "1",
    "@timestamp" => "2016-11-17T04:12:45.492Z"
}
{
    "name" => "ProcessCPU",
    "value" => {
    "value" => "0.16146030555740817",
    "type" => "java.lang.Double"
},
    "@version" => "1",
    "@timestamp" => "2016-11-17T04:12:45.492Z"
}
...

如何让logstash(2.4)组合元素,将其视为一个事件并像这样输出

{
    "Uptime" => "29579549"
    "ProcessCPU" => ""0.16146030555740817"
    ....

}

我想我必须生成一个像这样的新字段,但要遍历数组的所有元素才能完成一个完整的事件。 { “%{name}”=> “%{[值] [值]}” ... }

1 个答案:

答案 0 :(得分:0)

在阅读了更多关于logstash和实验的内容之后,我找到了答案:

  1. 在http_poller中,将编解码器更改为“plain”
  2. 在过滤器部分中,使用json过滤器。例如
  3. json {
      source => "message"
      target => "doc"
      }
    
    1. 添加ruby代码过滤器以处理json doc字段,如下所示:
    2. ruby {
      code => "
      event['doc'].each { |elem|
      event[ elem['name']] = elem['value']['value']}
      "
      }
      
      1. 使用mutate过滤器删除文档和消息字段