# Мониторинг изменения значения поля с течением времени

**URL:** <https://discuss.elastic.co/t/topic/253796>\
**Category:** Вопросы на русском языке\
**Created:** [October 30, 2020, 10:36am UTC](https://discuss.elastic.co/t/topic/253796 "2020-10-30T10:36:02Z")\
**Posts on this page:** 7\
**Page:** 1

<div class="post-metadata">

**Author:** ![nikita\_zubrinovich](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/nikita_zubrinovich/32/78148_2.png) [@nikita\_zubrinovich](https://discuss.elastic.co/u/nikita_zubrinovich)\
**Post date:** [October 30, 2020, 10:36am UTC](https://discuss.elastic.co/t/topic/253796/1 "2020-10-30T10:36:02Z")

</div>

Добрый день, у меня есть индекс с примерно такой структурой:

```auto
{
	"timestamp": "ts1",
	"Status": "Available",
         "serviceId": "1"
},
{
        "timestamp": "ts2",
        "Status": "Unavailable",
         "serviceId": "1"
},
{
        "timestamp": "ts3",
        "Status": "Unavailable",
         "serviceId": "1"
},
{
        "timestamp": "ts4",
        "Status": "Unavailable",
         "serviceId": "1"
},
{
        "timestamp": "ts5",
        "Status": "Available",
         "serviceId": "1"
}

```

И моя задача состоит в том, чтобы понять в течении какого времени сервис с таким то Id был доступен или недоступен. Я не совсем понимаю какую комбинацию агрегаций тут можно применить. Т.е. я понимаю, что в начале будет фильтр по serviceId или terms aggregation по нему же, но вот что можно применить дальше. Буду очень признателен за любую помощь

---

<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:** [October 30, 2020, 3:47pm UTC](https://discuss.elastic.co/t/topic/253796/2 "2020-10-30T15:47:41Z")

</div>

> [@nikita\_zubrinovich](#):
>
> чтобы понять в течении какого времени сервис с таким то Id был доступен или недоступен.

Что нужно в качестве конечного результата?

---

<div class="post-metadata">

**Author:** ![nikita\_zubrinovich](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/nikita_zubrinovich/32/78148_2.png) [@nikita\_zubrinovich](https://discuss.elastic.co/u/nikita_zubrinovich)\
**Post date:** [October 30, 2020, 8:14pm UTC](https://discuss.elastic.co/t/topic/253796/3 "2020-10-30T20:14:04Z")

</div>

Список значений с моментом изменения поля status или просто список интервалов в течении которых status был Available или Unavailable

---

<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:** [October 30, 2020, 8:19pm UTC](https://discuss.elastic.co/t/topic/253796/4 "2020-10-30T20:19:15Z")

</div>

> [@nikita\_zubrinovich](#):
>
> Список значений с моментом изменения поля status

Каких значений?

> [@nikita\_zubrinovich](#):
>
> список интервалов в течении которых status был Available или Unavailable

Это можно получить фильтром по `serviceId` и сортировкой по времени.

---

<div class="post-metadata">

**Author:** ![nikita\_zubrinovich](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/nikita_zubrinovich/32/78148_2.png) [@nikita\_zubrinovich](https://discuss.elastic.co/u/nikita_zubrinovich)\
**Post date:** [October 30, 2020, 8:24pm UTC](https://discuss.elastic.co/t/topic/253796/5 "2020-10-30T20:24:12Z")

</div>

Значений timestamp. Сортировка по времени даст мне только записи в порядке возрастания времени, что тоже нужно, но саму задачу никак не решает. Нужно каким-то образом получить только моменты времени, когда status меняется. Т.е. например: ts1 - available, ts4 - unavailable, ts7 - available и т.д.

---

<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:** [October 31, 2020, 12:20am UTC](https://discuss.elastic.co/t/topic/253796/6 "2020-10-31T00:20:40Z")

</div>

Теперь понял. Это сложно сделать с помощью elasticsearch c данными в их текущем виде. Основная проблема в том, что в связи с распределенной архитектурой elasticsearch соседние (по времени) состояние могут хранится на разных узлах и любые операции над упорядоченными данными сложны и трудоемки. 2 основных способа - 1) переделать данные так, чтобы пары Unavailable/available хранились в одной записи, которая бы обновлялась по мере изменения значения либо 2) вытаскивать упорядоченный список и обрабатывать его в вашем приложении.

---

<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:** [November 28, 2020, 12:20am UTC](https://discuss.elastic.co/t/topic/253796/7 "2020-11-28T00:20:40Z")

</div>

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