Я настроил базу данных MariaDB, из которой я транспортирую данные в Elasticsearch через плагин Logsta sh jdb c. Прием данных из таблицы списка процессов базы данных выполняется каждую секунду. Поэтому каждую секунду я получаю количество имен пользователей в Elasticsearch, например:
user1
user1
user1
user2
user3
user3
etc…
Может быть много пользователей, которые подключены из разных мест, и мне нужно их посчитать. Из приведенного выше примера видно, что пользователь user1 встречается 3 раза, user2 1 раз и пользователь 3 2 раза: (user1: 3, user2: 1, user3: 2). Поскольку данные записываются каждую секунду, между значениями вхождения нет большой разницы, но если я запрашиваю их в Графане, числа складываются каждую секунду, поэтому через 2-3 секунды может произойти что-то вроде (user1: 9, user2: 3, user3: 6) но точные числа все еще (user1: 3, user2: 1, user3: 2).
Есть ли возможность агрегировать данные за минуту. Я имею в виду в минутном интервале увидеть значение 1 секунды записи? Я мог бы получать данные каждую минуту, но мне нужно делать это каждую секунду для другой информационной панели с тем же источником данных.
Возможно, есть возможность загружать данные с одним вторым периодом расписания в один индекс и с одной минутой в другой индекс?
GET /mariadb_processlist1/_search?
{
"size": 0,
"query": {
"range": {
"@timestamp": {
"gte": "now-1m"
}
}
},
"aggs": {
"NAME": {
"terms": {
"field": "user.keyword",
"size": 15
}
}
}
}
вывод равен
"buckets" : [
{
"key" : "user1",
"doc_count" : 3900
},
{
"key" : "user2",
"doc_count" : 3180
},
{
"key" : "user3",
"doc_count" : 2520
},
{
"key" : "user4",
"doc_count" : 1020
},
{
"key" : "user5",
"doc_count" : 420
},
, но на одну секунду это:
"buckets" : [
{
"key" : "user1",
"doc_count" : 65
},
{
"key" : "user2",
"doc_count" : 53
},
{
"key" : "user3",
"doc_count" : 42
},
{
"key" : "user4",
"doc_count" : 17
},
{
"key" : "user5",
"doc_count" : 11
},
Я знаю, что это не так ясно, как могло бы быть если есть какие-то проблемы с пониманием, я могу уточнить!
Спасибо за любой совет.