# Агрегирование данных

**URL:** <https://discuss.elastic.co/t/topic/170624>\
**Category:** Вопросы на русском языке\
**Created:** [March 3, 2019, 2:20pm UTC](https://discuss.elastic.co/t/topic/170624 "2019-03-03T14:20:21Z")\
**Posts on this page:** 8\
**Page:** 1

<div class="post-metadata">

**Author:** ![Lewik](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/lewik/32/41484_2.png) [@Lewik](https://discuss.elastic.co/u/Lewik)\
**Post date:** [March 3, 2019, 2:20pm UTC](https://discuss.elastic.co/t/topic/170624/1 "2019-03-03T14:20:21Z")

</div>

Использую filebeat logstash elastic kibana  
есть у меня записи в логе типа  
timestamp seriviceName guid ON  
и  
timestamp seriviceName guid OFF  
Как мне вывести все ON для которых нет соответсвующих OFF и время как давно ON появился?

---

<div class="post-metadata">

**Author:** ![Igor\_Motov](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/igor_motov/32/45193_2.png) [@Igor\_Motov](https://discuss.elastic.co/u/Igor_Motov)\
**Post date:** [March 4, 2019, 5:47pm UTC](https://discuss.elastic.co/t/topic/170624/2 "2019-03-04T17:47:00Z")

</div>

А сколько у вас этих разных `seriviceName` может быть в индексе?

---

<div class="post-metadata">

**Author:** ![Lewik](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/lewik/32/41484_2.png) [@Lewik](https://discuss.elastic.co/u/Lewik)\
**Post date:** [March 5, 2019, 8:32am UTC](https://discuss.elastic.co/t/topic/170624/3 "2019-03-05T08:32:49Z")

</div>

Ну... наверно... 50-200

---

<div class="post-metadata">

**Author:** ![Igor\_Motov](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/igor_motov/32/45193_2.png) [@Igor\_Motov](https://discuss.elastic.co/u/Igor_Motov)\
**Post date:** [March 5, 2019, 4:44pm UTC](https://discuss.elastic.co/t/topic/170624/4 "2019-03-05T16:44:53Z")

</div>

Наверное, я не то спросил. Вам ON без OFF нужен для одного и того же serviceName или для guid или для этой пары? И сколько таких уникальных значений будет?

---

<div class="post-metadata">

**Author:** ![Igor\_Motov](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/igor_motov/32/45193_2.png) [@Igor\_Motov](https://discuss.elastic.co/u/Igor_Motov)\
**Post date:** [March 5, 2019, 5:05pm UTC](https://discuss.elastic.co/t/topic/170624/5 "2019-03-05T17:05:22Z")

</div>

Если нужно только по имени сервера и таких имен не очень много, то можно сгруппировать по имени сервера (или по серверу и guid), потом в каждой группе выбрать максимальное время для всех записей и для записей с ON и воспользоваться bucket\_selector чтобы оставить только группы, где максимальное время равняется максимальному времени с ON. Короче, немного запутано, но выглядить это будет как-то так:

```auto
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"
          }
        }
      }
    }
  }
}

```

---

<div class="post-metadata">

**Author:** ![Lewik](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/lewik/32/41484_2.png) [@Lewik](https://discuss.elastic.co/u/Lewik)\
**Post date:** [March 6, 2019, 8:34am UTC](https://discuss.elastic.co/t/topic/170624/6 "2019-03-06T08:34:56Z")

</div>

Надо сказать, я за elk взялся несколько дней назад, вообще ничего не понимаю. Знаю, что оно для просмотра логов подходит. Даже не представляю, куда вводить ваш запрос. С наскока, очевидно, не получилось.

Так что пойдука я, для чайников че нить почитаю.

---

<div class="post-metadata">

**Author:** ![Igor\_Motov](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/igor_motov/32/45193_2.png) [@Igor\_Motov](https://discuss.elastic.co/u/Igor_Motov)\
**Post date:** [March 6, 2019, 3:48pm UTC](https://discuss.elastic.co/t/topic/170624/7 "2019-03-06T15:48:13Z")

</div>

Прошу прощения, сразу не понял. В этом случая, а порекомендовал-бы индексировать по другому - использовать `seriviceName+guid` как id. Таким образом будет храниться только последняя запись и то что вам надо можно реализовать простым фильтром по `ON`.

> [@Lewik](#):
>
> Так что пойдука я, для чайников че нить почитаю.

Если застрянете - спрашивайте. А еще лучше - приходите в [наш класс](https://training.elastic.co/?courseId=0&city=MOSCOW) 🙂 - все подробно объясним и научим.

---

<div class="post-metadata">

**Author:** ![system](https://us1.discourse-cdn.com/elastic/original/3X/1/a/1ac57faf039f6b580b3f104ef42a2a89e41014de.png) [@system](https://discuss.elastic.co/u/system)\
**Post date:** [April 3, 2019, 3:48pm UTC](https://discuss.elastic.co/t/topic/170624/8 "2019-04-03T15:48:16Z")

</div>

Closed on April 3, 2019, 3:48pm UTC

This topic was automatically closed 28 days after the last reply. New replies are no longer allowed.
