Как создать оповещение Influxdb об отклонении от средних почасовых значений?

Поэтому я пытаюсь найти какую-либо документацию по более сложным запросам Flux, но после нескольких дней поиска я все еще потерялся. Я хочу иметь возможность рассчитывать средние значения для каждого часа недели, а затем, когда появляются новые данные, я хочу проверить, отклоняется ли они на x стандартных отклонений для этого часа.

В основном я хочу иметь поля массива 24x7, каждое из которых представляет среднее / медианное значение для каждого часа недели за последний год. Затем я хочу сравнить значения за последние дни для каждого часа с этими средними значениями и сообщить об ошибке. Я не понимаю, как рассчитать эти средние. Есть ли какая-нибудь скрытая обширная документация по Flux?

Мне действительно не нужно полное решение, просто какое-то направление было бы неплохо. Мол, есть ли какие-то служебные функции для этого в стандартной библиотеке или что-то еще

РЕДАКТИРОВАТЬ: После некоторого чтения, действительно похоже, что все, что мне нужно сделать, это использовать функции window и aggregateWindow, но я еще не нашел, как именно


person ditoslav    schedule 26.10.2020    source источник


Ответы (1)


Хорошо, вот что у меня сработало. Требуется некоторая очистка, но значения успешно сгруппированы по часам + будним дням и среднему значению всех значений.

import "date"
tab1 = from(bucket: "qweqwe")
  |> range(start: v.timeRangeStart, stop: v.timeRangeStop)
  |> filter(fn: (r) => r["_measurement"] == "asdasd")
  |> filter(fn: (r) => r["_field"] == "reach")
  |> aggregateWindow(every: 1h, fn: mean, createEmpty: false)


mapped = tab1 
  |> map(fn: (r) => ({ r with wd: string(v: date.weekDay(t: r._time)), h: string(v: date.hour(t: r._time)) }))
  |> map(fn: (r) => ({ r with mapped_time: r.wd + " " + r.h }))

grouped = mapped
  |> group(columns: ["mapped_time"], mode: "by")
  |> mean()
  |> group() 
  |> toInt()

  |> yield()
person ditoslav    schedule 26.10.2020