4、Ceph Exporter 指标详解:ceph_version、ceph_osd_up、ceph_mon_quorum_status 等关键指标含义
在 Rook Ceph 存储版本漂移校准场景中,Ceph Exporter 暴露的指标是监控与告警的核心数据源。理解这些指标的含义、类型及异常判定标准,是构建精准监控体系的前提。本节将详细拆解 ceph_version、ceph_osd_up、ceph_mon_quorum_status 等关键指标,并结合版本漂移场景给出实战解读。
4.1 指标分类与采集架构
Ceph Exporter 通过调用 Ceph 集群的 ceph status、ceph osd dump、ceph mon dump 等命令,将内部状态转换为 Prometheus 时序指标。根据监控目标,可将指标分为以下四类:
| 分类 | 典型指标 | 监控目标 |
|---|---|---|
| 版本与标识 | ceph_version、ceph_osd_release |
检测版本漂移、混合版本集群 |
| 组件存活 | ceph_osd_up、ceph_mon_up、ceph_mgr_up |
OSD/Mon/Mgr 进程是否运行 |
| 集群共识 | ceph_mon_quorum_status、ceph_quorum_age_seconds |
Monitor 仲裁状态与稳定性 |
| 数据分布 | ceph_osd_in、ceph_pg_active、ceph_pg_degraded |
OSD 是否在集群内、PG 健康度 |
版本漂移场景重点: 在 Rook 升级或回滚过程中,
ceph_version 和 ceph_osd_release 是判断是否存在混合版本集群的第一手指标。当集群中同时出现多个不同的版本号时,必须立即触发告警。
4.2 ceph_version:版本标识与漂移检测
ceph_version 是一个 Gauge 类型 的指标,其值固定为 1,但通过 version 和 release 两个 Label 携带详细的版本信息。该指标由每个 Ceph 守护进程(OSD、MON、MGR)独立上报。
# HELP ceph_version Ceph version
# TYPE ceph_version gauge
ceph_version{ceph_version="ceph version 17.2.6 (d7a0d4c3a4b...) quincy (stable)", instance="rook-ceph-osd-0", job="ceph", release="17.2.6"} 1
ceph_version{ceph_version="ceph version 17.2.5 (e8b9f1a2c3d...) quincy (stable)", instance="rook-ceph-osd-1", job="ceph", release="17.2.5"} 1
版本漂移判定逻辑:
- 正常状态: 所有守护进程的
releaseLabel 值完全一致,例如全部为17.2.6。 - 漂移状态: 查询 PromQL 时,
count by (release) (ceph_version)返回的行数 > 1,说明存在多个版本。 - 告警阈值: 建议设置
count by (release) (ceph_version) > 1持续 5 分钟触发告警,避免升级过程中的短暂过渡期误报。
实战技巧: 在 Grafana 中,可以使用
label_replace() 函数将 release 标签提取为独立字段,制作“版本分布饼图”或“版本漂移时间线图”,直观展示各版本在集群中的占比。
4.3 ceph_osd_up:OSD 存活状态
ceph_osd_up 是一个 Gauge 类型 指标,用于标识 OSD 守护进程是否正在运行并与 Monitor 保持心跳。其值为 1 表示 OSD 处于 up 状态,0 表示 down 状态。
# HELP ceph_osd_up OSD is up
# TYPE ceph_osd_up gauge
ceph_osd_up{ceph_daemon="osd.0", instance="rook-ceph-osd-0", job="ceph"} 1
ceph_osd_up{ceph_daemon="osd.1", instance="rook-ceph-osd-1", job="ceph"} 0
与版本漂移的关联:
- 在 Rook 升级 OSD 时,OSD 会依次重启,
ceph_osd_up会短暂变为0,重启完成后恢复为1。 - 如果升级后 OSD 因版本不兼容(例如新版本 OSD 无法与旧版本 MON 通信)而无法启动,
ceph_osd_up将持续为0,此时需要结合ceph_version指标排查版本冲突。 - 告警策略: 建议设置
ceph_osd_up == 0持续 2 分钟告警,排除升级重启的短暂抖动。
4.4 ceph_mon_quorum_status:Monitor 仲裁状态
ceph_mon_quorum_status 是一个 Gauge 类型 指标,用于标识 Monitor 是否在当前的仲裁(Quorum)中。其值为 1 表示该 Monitor 在 Quorum 中,0 表示不在 Quorum 中。
# HELP ceph_mon_quorum_status Monitor is in quorum
# TYPE ceph_mon_quorum_status gauge
ceph_mon_quorum_status{ceph_daemon="mon.a", instance="rook-ceph-mon-a", job="ceph"} 1
ceph_mon_quorum_status{ceph_daemon="mon.b", instance="rook-ceph-mon-b", job="ceph"} 1
ceph_mon_quorum_status{ceph_daemon="mon.c", instance="rook-ceph-mon-c", job="ceph"} 0
版本漂移场景下的重要性:
- Monitor 的版本必须严格一致,否则无法形成 Quorum。如果升级 MON 时版本不匹配,
ceph_mon_quorum_status会显示部分 MON 不在 Quorum 中。 - 当 Quorum 丢失时(所有 MON 的该指标均为
0),集群将完全不可用,这是最高优先级的告警。 - 关联指标: 建议同时监控
ceph_mon_quorum_status和ceph_version,当 Quorum 异常且版本不一致时,优先排查版本漂移问题。
关键告警规则: 在 Rook 环境中,MON 通常部署为 3 个副本。设置
sum(ceph_mon_quorum_status) < 2 持续 1 分钟告警,表示 Quorum 已不足多数,集群面临不可用风险。
4.5 其他关键指标速查
| 指标名称 | 类型 | 含义 | 版本漂移场景用途 |
|---|---|---|---|
ceph_osd_in |
Gauge | OSD 是否在集群内(1=in, 0=out) | 升级后 OSD 是否被自动标记为 out |
ceph_pg_active |
Gauge | 处于 active 状态的 PG 数量 | 版本不一致可能导致 PG 无法达到 active |
ceph_pg_degraded |
Gauge | 处于 degraded 状态的 PG 数量 | 版本漂移导致数据迁移异常时该值上升 |
ceph_health_status |
Gauge | 集群健康状态(1=HEALTH_OK, 2=HEALTH_WARN, 3=HEALTH_ERR) | 版本漂移通常会导致 HEALTH_WARN 或 HEALTH_ERR |
4.6 指标关联分析:版本漂移检测流程图
下图展示了从指标采集到版本漂移告警的完整检测流程,帮助理解各指标在监控链路中的角色:
4.7 实战:版本漂移场景下的指标组合查询
以下 PromQL 查询语句可用于快速定位版本漂移导致的异常节点:
-- 查询所有版本及其对应的 OSD 数量
count by (release) (ceph_version{ceph_daemon=~"osd.*"})
-- 查找版本不一致且 OSD 状态为 down 的节点
ceph_osd_up == 0 and on (instance) (count by (instance) (ceph_version) > 1)
-- 查找不在 Quorum 中的 MON 及其版本
ceph_mon_quorum_status == 0 and on (ceph_daemon) (ceph_version)
-- 综合告警:版本漂移且存在 down 的 OSD
count by (release) (ceph_version) > 1 and sum(ceph_osd_up == 0) > 0
最佳实践: 在 Rook Ceph 环境中,建议将上述查询语句配置为 Prometheus 告警规则,并结合 Alertmanager 发送到企业微信、钉钉或 PagerDuty。同时,在 Grafana 中创建“版本漂移仪表盘”,将
ceph_version、ceph_osd_up、ceph_mon_quorum_status 三个指标放在同一时间轴上进行对比分析,可以快速定位问题根因。