我收到来自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": ""
}
]
}
}
}
]
答案 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。