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

Need to extract the timestamp from a logstash elasticsearch cluster

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

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

这让我很感动; "@timestamp" : "2015-06-02T00:00:28.371+00:00",

我想直接使用没有 grep hackiness 的 elasticsearch 查询。

原始 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 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)和使用 URL.

中的 filter_path parameter 仅获取搜索结果的 _source