我使用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}”=> “%{[值] [值]}” ... }
答案 0 :(得分:0)
在阅读了更多关于logstash和实验的内容之后,我找到了答案:
json { source => "message" target => "doc" }
ruby { code => " event['doc'].each { |elem| event[ elem['name']] = elem['value']['value']} " }