Elasticsearch: получение последних N записей из индекса
Моя проблема
Я использую Elasticsearch для хранения потока строк журнала, отправленных из Filebeat. Я хотел бы реализовать tail
-подобная функциональность, которая выбирает последние N строк журнала - по их отметке времени - из заданного индекса.
Что я пробовал
Используя комбинацию "from": 0
и сортировка по убыванию @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": "_*"
}
}
Более широкий контекст и дизайн
Полный дизайн см. В разделе Elasticsearch: разбиение на страницы потока результатов.
Мой вопрос
Как мне получить последние
1 ответ
Кажется, это проблема Filebeat, а не проблема ES.
Мои журналы неструктурированы, это означает, что они не содержат префикс сортируемой даты ISO 8601 или какой-либо другой способ определить, какая строка стоит перед какой.
Теперь предположим, что Filebeat читает файл журнала каждую секунду. За эту секунду было записано 3 строки журнала. Filebeat не знает их времени, поэтому он дает всем трем меткам времени - время их приема, а не время их создания:
У ES нет возможности узнать, кто из них на первом месте, поэтому путаница на стороне читателя.
Будет обновляться, когда у меня будет решение Filebeat.