InfluxDB - агрегированные данные о продолжительности состояния

У меня есть измерение в InfluxDB, которое отслеживает состояние системы. Например, рассмотрим следующие меры:

03/22/18 00:00:00AM    STATUS_A
03/22/18 09:00:00AM    STATUS_B
03/22/18 13:00:00AM    STATUS_C
03/22/18 18:00:00AM    STATUS_B
03/22/18 19:00:00AM    STATUS_D
03/22/18 21:00:00AM    STATUS_A

Что мне нужно сделать сейчас, это определить, как долго система находилась в каждом состоянии каждый день. В приведенном выше примере желаемый результат что-то вроде

STATUS_A    12h (from 00:00 to 09:00 and from 21:00 to 24:00)
STATUS_B    5h (from 09:00 to 13:00 and from 18:00 to 19:00)
STATUS_C    5h (from 13:00 to 18:00)
STATUS_D    2h (from 09:00 to 21:00)

Я очень новичок в стеке TICK, поэтому я мог упустить что-то довольно элементарное. Я думал использовать Kapacitor для создания совокупного результата, но я не знаю, как получить результат

1 ответ

Вы упомянули стек TICK, поэтому я предполагаю, что вы используете InfluxDB версии 1.

В InfluxDB можно сообщить общую продолжительность данного состояния, но только в Flux, а не в InfluxQL (легко). Вы можете попробовать следующие шаги:

  1. Включите Flux в v1.8 с изменением конфигурации здесь

  2. Sample Flux может быть:

    from(bucket: "yourDatabaseName/autogen") |> range(start: 2018-03-20T00:00:00Z, stop: 2018-03-20T23:59:59Z) |> filter(fn: (r) => r ._measurement == "yourMeasurementName") |> stateDuration (fn: (r) => r._value == "STATUS_A", столбец: "state", единица измерения: 1 час)

Опять же, пока это невозможно сделать в InfluxQL, хотя сообщество уже давно этого ждет. Подробнее см. здесь .

Другие вопросы по тегам