需要从 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
我正在尝试确定我的 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