2017-02-16 61 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过滤器来发送消息