Prometheus 普罗米修斯-如何重用已过滤的序列以加快查询时间?

Prometheus 普罗米修斯-如何重用已过滤的序列以加快查询时间?,prometheus,Prometheus,现在我使用普罗米修斯作为时间序列数据库。我想重用过滤后的序列以优化查询时间 现在我有一个时间序列命令_stat{id=“x”,host=“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_st

现在我使用普罗米修斯作为时间序列数据库。我想重用过滤后的序列以优化查询时间

现在我有一个时间序列
命令_stat{id=“x”,host=“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个命令id

我将计算每个命令id上的总速率,即:

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)
查询时间太慢,我想通过只检查具有以下条件的命令id来加快查询速度:

sum(rate(command_stat{stat="requests"}[5m])) by (id) > 1000
在这种情况下,应检查的命令数量仅约为40。我只想在~40命令上计算平均值和标准偏差

你能帮我优化这个问题吗?我认为我们可以在按上述条件过滤后重新使用
命令\u stat
系列。

我在普罗米修斯中错过了。我想我可以使用此功能预计算序列:

sum(rate(command_stat{stat="requests"}[5m])) by (id)
然后我可以计算平均值和标准差

如果您有更好的解决方案,请让我知道如何改进

谢谢