Logstash:在解析通过Twitter / facebook等Web服务接收的Json数据时,解析失败

时间:2016-08-01 18:22:12

标签: json elasticsearch logstash logstash-file

我收到来自Twitter的Web服务数据并记录到文件后我需要将该数据发送到Logstash,因此可以将其索引到Elasticsearch。

我正在使用下面的配置,并且将jsonparsefailure作为

提供异常
  

JSON解析失败。回归纯文本{:error =>#>   LogStash :: Json :: ParserError:意外的字符(':'(代码58)):预期有一个>有效值(数字,字符串,数组,对象,'真', ' false'或' null')

我的logstash配置文件如下所示:

input
    {
        file
        {
            path => ["/mnt/volume2/ELK_Prashant/at/events.json"]
            codec => json
            type => json
        start_position => "beginning"
            sincedb_path => "/dev/null"
        }
    }
    output
    {
        stdout { codec => rubydebug }
    }

events.json中的数据可以从https://dev.twitter.com/rest/reference/get/search/tweets引用,其中一些示例如下: events.json

[
{ "location": "LA, CA",
        "follow_request_sent": null,
        "profile_link_color": "0084B4",
        "is_translator": false,
        "id_str": "137238150",
        "entities": {
          "url": {
            "urls": [
              {
                "expanded_url": null,
                "url": ""
              }
            ]
          }
        }
}
]

1 个答案:

答案 0 :(得分:1)

从您的示例events.json文件中,很明显您使用完整的json对象作为logstash file插件的输入,但默认情况下插件假定每个事件都是单行的,因为只有它能够检测到进入的新事件并跟踪当前位置。

因此,您的输入文件应如下所示,其中每个事件都由换行符

分隔
{"location":"LA, CA","follow_request_sent":null,"profile_link_color":"0084B4","is_translator":false,"id_str":"137238150","entities":{"url":{"urls":[{"expanded_url":null,"url":""}]}}}
{"location":"LA, CA","follow_request_sent":null,"profile_link_color":"0084B4","is_translator":false,"id_str":"137238150","entities":{"url":{"urls":[{"expanded_url":null,"url":""}]}}}
{"location":"LA, CA","follow_request_sent":null,"profile_link_color":"0084B4","is_translator":false,"id_str":"137238150","entities":{"url":{"urls":[{"expanded_url":null,"url":""}]}}}

或者您必须在输入插件中使用多行编解码器或过滤器。可以找到更多信息here