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



我正在尝试确定logstash集群中最近记录的新鲜度,但是我在消化Elasticsearch DSL时遇到了一点麻烦。

现在我正在做这样的事情来提取时间戳:curl -sX GET 'http://localhost:9200/logstash-2015.06.02/' -d'{"query": {"match_all": {}}}' | json_pp | grep时间戳

让我;"@timestamp":"2015 - 06 - 02年t00:00:28.371 + 00:00",

我想直接使用elasticsearch查询,而不需要使用grep。

原始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
   }
}

任何帮助都会很感激。我知道这个问题很简单,我只是不知道它是什么。

您不需要为此使用DSL。您可以简单地将所有内容塞进URL查询字符串,如下所示:

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),并且只使用URL中的filter_path参数获得_source的搜索结果。

相关内容

  • 没有找到相关文章

最新更新