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 (легко). Вы можете попробовать следующие шаги:
Включите Flux в v1.8 с изменением конфигурации здесь
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, хотя сообщество уже давно этого ждет. Подробнее см. здесь .