需要从logstash elasticsearch集群中提取时间戳

时间:2015-06-02 21:12:41

标签: json parsing elasticsearch logstash dsl

我试图确定我的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
   }
}

任何帮助将不胜感激。我知道查询很简单,我只是不知道它是什么。

1 个答案:

答案 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