Использую filebeat logstash elastic kibana
есть у меня записи в логе типа
timestamp seriviceName guid ON
и
timestamp seriviceName guid OFF
Как мне вывести все ON для которых нет соответсвующих OFF и время как давно ON появился?
А сколько у вас этих разных seriviceName
может быть в индексе?
Ну... наверно... 50-200
Наверное, я не то спросил. Вам ON без OFF нужен для одного и того же serviceName или для guid или для этой пары? И сколько таких уникальных значений будет?
Если нужно только по имени сервера и таких имен не очень много, то можно сгруппировать по имени сервера (или по серверу и guid), потом в каждой группе выбрать максимальное время для всех записей и для записей с ON и воспользоваться bucket_selector чтобы оставить только группы, где максимальное время равняется максимальному времени с ON. Короче, немного запутано, но выглядить это будет как-то так:
DELETE test
PUT test
{
"mappings": {
"_doc": {
"properties": {
"service": {
"type": "keyword"
},
"state": {
"type": "keyword"
},
"time": {
"type": "date"
}
}
}
}
}
PUT test/_doc/1
{
"service": "a",
"state": "ON",
"time": "2019-03-05T12:10:30Z"
}
PUT test/_doc/2
{
"service": "a",
"state": "OFF",
"time": "2019-03-05T13:10:30Z"
}
PUT test/_doc/3
{
"service": "a",
"state": "ON",
"time": "2019-03-05T14:10:30Z"
}
PUT test/_doc/4
{
"service": "b",
"state": "ON",
"time": "2019-03-05T14:10:30Z"
}
PUT test/_doc/5
{
"service": "b",
"state": "OFF",
"time": "2019-03-05T15:10:30Z"
}
PUT test/_doc/6
{
"service": "c",
"state": "OFF",
"time": "2019-03-05T15:10:30Z"
}
PUT test/_doc/7
{
"service": "d",
"state": "ON",
"time": "2019-03-05T15:10:30Z"
}
POST test/_search
{
"size": 0,
"aggs": {
"by_service": {
"terms": {
"field": "service",
"size": 1000
},
"aggs": {
"last_timestamp": {
"max": {
"field": "time"
}
},
"filter_on": {
"filter": {
"term": {
"state": "ON"
}
},
"aggs": {
"last_timestamp": {
"max": {
"field": "time"
}
}
}
},
"select_on": {
"bucket_selector": {
"buckets_path": {
"last_all": "last_timestamp",
"last_on": "filter_on>last_timestamp"
},
"script": "params.last_all == params.last_on"
}
}
}
}
}
}
Надо сказать, я за elk взялся несколько дней назад, вообще ничего не понимаю. Знаю, что оно для просмотра логов подходит. Даже не представляю, куда вводить ваш запрос. С наскока, очевидно, не получилось.
Так что пойдука я, для чайников че нить почитаю.
Прошу прощения, сразу не понял. В этом случая, а порекомендовал-бы индексировать по другому - использовать seriviceName+guid
как id. Таким образом будет храниться только последняя запись и то что вам надо можно реализовать простым фильтром по ON
.
Если застрянете - спрашивайте. А еще лучше - приходите в наш класс - все подробно объясним и научим.
This topic was automatically closed 28 days after the last reply. New replies are no longer allowed.