如何将Prometheus枚举值合并为Grafana单条State Timeline图表
解决Grafana State Timeline展示Prometheus枚举值的问题
需要使用Grafana的转换功能来合并三条时间序列,实现单条State Timeline展示,具体操作步骤如下:
查询Prometheus数据
在Grafana查询面板中输入指标查询语句:my_enum此时会返回分别对应a、b、c的三条时间序列。
添加「Reduce」转换
- 切换到「转换」标签页,点击「添加转换」,选择「Reduce」。
- 在转换设置中:
- 「Mode」选择「Series to rows」
- 「Fields to reduce」保留默认的「Value」字段
该操作会将三条序列的时间戳、枚举标签值、对应数值转换为结构化的表格数据。
添加「Filter」转换(可选)
由于同一时间仅一个枚举值为1,可过滤掉数值为0的冗余数据:- 添加「Filter」转换,选择「Value」字段,条件设为「Is greater than」,值填0。
配置State Timeline面板
- 在可视化设置中选择「State Timeline」。
- 字段配置:
- 「Time field」选择「Time」
- 「State field」选择「my_enum」(即枚举标签对应的字段)
完成后即可将不同时间点的枚举状态合并为单条时间线展示。
另外也可以通过PromQL提前处理数据,比如用label_replace结合max提取活跃枚举值:
label_replace(max by (my_enum) (my_enum * on() group_left() vector(1)), "state", "$1", "my_enum", "(.*)")
但这种方式依赖“同一时间仅一个值为1”的前提,相比之下Grafana转换的方式更稳妥直观。
内容的提问来源于stack exchange,提问作者Bill
相关产品推荐
相关产品推荐

