让Logstash读取JSON

时间:2014-02-20 12:04:36

标签: json logstash

我正在尝试使用logstash来分析包含JSON对象的文件,如下所示:

{"Query":{"project_id":"a7565b911f324a9199a91854ea18de7e","timestamp":1392076800,"tx_id":"2e20a255448742cebdd2ccf5c207cd4e","token":"3F23A788D06DD5FE9745D140C264C2A4D7A8C0E6acf4a4e01ba39c66c7c9cbd6a123588b22dc3a24"}}
{"Response":{"result_code":"Success","project_id":"a7565b911f324a9199a91854ea18de7e","timestamp":1392076801,"http_status_code":200,"tx_id":"2e20a255448742cebdd2ccf5c207cd4e","token":"3F23A788D06DD5FE9745D140C264C2A4D7A8C0E6acf4a4e01ba39c66c7c9cbd6a123588b22dc3a24","targets":[]}}
{"Query":{"project_id":"a7565b911f324a9199a91854ea18de7e","timestamp":1392076801,"tx_id":"f7f68c7fb14f4959a1db1a206c88a5b7","token":"3F23A788D06DD5FE9745D140C264C2A4D7A8C0E6acf4a4e01ba39c66c7c9cbd6a123588b22dc3a24"}}

理想情况下,我希望Logstash能够理解JSON。 我使用了以下配置:

input {
 file {
    type => "recolog"

    format => json_event

    # Wildcards work, here :)
    path => [ "/root/isaac/DailyLog/reco.log" ]
  } 
}

output {
  stdout { debug => true }
  elasticsearch { embedded => true }
}

我根据此Apache recipe

构建了此文件

当使用debug = true运行logstash时,它会读取如下对象: 我怎么能根据我的JSON文件看到kibana GUI中的统计数据,例如Query对象的数量,甚至是基于时间戳的查询。 现在,看起来它理解数据的非常基本的版本而不是它的结构。

提前谢谢

1 个答案:

答案 0 :(得分:7)

我发现logstash将使用文件输入中的编解码器字段自动检测JSON,如下所示:

input {
   stdin {
   type => "stdin-type"
 }

 file {
    type => "prodlog"

    # Wildcards work, here :)
    path => [ "/root/isaac/Mylogs/testlog.log"]

    codec => json
 }
}

output {
  stdout { debug => true }
  elasticsearch { embedded => true }
}

然后Kibana完美地展示了JSON的领域。