我希望使用Logstash将parse
数据发送到Elasticsearch。到目前为止,这很有效,但是当我尝试解析JSON文件时,Logstash不会做任何事情。我可以毫无例外地启动Logstash但它不会解析任何东西。
我的配置有问题吗? JSON文件的路径是正确的。
我的JSON:
{
"stats": [
{
"liveStatistic": {
"@scope": "21",
"@scopeType": "foo",
"@name": "minTime",
"@interval": "60",
"lastChange": "2011-01-11T15:19:53.259+02:00",
"start": "2011-01-18T14:19:48.333+02:00",
"unit": "s",
"value": 10
}
},
{
"liveStatistic": {
"@scope": "26",
"@scopeType": "bar",
"@name": "newCount",
"@interval": "60",
"lastChange": "2014-01-11T15:19:59.894+02:00",
"start": "2014-01-12T14:19:48.333+02:00",
"unit": 1,
"value": 5
}
},
...
]
}
我的Logstash代理配置:
input {
file {
path => "/home/me/logstash-1.4.2/values/stats.json"
codec => "json"
start_position => "beginning"
}
}
output {
elasticsearch {
host => localhost
protocol =>"http"
}
stdout {
codec => rubydebug
}
}
答案 0 :(得分:3)
您应该在输入中添加以下行:
start_position => "beginning"
同样将完整的文档放在一行上,并在文档周围添加{},使其成为有效的json文档。
答案 1 :(得分:1)
好的,有两件事:
首先,file输入默认设置为在文件末尾开始读取。如果您希望文件在开头读取,则需要设置start_position。例如:
file {
path => "/mypath/myfile"
codec => "json"
start_position => "beginning"
}
其次,请记住logstash会保留一个sincedb文件,该文件记录您已读取的文件的行数(以便不重复解析信息!)。这通常是一个理想的功能,但是对于静态文件的测试(这看起来像你正在尝试做的那样),那么你想要解决这个问题。我知道有两种方法。
一种方法是,每次要运行logstash时都可以创建该文件的新副本,并记得告诉logstash从该文件中读取。 另一种方法是你可以删除sincedb文件,无论它位于何处。您可以告诉logstash使用sincedb_path功能编写sincedeb文件的位置。
我希望这一切都有所帮助!