我试图确定我的logstash群集中最新记录的新鲜度,但我在消化Elasticsearch DSL方面遇到了一些麻烦。
现在我正在做这样的事情来提取时间戳: curl -sX GET' http://localhost:9200/logstash-2015.06.02/' -d' {"查询":{" match_all":{}}}' | json_pp | grep timestamp
得到了我; " @时间戳" :" 2015-06-02T00:00:28.371 + 00:00",
我想直接使用elasticsearch查询,没有grep hackiness。
原始JSON(剪切长度)如下所示:
{
"took" : 115,
"timed_out" : false,
"hits" : {
"hits" : [
{
"_index" : "logstash-2015.06.02",
"_source" : {
"type" : "syslog",
"@timestamp" : "2015-06-02T00:00:28.371+00:00",
"tags" : [
"sys",
"inf"
],
"message" : " 2015/06/02 00:00:28 [INFO] serf: EventMemberJoin: generichost.example.com 10.1.1.10",
"file" : "/var/log/consul.log",
"@version" : 1,
"host" : "generichost.example.com"
},
"_id" : "AU4xcf51cXOri9NL1hro",
"_score" : 1,
"_type" : "syslog"
},
],
"total" : 8605141,
"max_score" : 1
},
"_shards" : {
"total" : 50,
"successful" : 50,
"failed" : 0
}
}
任何帮助将不胜感激。我知道查询很简单,我只是不知道它是什么。
答案 0 :(得分:1)
您不需要使用DSL。您可以简单地将所有内容填入URL query string,如下所示:
curl -s XGET 'localhost:9200/logstash-2015.06.02/_search?_source=@timestamp&size=1&sort=@timestamp:desc&format=yaml'
所以:
_source=@timestamp
表示我们只对获取@timestamp
值size=1
表示我们只需要一个结果sort=@timestamp:desc
表示我们希望按@timestamp
降序排序(即最新的第一个)format=yaml
会以YAML格式为您提供结果,在您的情况下比JSON更简洁输出如下:
- _index: "logstash-2015.06.02"
_type: "syslog"
_id: "AU4xcf51cXOri9NL1hro"
_score: 1.0
_source:
@timestamp: "2015-06-02T00:00:28.371+00:00"
您不再需要json_pp
了,您仍然可以通过grep @timestamp
来获取所需的数据。
请注意,在1.6.0中,有一种方法可以过滤掉所有元数据(即_index
,_type
,_id
,_score
)并且只能获取使用网址中的filter_path
parameter搜索结果的_source
。