Теперь я использую Прометей в качестве базы данных временных рядов. Я хочу повторно использовать отфильтрованный ряд для оптимизации времени запроса.
Теперь у меня есть временной ряд command_stat{id="x",host="x.x.x.x"}
, пример:
command_stat{id="0",host="10.x.x.1",stat="requests"}
command_stat{id="0",host="10.x.x.2",stat="requests"}
command_stat{id="1",host="10.x.x.1",stat="requests"}
command_stat{id="1",host="10.x.x.2",stat="requests"}
command_stat{id="2",host="10.x.x.1",stat="requests"}
command_stat{id="2",host="10.x.x.2",stat="requests"}
...
У меня есть около 10000 команд и около 500 идентификатора команды
Я рассчитываю общую скорость для каждого идентификатора команды, которая составляет:
sum(rate(command_stat{stat="requests"}[5m])) by (id)
И Я должен сравнить это значение со значениями в за последние 15 дней . Например, я вычислю:
sum(rate(command_stat{stat="requests"}[5m] offset 1d)) by (id)
sum(rate(command_stat{stat="requests"}[5m] offset 2d)) by (id)
sum(rate(command_stat{stat="requests"}[5m] offset 3d)) by (id)
...
sum(rate(command_stat{stat="requests"}[5m] offset 15d)) by (id)
Я также должен вычислить среднее и стандартное отклонение из 15 значений. С означает , я могу использовать avg(...) by (id)
и для стандартное отклонение , я могу использовать stddev(...) by (id)
Пример для стандартное отклонение , что должно быть:
stddev (
label_replace(sum(rate(command_stat{stat_name="requests"}[5m] offset 1d)) by (id), "time", "1d", "", ".*") or
label_replace(sum(rate(command_stat{stat_name="requests"}[5m] offset 2d)) by (id), "time", "2d", "", ".*") or
...
label_replace(sum(rate(command_stat{stat_name="requests"}[5m] offset 15d)) by (id), "time", "15d", "", ".*")
) by (id)
Время запроса слишком медленно , я хочу ускорить, проверяя только идентификатор команды с условием:
sum(rate(command_stat{stat="requests"}[5m])) by (id) > 1000
После этого условие, количество команд, которые должны быть проверены, составляет всего около 40 . Я хочу вычислить среднее и стандартное отклонение только для команд ~ 40 .
Можете ли вы помочь мне оптимизировать эту проблему? Я думаю, что мы можем повторно использовать серию command_stat
после фильтрации по вышеуказанному условию.