如何在Grafana中基于Prometheus指标计算滑动窗口内的可用率/SLA百分比
解决Grafana Singlestat面板计算测试可用率的问题
我来帮你搞定这个可用率计算的需求!你之前的思路是对的,但问题出在没有用合适的PromQL函数把时间序列数据聚合为单一的百分比数值。下面是具体的解决方案:
核心逻辑
我们需要计算过去5天内,环境处于健康状态的时长占总时长的比例:
- 健康状态:测试失败数为0 → 对应你写的
1 - clamp_max(sum(e2e_tests_failure_count{...}), 1)结果为1 - 不健康状态:只要有测试失败 → 结果为0
- 最终百分比 =(健康总秒数 / 5天总秒数)× 100
正确的PromQL查询
(sum_over_time((1 - clamp_max(sum(e2e_tests_failure_count{kubernetes_name=~"test-framework-1|test-framework-2|test-framework-3",kubernetes_namespace="platform-edge"}), 1))[5d:1s]) / (5*24*3600)) * 100
逐部分解释:
sum(e2e_tests_failure_count{...}):统计指定测试框架的总失败次数clamp_max(..., 1):把失败次数“归一化”为0或1——只要有失败就返回1,无失败返回01 - ...:反转状态,1代表健康,0代表不健康[5d:1s]:以1秒为步长,获取过去5天内的所有状态样本(确保每个时间点都被统计)sum_over_time(...):累加所有健康状态的秒数(因为健康时每个样本值为1,累加结果就是健康总时长)/(5*24*3600):除以5天的总秒数(5×24×3600=432000秒)*100:转换为百分比格式
Grafana面板设置
- 面板类型选择Singlestat
- 在「Options」标签页:
- 单位选择「Percent (%)」
- 可以设置阈值(比如99%以上显示绿色,95%-99%黄色,低于95%红色)
- 确保查询的时间范围设置为「Last 5d」(或者和查询中的5d保持一致)
为什么你之前的查询报错?
你之前的(1 - clamp_max(...))[5d]只是获取了过去5天的时间序列数据,但Singlestat面板需要一个单一数值,而不是一组时间点的数据。sum_over_time函数正好帮我们把时间序列聚合为一个总时长数值,再通过计算得到百分比。
内容的提问来源于stack exchange,提问作者feob
相关产品推荐
相关产品推荐

