You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Grafana中用PromQL获取各服务副本状态单值的问题

解决Grafana表格展示服务副本当前值及30分钟极值问题

问题核心

max_over_time返回多值的原因是:该函数默认会输出时间范围内每个采样点的最大值,而非按服务(deployment)聚合后的单值。需要结合by()聚合函数,确保每个服务只输出一个汇总值。

正确查询写法

针对需求,需创建3个独立查询,分别获取当前值、30分钟最小值和最大值:

  1. 当前副本数
kube_deployment_status_replicas{deployment=~"$deployment"}

若要避免瞬时波动,也可使用last_over_time取最近1分钟的最后一个值:

last_over_time(kube_deployment_status_replicas{deployment=~"$deployment"}[1m])
  1. 30分钟最小值
min by (deployment) (min_over_time(kube_deployment_status_replicas{deployment=~"$deployment"}[30m]))

外层的min by (deployment)会将同一个服务的所有时间序列采样值聚合为一个全局最小值。

  1. 30分钟最大值
max by (deployment) (max_over_time(kube_deployment_status_replicas{deployment=~"$deployment"}[30m]))

同理,外层max by (deployment)聚合出该服务30分钟内的全局最大值。

Grafana表格配置步骤

  1. 新建Table类型面板,添加上述3个查询,分别为每个查询设置别名(如“当前副本数”“30min最小值”“30min最大值”)。
  2. 进入Transform选项卡,选择Merge变换,按deployment字段将三个查询的结果合并。
  3. 添加时间列:点击Add transformation,选择Calculated field,表达式填写$__timeNow(),别名设为time;在字段设置中,将显示格式改为“自定义”,输入now。
  4. 调整列顺序:拖动列头,将time、deployment(重命名为“metric”)、“当前副本数”(重命名为“pod”)、“30min最小值”、“30min最大值”按期望顺序排列。

最终效果示例

timemetricpodmin[30m]max[30m]
nowms527

内容的提问来源于stack exchange,提问作者LupefiascoMosdef

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 05:47:26