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

版本漂移判定逻辑:

  • 正常状态: 所有守护进程的 release Label 值完全一致,例如全部为 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 指标关联分析:版本漂移检测流程图

下图展示了从指标采集到版本漂移告警的完整检测流程,帮助理解各指标在监控链路中的角色:

版本漂移检测流程:指标采集 → 关联分析 → 告警触发 Ceph Exporter 采集 Prometheus 存储 Grafana 可视化 ceph_version ceph_osd_up ceph_mon_quorum_status ceph_health_status 关联分析:count by (release) (ceph_version) > 1 同时检查 ceph_osd_up == 0 和 ceph_mon_quorum_status == 0 的节点 触发告警:版本漂移 + 组件异常 建议设置 5 分钟持续评估,避免升级过渡期误报 说明:版本漂移检测需要组合多个指标,单一指标无法完整反映集群状态

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 三个指标放在同一时间轴上进行对比分析,可以快速定位问题根因。