1

我正在接收来自 Twitter 的 Web 服务数据,并记录到文件中,然后我需要将该数据发送到 Logstash,以便将这些数据编入 Elasticsearch 的索引。

我正在使用下面的配置,这给 jsonparsefailure 异常为

JSON 解析失败。回退到纯文本 {:error=>#> LogStash::Json::ParserError: Unexpected character (':' (code 58)): 期望 >valid 值(数字、字符串、数组、对象、'true' , '假' 或 '空')

我的 logstash conf 文件如下所示:

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": ""
              }
            ]
          }
        }
}
]
4

1 回答 1

1

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

所以你的输入文件应该是这样的,其中每个事件由换行符分隔

{"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":""}]}}}

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

于 2016-08-07T19:21:35.917 回答