Ceph 介绍
Ceph 是一种高性能、高可扩展性和高可靠性的开源分布式存储系统,广泛应用于云计算、大数据和高性能计算等领域。它通过其核心组件(如对象存储守护进程OSD、元数据服务器MDS和监控守护进程MON)协同工作,利用 CRUSH 算法实现数据的分布存储和动态负载均衡,支持对象存储、块存储和文件存储等多种存储接口,能够灵活满足不同场景下的存储需求。
Ceph 的整体监控体系通过多种机制和工具实现对集群的全面监控与管理。除了核心的 MON 组件负责维护集群状态和一致性外,Ceph 还利用 OSD 的自我监控功能,实时检测存储节点的健康状况和性能指标。此外,Ceph 提供了丰富的监控接口,能够与 Prometheus、Grafana 等外部监控工具集成,实现对集群资源使用、性能瓶颈、故障告警等信息的可视化展示和实时分析,从而帮助管理员全面掌握集群运行状态,及时发现并解决问题,确保整个存储系统的稳定性和可靠性。
观测云
观测云是一款专为 IT 工程师打造的全链路可观测产品,它集成了基础设施监控、应用程序性能监控和日志管理,为整个技术栈提供实时可观察性。这款产品能够帮助工程师全面了解端到端的用户体验追踪,了解应用内函数的每一次调用,以及全面监控云时代的基础设施。此外,观测云还具备快速发现系统安全风险的能力,为数字化时代提供安全保障。
部署 DataKit
DataKit 是一个开源的、跨平台的数据收集和监控工具,由观测云开发并维护。它旨在帮助用户收集、处理和分析各种数据源,如日志、指标和事件,以便进行有效的监控和故障排查。DataKit 支持多种数据输入和输出格式,可以轻松集成到现有的监控系统中。
登录观测云控制台,在「集成」 - 「DataKit」选择对应安装方式,当前采用 Linux 主机部署 DataKit。

