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)
然后我可以计算平均值和标准差
如果您有更好的解决方案,请让我知道如何改进
谢谢