如何通过Prometheus+Grafana展示K8s Pod状态时序数据
Grafana展示指定Namespace下Pod状态时序的配置方案
1. 冗余字段过滤与核心查询语句
直接通过PromQL聚合即可仅保留Pod名称、namespace、phase三类信息,自动丢弃其余冗余标签,指定Namespace的查询语句如下:
sum by (pod, namespace, phase) (kube_pod_status_phase{namespace="$namespace"})
语句说明:
{namespace="$namespace"}是Grafana模板变量写法,查询固定Namespace直接替换为实际名称即可,比如{namespace="default"}sum by (pod, namespace, phase)会自动剔除括号外所有冗余标签,返回结果仅保留你需要的三个维度- 指标返回值为
1代表对应Pod在该时间点处于当前phase状态,返回值为0代表不处于该状态
2. 同时展示历史变更与实时状态的面板配置
之前数据展示混乱是因为选错了可视化类型,不要用普通折线图,选择**状态时间线(State timeline)**面板即可满足需求,配置步骤:
- 新建Grafana面板,可视化类型选择
State timeline - 将上述PromQL填入查询框,根据需要的状态采集精度调整查询的Min step参数,比如需要15秒粒度的状态记录就设置为
15s - 面板显示配置:
- 配置Value mapping规则:将值
1映射为对应phase的状态名,值0设置为透明隐藏,确保同一时间点每个Pod仅展示当前所处状态的色块 - 为不同phase配置固定语义化颜色:比如Running状态配绿色、Failed配红色、Pending配黄色、Succeeded配蓝色、Unknown配灰色
- 打开面板的
Show current value开关,面板最右侧会自动展示所有Pod的最新实时状态 - 调整面板时间范围为需要回溯的历史周期,即可直观看到每个Pod状态变更的准确时间点、每个状态的持续时长
- 配置Value mapping规则:将值
补充说明
如果需要区分「Running但未就绪」的状态(kube_pod_status_phase的Running状态仅代表Pod进程启动,不代表业务就绪探针通过),可以额外关联kube_pod_status_ready指标补充就绪维度,基础场景下kube_pod_status_phase已经可以覆盖失败、运行、等待等核心状态展示需求。
内容的提问来源于stack exchange,提问作者Bluz
相关产品推荐
相关产品推荐

