2017-02-16 68 views
0

我試圖找出如何在Logstash包含所有事件的一個單行JSON文件中讀取Logstash:如何閱讀單行JSON

樣品輸入:

{"metadata": {"metadata fields": "metadata data"},"results": [{"events":[{"event fields": "event data"}, {"event fields": "event data"}}],"field": {"more fields": "data"}} 

擴展JSON:

{ 
    "metadata": { 
     "metadata fields": "metadata data" 
    }, 
    "results": [{ 
      "events": [{ 
        "event fields": "event data" 
       }, { 
        "event fields": "event data" 
       } 
      }], "field": { 
      "more fields": "data" 
     } 
    } 

我剛纔使用JSON編解碼器然而,當我運行Logstash它掛起後打印成功啓動嘗試。另一件我已經嘗試過的工具是在JSON結尾處添加一個換行符,但這在生產中不起作用,因爲我無法控制日誌的來源。

有沒有人有任何關於如何通過Logstash解析這些日誌的建議?以下是我的配置文件。提前致謝!

配置

input { 
    file { 
     path => "C:/Folder/*.json" 
     sincedb_path => "C:\nul" 
     start_position => "beginning" 
     codec => "json" 
     type => "data" 
    } 
} 
output { 
    stdout { codec => rubydebug } 
} 
+0

這不是有效的JSON可能是它不起作用的原因 – Fairy

+0

你有什麼想法我可以怎麼解析它 – Mielzus

+0

一些精心設計的'grok'過濾器將完成這項工作。 – Fairy

回答

0

您輸入缺少一個括號,它應該有一個:

{"metadata": {"metadata fields": "metadata data"},"results": [{"events":[{"event fields": "event data"}, {"event fields": "event data"} HERE ] }],"field": {"more fields": "data"}} 

如果丟失的括號是在你所有的輸入文件相同的事件面前,你可以嘗試gsub

例如:

filter { 
mutate { 
    gsub => [ "message", "\"}}\],\"field\"\:", "\"}\]}\],\"field\"\:" ] 
} 
} 

這個匹配「}}],」 場「:圖案,並用類似的一個替換它,但在適當的地方加入[這種突變之後。你可以繼續使用json過濾器來發送消息