ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

CephFS Top Utility(cephfs-top)实战指南:Ceph 文件系统实时性能监控完全解析

CephFS Top Utility(cephfs-top)实战指南:Ceph 文件系统实时性能监控完全解析 存储分布式文件系统对象存储后端高可用【免费下载链接】cephCeph is a distributed object, block, and file storage platform项目地址https://gitcode.com/gh_mirrors/ce/ceph点击查看免费下载cephfs-top是 Ceph 官方提供的top(1)风格命令行工具用于实时查看 Ceph FilesystemCephFS上各个客户端FUSE/kernel/libcephfs 挂载的性能指标。它依赖 Ceph Manager 的stats插件获取由 MDS 周期性上报的客户端指标既能以交互式 curses 界面滚动观察也能通过--dump一次性输出 JSON 数据供脚本消费。本文以 man 手册 与 用户指南 为主体结合仓库中 cephfs-top 脚本源码 与 mgr/stats 模块 的实现完整讲解其工作原理、指标含义、命令行参数、交互操作与故障排查。一、cephfs-top 概述cephfs-top为 Ceph 文件系统提供类似top(1)的实时监控能力各种客户端指标被周期性刷新并展示在终端上。它是一个基于curses的 Python 脚本依赖 Ceph Manager 中的stats插件来拉取并展示指标参见 用户指南。与操作系统的top命令类似cephfs-top 的主要使用场景包括定位某个客户端是否成为性能热点I/O 大小、读写速度、延迟突增观察多文件系统、多客户端环境下的资源占用分布检查能力cap、dentry 租约的命中率判断元数据路径是否存在瓶颈通过--dump将指标导出为 JSON接入自建的监控或告警管道。从打包层面看cephfs-top 以独立二进制与 man page 形式安装参考 debian/cephfs-top.install 可知其安装内容包含usr/bin/cephfs-top、cephfs_top-*.egg-info以及usr/share/man/man8/cephfs-top.8。用户指南中明确说明cephfs-top 的最低兼容 Python 版本为 3.6.0任何提供兼容 Python 的发行版均可运行。二、数据链路与 stats 插件工作机制理解 cephfs-top 之前必须先理解它背后的数据管道。官方用户指南对此有清晰的描述CephFS 客户端周期性上报挂载中的 CephFS 客户端会周期性地将各类指标转发给元数据服务器MDS。MDS rank 0 汇总每个活跃 MDS 将其各自收集的客户端指标集合转发给 MDS rank 0。转发至 Ceph ManagerMDS rank 0 将指标聚合后转发给 Ceph Manager。stats 插件落地Ceph Manager 中的stats插件对外提供接口供 cephfs-top 等消费者获取这些指标。指标被划分为两类全局指标global metrics面向整个文件系统的一组指标例如客户端读延迟per-mds 指标面向特定 MDS rank 的指标例如某个 MDS 处理的子树subtree数量。从 perf_stats.py 的MDS_PERF_QUERY_COUNTERS_MAP可以确认当前统计的 16 个计数器的顺序与命名cap_hit、read_latency、write_latency、metadata_latency、dentry_lease、opened_files、pinned_icaps、opened_inodes、read_io_sizes、write_io_sizes、avg_read_latency、stdev_read_latency、avg_write_latency、stdev_write_latency、avg_metadata_latency、stdev_metadata_latency。注意官方文档特别说明目前只跟踪全局指标global metricsper-mds 计数器集合在输出中暂为空。启用 stats 插件stats插件默认是禁用的需要显式启用$ ceph mgr module enable stats启用后即可通过以下命令直接拉取 CephFS 性能指标$ ceph fs perf stats从 module.py 可以看到该命令的定义支持三个可选过滤参数mds_rank、client_id、client_ip权限要求为r只读cmd: fs perf stats namemds_rank,typeCephString,reqfalse nameclient_id,typeCephString,reqfalse nameclient_ip,typeCephString,reqfalse ,handle_command中除默认 JSON 输出外还支持formatjson-pretty、xml、xml-pretty等格式XML 格式需要额外的dicttoxmlPython 包。ceph fs perf stats 输出结构ceph fs perf stats默认输出 JSON包含以下字段字段含义versionstats 输出版本号global_counters全局性能指标名称列表counters每 MDS 的性能指标名称列表client_metadataCephFS 客户端元数据挂载点、hostname、IP、root、有效指标集合等global_metrics全局性能计数器按文件系统、按客户端组织的具体数值metricsper-MDS 性能计数器当前为空与延迟的 rank 集合其中delayed_ranks在metrics字段内是正在上报过期指标的活跃 MDS rank 集合——例如 MDS rank 0 与其他活跃 MDS 之间出现暂时性的网络问题时就会出现该情况。按客户端与按 MDS 过滤可以为特定客户端或一组活跃 MDS 拉取指标。例如只取 client-id 为 1234 的客户端$ ceph fs perf stats --client_id1234只取 MDS rank 1 和 2 的指标$ ceph fs perf stats --mds_rank1,2从 perf_stats.py 的FilterSpec及参数解析代码可知mds_rank支持逗号分隔的 rank 列表如1,2client_id必须为纯数字client_ip会先剥离v1:/v2:前缀再以ipaddress库校验合法性——非法输入会抛出ValueError并返回-EINVAL给调用方。三、安装、认证与快速开始安装cephfs-top 作为独立包cephfs-top提供用户指南原文available as part ofcephfs-toppackage安装后提供cephfs-top二进制与 man page见 debian/cephfs-top.install。创建专用认证用户默认情况下cephfs-top使用client.fstop用户连接 Ceph 集群。创建该用户并赋予只读权限$ ceph auth get-or-create client.fstop mon allow r mds allow r osd allow r mgr allow r $ cephfs-top权限拆解mon allow r允许读取集群状态用于执行fs ls、mgr module ls等监控命令mds allow r允许读取 MDS 侧信息osd allow r允许读取 OSD 侧信息mgr allow r允许调用fs perf stats拉取性能指标。运行直接运行即可进入交互界面$ cephfs-top四、字段指标详解cephfs-top 主界面中每一列对应一项客户端指标。下表完整列出 man page 与用户指南中定义的全部 17 个字段并补充其计算与单位信息字段全称含义单位chitCap hit文件能力capability命中数占总 caps 数的百分比%dleaseDentry lease已发放的 dentry 租约占总租约请求的百分比%ofilesOpened files已打开的文件数个数oicapsPinned caps被固定pinned的 caps 数量个数oinodesOpened inodes已打开的 inode 数量个数rtioTotal size of read I/Os所有进程产生的读 I/O 总字节数MBwtioTotal size of write I/Os所有进程产生的写 I/O 总字节数MBraioAverage size of read I/Os平均每次读 I/O 的字节数总读字节/总读次数MBwaioAverage size of write I/Os平均每次写 I/O 的字节数总写字节/总写次数MBrspRead speed相对上一次刷新间隔的读 I/O 速度MB/swspWrite speed相对上一次刷新间隔的写 I/O 速度MB/srlatavgAverage read latency读延迟的平均值msrlatsdStandard deviation for read latency读延迟相对均值的标准差离散程度mswlatavgAverage write latency写延迟的平均值mswlatsdStandard deviation for write latency写延迟相对均值的标准差msmlatavgAverage metadata latency元数据延迟的平均值msmlatsdStandard deviation for metadata latency元数据延迟相对均值的标准差ms指标计算方式的源码印证这些字段并非 MDS 直接给出的最终值而是由 cephfs-top 脚本根据 stats 插件下发的原始计数器计算得到参见 cephfs-top 脚本百分比calc_perc对(命中数, 总请求数)二元组计算c[0]/(c[0]c[1])*100两者均为 0 时返回 0.0延迟calc_lat将(秒, 纳秒)二元组换算为毫秒c[0]*1000 c[1]/1000000标准差calc_stdev对样本数大于 1 时计算sqrt(c[0]/(c[1]-1))/1000000毫秒I/O 总大小calc_size将字节数换算为 MBc[1]/(1024*1024)平均 I/O 大小calc_avg_size为c[1]/(c[0]*1024*1024)速度calc_speed为相邻两次刷新间的字节增量除以时间间隔size/(duration*1024*1024)MB/s。速度类字段rsp/wsp在实现上依赖脚本内部维护的last_read_size/last_write_size记录上一次刷新的累计字节数再与本次差值相减见 脚本 create_client 实现。当某客户端在上报元数据中未声明某个指标有效时valid_metrics集合对应列显示N/A见脚本中calc_perc附近的判断逻辑。五、命令行选项详解man page 与用户指南共同定义了以下选项。此外从 脚本 argparse 定义 可知-d/--delay的合法范围是125 秒整数并非任意正整数。--cluster指定要连接的 Ceph 集群名默认ceph$ cephfs-top --cluster cluster--id指定用于连接 Ceph 集群的客户端用户ID默认fstop即使用client.fstop$ cephfs-top --id name--conffile [CONFFILE]集群配置文件路径。从 脚本 init() 实现 可以看到指定该选项时以rados.Rados(rados_id..., clustername..., conffile...)构造连接否则省略 conffile随后调用conf_read_file()与connect()。连接失败时会检查errno.ENOENT并提示cluster 不存在。-d [DELAY],--delay [DELAY]刷新间隔秒默认 1 秒。用户指南强调刷新间隔应为正整数实际实现中 argparse 的choicesrange(1, 26)将其限制在 125$ cephfs-top -d seconds--selftest执行自检模式对stats模块做健全性检查。从 selftest() 实现 可知其验证两点拉取fs perf stats结果中的version必须等于FS_TOP_SUPPORTED_VER 2否则报 perf stats version mismatch!global_counters中每个计数器名转大写后必须能在 cephfs-top 内置的MGR_STATS_COUNTERS列表中找到否则报 Cannot handle unknown metrics。自检通过时输出selftest ok。--dump将指标以 JSON 形式输出到 stdout不创建 curses 显示界面$ cephfs-top --dump从 dump_metrics_to_stdout() 的实现看该模式还会在输出中附带date当前时间与client_counttotal_clients / fuse / kclient / libcephfs 的数量统计。若集群中无文件系统输出No filesystem available。--dumpfs fs_name将指定文件系统的指标以 JSON 输出到 stdout同样不进入交互界面$ cephfs-top --dumpfs fs_name若指定文件系统不存在输出Filesystem fs_name not available。其他实现细节脚本为main中的四种模式做了分发--selftest→ft.selftest()--dump→dump_metrics_to_stdout()--dumpfs→ 传入args.dumpfs[0]否则 →curses.wrapper(ft.setup_curses)进入交互界面。脚本注册了SIGTERM/SIGINT处理函数通过threading.Event优雅退出。六、交互式界面与快捷键界面结构cephfs-top 有两种视图All Filesystem Info主界面/首页汇总所有文件系统的客户端指标Selected Filesystem Info单文件系统视图进入某个文件系统后的详细视图。顶部头部区域展示程序名与时间cephfs-top - time、标题、客户端汇总行Total Client(s): N - x FUSE, y kclient, z libcephfs以及当前过滤条件Filters: Sort - 字段, Limit - 数值。交互命令按键功能说明m文件系统选择弹出文件系统菜单方向键选择、回车确认q返回上一屏s排序字段选择弹出字段菜单回车确认最后一个选项Default恢复默认排序l客户端数量限制输入数字设置最多显示的客户端行数d恢复默认q返回输入以 4 位为上限r重置将排序字段与限制值恢复为默认q退出处于首页All Filesystem Info时退出程序处于单文件系统视图时返回首页其中默认排序字段是cap_hit即chit。排序字段菜单共 18 项除Default外对应主表所有列参见 choose_field 实现例如chit CAP_HIT dlease DENTRY_LEASE ofiles OPENED_FILES oicaps PINNED_ICAPS oinodes OPENED_INODES rtio READ_IO_SIZES raio READ_AVG_IO_SIZES rsp READ_IO_SPEED wtio WRITE_IO_SIZES waio WRITE_AVG_IO_SIZES wsp WRITE_IO_SPEED rlatavg AVG_READ_LATENCY rlatsd STDEV_READ_LATENCY wlatavg AVG_WRITE_LATENCY wlatsd STDEV_WRITE_LATENCY mlatavg AVG_METADATA_LATENCY mlatsd STDEV_METADATA_LATENCY Default滚动与导航指标列表支持使用方向键Arrow Keys、PgUp/PgDn、Home/End 以及鼠标滚轮/点击进行滚动用户指南原文。从脚本的按键分发代码run_display 中的滚动处理可见KEY_UP/KEY_DOWN逐行滚动KEY_NPAGE/KEY_PPAGE每次滚动 20 行KEY_RIGHT/KEY_LEFT用于水平滚动KEY_HOME/KEY_END跳到水平起点/终点KEY_RESIZE处理终端尺寸变化。运行效果以下截图展示了包含 2 个文件系统cephfs1 与 cephfs2时的实际运行界面七、源码实现原理深入cephfs-top 是一个约 1200 行的单文件 Python 脚本src/tools/cephfs/top/cephfs-top核心类为FSTop继承FSTopBase其工作流程可分四步连接初始化init()通过rados.Rados构造连接支持--id/--cluster/--conffile调用conf_read_file()读取配置、connect()建立连接随后调用verify_perf_stats_support()。stats 模块校验verify_perf_stats_support()执行mgr module ls检查enabled_modules中是否包含stats未启用则抛出stats module not enabled. Use ceph mgr module enable stats to enable错误。文件系统枚举get_fs_names()执行fs lsmon 命令JSON 格式获得所有文件系统名列表作为后续轮询与菜单的数据源。指标拉取perf_stats_query()向 MGR 发送fs perf stats命令formatjson解析返回 JSON。版本匹配机制cephfs-top 与 mgr/stats 通过版本号严格对齐脚本端FS_TOP_SUPPORTED_VER 2插件端PERF_STATS_VERSION 2。create_header()在每次刷新时都会校验stats_json[version] FS_TOP_SUPPORTED_VER不一致时头部直接显示perf stats version mismatch!并停止渲染——这意味着升级 Ceph 版本时cephfs-top 需要与 MGR 端 stats 插件版本保持兼容。指标组织与显示脚本用MAIN_WINDOW_TOP_LINE_METRICSOrderedDict维护列的顺序与类型MetricType枚举PERCENTAGE / LATENCY / SIZE / STDEV / NONE并保证与 stats 插件下发的global_counters顺序一致列头由create_table_header()依据该顺序生成create_client()逐客户端渲染一行支持超长内容以结尾截断wrap()函数排序逻辑在create_clients()中实现首帧按客户端 ID 排序之后按当前选择的字段current_states[last_field]降序排列并应用limit限制行数同时清理已消失的文件系统/客户端缓存避免残留脏数据客户端元数据中挂载点信息按mount_pointhostname/IP格式拼装为最后一列mount_pointhost/addr缺少任一元数据时显示N/A。网络与终端适配脚本使用 cursesnewpad高 10000、宽默认 300构建可滚动大画布当终端宽度超过 300 时PAD_WIDTH自适应为窗口宽度终端尺寸过小导致头部渲染失败时会endwin()并提示Error creating header. Please increase the window width to use cephfs-top.刷新节奏通过curses.halfdelay(refresh_interval_secs * 10)控制。八、故障排查与注意事项现象原因与处理stats module not enabled. Use ceph mgr module enable stats to enablestats 插件未启用执行ceph mgr module enable statsperf stats version mismatch!cephfs-top 与 MGR stats 插件版本不匹配FS_TOP_SUPPORTED_VER/PERF_STATS_VERSION不一致升级对应组件Cannot handle unknown metrics from ceph fs perf stats: [...]stats 下发了 cephfs-top 未知的计数器多出现在--selftest模式需同步升级 cephfs-topError creating header. Please increase the window width...终端窗口过窄放大终端宽度cluster name does not exist指定的--cluster集群不存在检查集群名与配置Filesystem fs_name not available--dumpfs指定的文件系统不存在No filesystem available集群中当前没有可用的文件系统或fs ls返回为空delayed_ranks出现部分活跃 MDS rank 上报的指标过期如 MDS rank 0 与其它 MDS 之间网络抖动指标展示可能滞后其他注意事项stats插件默认禁用且目前只跟踪全局指标per-MDS 计数器输出为空-d/--delay合法范围为 125 秒超出范围 argparse 会直接拒绝cephfs-top 需要mon/mds/osd/mgr的只读权限官方推荐使用独立的client.fstop账号而非 adminceph fs perf stats默认 JSON 输出也支持formatjson-pretty与xmlxml 需要dicttoxml包。九、参考资料cephfs-top man page关联文档CephFS Top Utility 用户指南cephfs-top 可执行脚本源码mgr/stats 模块入口mgr/stats 性能数据实现FSPerfStatscephfs-top 打包清单相关命令手册ceph(8)、ceph-mds(8)赞分享存储分布式文件系统对象存储后端高可用【免费下载链接】cephCeph is a distributed object, block, and file storage platform项目地址https://gitcode.com/gh_mirrors/ce/ceph点击查看免费下载相关推荐Ceph 文件系统实时性能监控cephfs-top 工具与 stats 管理器插件实战指南Ceph 文件系统实时性能监控cephfs top 工具与 stats 管理器插件实战指南 cephfs top 是 Ceph 官方提供的类 top 1 文件存储分布式文件系统对象存储后端高可用Ceph 多文件系统Multiple CephFS部署、授权与运维实战指南Ceph 多文件系统Multiple CephFS部署、授权与运维实战指南 本文以 doc/cephfs/multifs.rst https://link.存储分布式文件系统对象存储后端高可用Ceph CephFS FUSE 挂载实战使用 ceph-fuse 在用户态挂载 Ceph 文件系统Ceph CephFS FUSE 挂载实战使用 ceph fuse 在用户态挂载 Ceph 文件系统 CephFS 提供了两种挂载方式内核驱动与 FUSE存储分布式文件系统对象存储后端高可用创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表