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

如何将Prometheus布尔/状态指标适配Grafana状态类可视化组件

将Prometheus布尔状态指标转换为Grafana状态组件格式的解决方案

单PromQL查询实现

针对你提到的some_state_metric这类指标,用以下查询即可直接生成符合Grafana状态时间线/状态历史组件要求的格式:

sum by (name, state) (
  some_state_metric 
  * on(state) group_left() 
  vector(
    1 if state="active" else
    2 if state="inactive" else
    3 if state="failing" else 0
  )
)

工作原理

  1. 状态-数值映射:通过vector()内的条件判断,为每个state标签分配唯一离散值——原指标中当前激活状态的数值为1,乘对应映射值后得到唯一标识,其余非激活状态为0,乘后不会干扰有效结果。
  2. 聚合去冗余:sum by (name, state)确保每个实例(name)下的每个状态只保留有效时序数据,过滤掉无意义的0值。
  3. Grafana适配:在状态时间线/状态历史组件的配置中,将数值与状态文本一一映射(比如1→活跃、2→非活跃、3→故障),就能正确展示状态变化历史。

通用场景扩展

如果是其他类似指标(比如Node Exporter的node_systemd_unit_state或Kubelet的kube_pod_status_phase),只需扩展vector()中的条件分支即可:

# 示例:适配node_systemd_unit_state
sum by (name, state) (
  node_systemd_unit_state 
  * on(state) group_left() 
  vector(
    1 if state="active" else
    2 if state="inactive" else
    3 if state="failed" else
    4 if state="activating" else 0
  )
)

对比乘系数方案的优势

  • 单查询完成所有状态的转换,无需合并多个查询结果
  • 映射逻辑直观,新增状态时只需添加对应条件和数值
  • 保留原state标签,Grafana中配置状态映射更清晰

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 22:50:20