Со временем функции не поддерживаются синтаксисом или без него. В чем состоит математическая разница между использованием avg_over_time (метрика [1h]) и avg (метрика [1h])? Можно ли заменить функцию с течением времени функцией (в данном случае avg) с такими же результатами? Спасибо!
PromQL avg vs avg_over_time
Ответы (2)
Функция avg_over_time(m[d])
выполняет следующее:
- он выбирает все временные ряды с именем
m
- затем для каждого выбранного временного ряда вычисляется среднее значение по необработанным выборкам во временном диапазоне
d
, предшествующем каждой точке на графике.
Функция avg(m)
выполняет следующее:
- он выбирает все временные ряды с именем
m
- затем для каждого выбранного временного ряда он выбирает последнее необработанное значение выборки перед каждой точкой на графике. Дополнительные сведения см. В этих документах.
- затем для каждой точки на графике вычисляется среднее значение по выбранным значениям для каждого временного ряда.
Как видите, avg_over_time()
и avg()
- это совершенно разные функции: avg_over_time()
вычисляет отдельные средние значения для каждого выбранного временного ряда, а avg()
вычисляет средние значения для выбранного временного ряда.
person
valyala
schedule
08.11.2020
Спасибо. Его можно комбинировать как подзапросы для получения правильного вывода. Есть ли недостаток?
- person RJtokenring; 08.11.2020
Если вам нужно рассчитать среднее значение по точкам данных из нескольких временных рядов в заданном
[d]
временном диапазоне, то можно использовать следующий запрос: sum(sum_over_time(m[d])) by (...) / sum(count_over_time(m[d])) by (...)
- person valyala; 08.11.2020
Почему ты не можешь просто использовать
avg(avg_over_time(m[d]))
вместо того
sum(sum_over_time(m[d])) by (...) / sum(count_over_time(m[d])) by (...)
person
eng007
schedule
22.02.2021
потому что
avg(avg_over_time(m[d]))
возвращает среднее из средних значений, которое не равно среднему. См. math.stackexchange.com/questions/95909/
- person valyala; 23.02.2021