Elasticsearch:从索引中获取最后N个记录

时间:2017-10-08 15:49:00

标签: elasticsearch tail

我的问题

我使用Elasticsearch存储从Filebeat发送的日志行流。我想实现类似"from": 0的功能,它从给定的索引中获取最新的N个日志行 - 按时间戳记。

我尝试了什么

使用@timestamp的组合,并按query.json降序排序。

{ "size": 5, "from": 0, "sort": [ { "@timestamp": { "order": "desc", "unmapped_type": "boolean" } } ], "query": { "bool": { "must": [ { "query_string": { "query": "source:*.log", "analyze_wildcard": true } } ] } }, "_source": { "include": ["message", "@timestamp"], "exclude": "_*" } }

{{1}}

更广泛的背景&设计

有关完整设计,请参阅this article

我的问题

如何获取最新的

1 个答案:

答案 0 :(得分:0)

这似乎是一个Filebeat问题,而不是ES问题。

我的日志是非结构化的,这意味着它们不包含ISO 8601可排序的日期前缀,或任何其他方式来告诉哪一行出现在哪一行之前。

现在,假设Filebeat每秒读取一次日志文件。在此期间,写入了3个对数行。 Filebeat不知道他们的时间,所以它给所有三个相同的时间戳 - 他们的摄取时间,而不是他们的创建时间

ES无法知道哪一个首先出现,因此引起了读者的困惑。

当我有Filebeat解决方案时会更新。

enter image description here

enter image description here