我使用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。
如何获取最新的
答案 0 :(得分:0)
这似乎是一个Filebeat问题,而不是ES问题。
我的日志是非结构化的,这意味着它们不包含ISO 8601可排序的日期前缀,或任何其他方式来告诉哪一行出现在哪一行之前。
现在,假设Filebeat每秒读取一次日志文件。在此期间,写入了3个对数行。 Filebeat不知道他们的时间,所以它给所有三个相同的时间戳 - 他们的摄取时间,而不是他们的创建时间:
ES无法知道哪一个首先出现,因此引起了读者的困惑。
当我有Filebeat解决方案时会更新。