采集器配置
前置条件
- Ceph 暴露 Prometheus 监控接口
相关组件及端口关系如下:
组件 | 组件指标端口 |
---|---|
mgr-prometheus | 9283 |
ceph-exporter | 9926 |
nvmeof | 10008 |
nfs | 9587 |
通过以下方式获取对应监控的配置信息,其中 8765 为管理端口:
格式 http://<endpoint>:8765/sd/prometheus/sd-config?service=<组件名称>
获取 prometheus 的配置文件。
如: http://<endpoint>:8765/sd/prometheus/sd-config?service=mgr-prometheus
获取 mgr-prometheus 的配置文件。
arduino
[root@ceph001 ~]# curl http://192.168.0.37:8765/sd/prometheus/sd-config?service=mgr-prometheus
[{"targets": ["ceph001:9283"], "labels": {}}]
可以看到有一个 targets,通过 targets,我们就可以配置出对应的指标访问 url: http://ceph001:9283/metrics
由于节点会飘移,所以采集的时候需要配置多个 targets。
DataKit 开启 Prom 采集器
按照实际节点数调整配置:
- ceph-mgr.conf
进入 DataKit 安装目录下的 conf.d/prom
,复制 prom.conf.sample
为 ceph-mgr.conf
。
bash
cp prom.conf.sample ceph-mgr.conf
修改 ceph-mgr.conf
内容如下:
ini
# {"version": "1.74.2", "desc": "do NOT edit this line"}
[[inputs.prom]]
## Exporter URLs.
urls=["http://ceph001:9283/metrics","http://ceph002:9283/metrics","http://ceph003:9283/metrics"]
## Collector alias.
source = "ceph-mgr"
## Customize tags.
[inputs.prom.tags]
cluster="ceph-cluster"
...
- ceph-exporter.conf
进入 DataKit 安装目录下的 conf.d/prom
,复制 prom.conf.sample
为 ceph-exporter.conf
。
bash
cp prom.conf.sample ceph-exporter.conf
修改 ceph-exporter.conf 内容如下:
ini
# {"version": "1.74.2", "desc": "do NOT edit this line"}
[[inputs.prom]]
## Exporter URLs.
urls=["http://ceph001:9926/metrics","http://ceph002:9926/metrics","http://ceph003:9926/metrics"]
## Collector alias.
source = "ceph-exporter"
## Customize tags.
[inputs.prom.tags]
cluster="ceph-cluster"
...
- ceph-nfs.conf
进入 DataKit 安装目录下的 conf.d/prom
,复制 prom.conf.sample
为 ceph-nfs.conf
。
bash
cp prom.conf.sample ceph-nfs.conf
修改 ceph-nfs.conf 内容如下:
ini
# {"version": "1.74.2", "desc": "do NOT edit this line"}
[[inputs.prom]]
## Exporter URLs.
urls=["http://ceph001:9587/metrics"]
## Collector alias.
source = "ceph-nfs"
## Customize tags.
[inputs.prom.tags]
cluster="ceph-cluster"
...
- ceph-nvmeof.conf
进入 DataKit 安装目录下的 conf.d/prom
,复制 prom.conf.sample
为 ceph-nvmeof.conf
。
bash
cp prom.conf.sample ceph-nvmeof.conf
修改 ceph-nvmeof.conf
内容如下:
ini
# {"version": "1.74.2", "desc": "do NOT edit this line"}
[[inputs.prom]]
## Exporter URLs.
urls=["http://ceph001:10008"]
## Collector alias.
source = "ceph-nvmeof"
## Customize tags.
[inputs.prom.tags]
cluster="ceph-cluster"
...
重启 DataKit
datakit service -R
关键指标
指标名称 | 描述 | 单位 |
---|---|---|
cluster_by_class_total_bytes | 按类别的集群总字节数 | 字节 |
cluster_by_class_total_used_bytes | 按类别的集群已使用的字节数 | 字节 |
cluster_by_class_total_used_raw_bytes | 按类别的集群已使用的原始字节数 | 字节 |
cluster_osd_blocklist_count | 集群 OSD 黑名单的数量 | 个 |
cluster_total_bytes | 集群总字节数 | 字节 |
cluster_total_used_bytes | 集群已使用的字节数 | 字节 |
cluster_total_used_raw_bytes | 集群已使用的原始字节数 | 字节 |
daemon_health_metrics | 守护进程健康指标 | 无单位 |
disk_occupation | 磁盘占用率 | 百分比 |
disk_occupation_human | 磁盘占用率(人类可读格式) | 百分比 |
exporter_scrape_time | 导出器抓取时间 | 秒 |
health_detail | 健康详细信息 | 无单位 |
health_status | 健康状态 | 无单位 |
healthcheck_slow_ops | 健康检查慢操作的数量 | 次 |
mgr_metadata | 管理器元数据 | 无单位 |
mgr_module_can_run | 管理器模块是否可以运行 | 布尔值 |
mgr_module_status | 管理器模块状态 | 无单位 |
mgr_status | 管理器状态 | 无单位 |
mon_election_call | 监控器选举调用次数 | 次 |
mon_election_lose | 监控器选举失败次数 | 次 |
mon_election_win | 监控器选举成功次数 | 次 |
mon_metadata | 监控器元数据 | 无单位 |
mon_num_elections | 监控器选举次数 | 次 |
mon_num_sessions | 监控器会话数量 | 个 |
mon_quorum_status | 监控器仲裁状态 | 无单位 |
mon_session_add | 监控器会话添加次数 | 次 |
mon_session_rm | 监控器会话移除次数 | 次 |
mon_session_trim | 监控器会话修剪次数 | 次 |
num_objects_degraded | 降级对象的数量 | 个 |
num_objects_misplaced | 错误放置的对象数量 | 个 |
num_objects_unfound | 未找到的对象数量 | 个 |
objecter_op_active | 当前活跃的对象操作数量 | 个 |
objecter_op_r | 对象读取操作的数量 | 次 |
objecter_op_rmw | 对象读取-修改-写入操作的数量 | 次 |
objecter_op_w | 对象写入操作的数量 | 次 |
osd_apply_latency_ms | OSD 应用延迟 | 毫秒 |
osd_commit_latency_ms | OSD 提交延迟 | 毫秒 |
场景视图
登录观测云控制台,点击「场景」 -「新建仪表板」,输入 "Ceph", 选择 "Ceph Cluster",点击 "确定" 即可添加视图。
- Ceph Cluster:可查看 Ceph 集群相关信息


- Ceph OSD


- Ceph - CephFS


监控器(告警)
观测云内置了监控器模板,可以选择从模版创建监控器,并开启适合业务的监控器以及时通知相关成员关注问题,触发条件、频率等信息可以依据实际业务进行调整。
登录观测云控制台,点击「监控」 -「新建监控器」,输入 "阿里云 Ceph", 选择对应的监控器,点击 "确定" 即可添加。

总结
使用观测云可以实时采集 Ceph 的各项关键指标,包括集群的健康状态、存储利用率、I/O 性能、网络带宽等。同时,观测云支持可视化界面,能够以直观的图表和仪表板形式展示 Ceph 的运行数据,帮助运维人员快速定位问题。此外,它还具备强大的告警功能,一旦检测到异常情况,如磁盘故障、性能瓶颈等,能够及时发出告警通知,确保 Ceph 集群的稳定运行。