文章目录 ETCD 磁盘延迟指标验证分析报告 一、执行摘要 二、ETCD 指标采集验证 2.1 ETCD Metrics 端点配置 2.2 磁盘延���相关指标验证 2.3 PromQL 查询示例 三、底层磁盘延迟验证 (iostat) 3.1 磁盘布局信息 3.2 当前磁盘 I/O 状态 ETCD 数据磁盘 (/dev/vdb) 关键指标说明 3.3 空间使用情况 四、ETCD 指标 vs 底层磁盘延迟关系分析 4.1 I/O 延迟链路图 4.2 指标对应关系 4.3 判决树分析 五、OSWBB 工具匹配建议 5.1 OSWBB 相关指标 5.2 OSWBB 与 ETCD 指标匹配方法 方法一:时间戳关联分析 方法二:Prometheus + OSWBB 对比 5.3 场景判断指南 六、诊断建议 6.1 当前环境评估 6.2 当 ETCD 延迟告警触发时的排查步骤 6.3 优化建议 七、总结 八、参考资源 ETCD 磁盘延迟指标验证分析报告 生成时间 : 2026-03-11验证环境 : -148 (QFusion 集群)ETCD 版本 : 3.5.6分析目标 : 验证etcd_disk_wal_fsync_duration_seconds与底层磁盘延迟的关系
一、执行摘要 项目 结论 ETCD 指标采集方式 ETCD 内置 metrics 端点 (http://127.0.0.1:2381/metrics) etcd_disk_wal_fsync_duration_seconds 不等于 底层磁盘延迟,是应用层 fsync 总耗时oswbb 工具匹配度 可匹配,需要关联时间戳进行分析 当前磁盘 I/O 状态 正常,延迟较低
二、ETCD 指标采集验证 2.1 ETCD Metrics 端点配置 通过kubectl get pod验证,ETCD Pod 配置如下:
# ETCD 启动参数中的 metrics 配置 - - listen- metrics- urls=http: //127.0.0.1: 2381 配置项 值 说明 Metrics URL http://127.0.0.1:2381仅监听本地,不对外暴露 端口 2381 Prometheus 指标端点 访问方式 通过 Prometheus 服务采集 qfusion/prometheus:9090
2.2 磁盘延���相关指标验证 Prometheus 中确认存在的 ETCD 磁盘延迟指标:
指标名称 类型 说明 etcd_disk_wal_fsync_duration_seconds_bucketHistogram WAL fsync 延迟分布 etcd_disk_wal_fsync_duration_seconds_countCounter WAL fsync 调用次数 etcd_disk_wal_fsync_duration_seconds_sumCounter WAL fsync 总耗时 etcd_disk_backend_commit_duration_seconds_bucketHistogram DB commit 延迟分布 etcd_disk_backend_commit_duration_seconds_countCounter DB commit 调用次数 etcd_disk_backend_commit_duration_seconds_sumCounter DB commit 总耗时
2.3 PromQL 查询示例 # WAL fsync P99 延迟 (毫秒) histogram_quantile(0.99, rate(etcd_disk_wal_fsync_duration_seconds_bucket[5m]) ) * 1000 # DB commit P99 延迟 (毫秒) histogram_quantile(0.99, rate(etcd_disk_backend_commit_duration_seconds_bucket[5m]) ) * 1000 # WAL fsync 平均延迟 (秒) rate(etcd_disk_wal_fsync_duration_seconds_sum[5m]) / rate(etcd_disk_wal_fsync_duration_seconds_count[5m])三、底层磁盘延迟验证 (iostat) 3.1 磁盘布局信息 设备 大小 挂载点 用途 ───────────────────────────────────────────── /dev/vda 200G / 系统盘 /dev/vdb 200G /opt/qfusion ETCD 数据目录 /dev/vdc 200G /opt/qfusion1 其他数据3.2 当前磁盘 I/O 状态 采集时间 : 2026-03-11 (最近3次采样)
ETCD 数据磁盘 (/dev/vdb) 时间段 w/s wkB/s w_await svctm %util 状态 采样1 11.83 104.39 18.94ms 3.56ms 15.44% 正常 采样2 181.00 465.00 0.20ms 2.57ms 7.70% 正常 采样3 62.00 186.00 4.62ms 3.00ms 2.70% 正常
关键指标说明 指标 含义 正常范围 w_await写 I/O 平均等待时间 < 10ms (优秀), 10-50ms (正常) svctm平均服务时间 < 5ms (优秀) %util设备利用率 < 70%
3.3 空间使用情况 Filesystem Size Used Avail Use% Mounted on /dev/vdb 200G 68G 133G 34% /opt/qfusion /dev/vdc 200G 11G 190G 6% /opt/qfusion1四、ETCD 指标 vs 底层磁盘延迟关系分析 4.1 I/O 延迟链路图 ┌───────────────────────────────────────────────────────────────────���─┐ │ I/O 延迟链路 │ ├─────────────────────────────────────────────────────────────────────┤ │ │ │ 应用层 ETCD 内核层 磁盘物理层 │ │ │ │ │ │ │ │ ├─ 写操作 ──>│ │ │ │ │ │ ├─ write() ──>│ │ │ │ │ │ ├─ page cache ──>│ │ │ │ │ │ │ │ │ │ ├─ fsync() ──>├─ I/O 调度 ───>│ 磁盘写入 │ │ │ │ │ │ │ │ │<───────────┤ 返回 │ │ │ │ │ │ │ │ │ └─────┴────────────┴─────────────┴────────────────┴─────────────────┘ etcd_disk_wal_fsync_duration_seconds = ①②③ 整体耗时 底层磁盘延迟 = ③ 磁盘设备耗时4.2 指标对应关系 层级 指标 来源 包含内容 应用层 etcd_disk_wal_fsync_duration_secondsETCD fsync 系统调用完整耗时 内核块层 w_awaitiostat/oswbb I/O 在队列的等待时间 设备层 svctmiostat/oswbb 设备实际服务时间
4.3 判决树分析 ETCD WAL fsync 延迟高 │ ┌──────┴──────┐ │ │ oswbb w_await oswbb w_await 高 正常/低 │ │ │ ┌─────┴─────┐ │ 可能原因: │ 1. 文件系统延迟 │ 2. 内核参数 │ 3. 锁竞争 │ 4. ETCD 配置 │ ┌─────────┴─────────┐ │ │ oswbb %util 高 oswbb %util 低 │ │ 磁盘设备饱和 可能是: 1. 升级硬件 1. 磁盘性能问题 2. 分离负载 2. 阵列配置问题 3. 调整参数 3. 控制器瓶颈五、OSWBB 工具匹配建议 5.1 OSWBB 相关指标 oswbb 指标 文件 含义 对应 ETCD 关系 svctmiostat 平均服务时间 磁盘物理 I/O 耗时 awaitiostat 平均等待+服务时间 接近 fsync 总耗时 w_awaitiostat 写 I/O 等待时间 与 WAL fsync 相关度最高 %utiliostat 设备利用率 磁盘是否饱和 w/siostat 每秒写次数 WAL 写入频率 wkB/siostat 每秒写入 KB WAL 写入量
5.2 OSWBB 与 ETCD 指标匹配方法 方法一:时间戳关联分析 # 1. 同步采集时间 # ETCD 指标采集 kubectlexec -n kube-system etcd-xxx --sh -c \ "wget -qO- http://127.0.0.1:2381/metrics" > \ etcd_metrics_$( date +%s) .txt# oswbb 采集 cd /root/oswbb&& ./startOSWBB.sh60 10 # 2. 问题发生后,导出数据 # 从 oswbb 归档中提取问题时间段的 iostat 数据 # 3. 关联分析 # 找到 ETCD 延迟峰值的时间点,查看同一时间 oswbb 的 w_await、svctm、%util 方法二:Prometheus + OSWBB 对比 import pandasas pddef analyze_correlation ( oswbb_file, etcd_metrics) : """ 分析 oswbb 磁盘数据与 ETCD WAL fsync 的相关性 """ # 读取 oswbb 数据 oswbb= pd. read_csv( oswbb_file) # 关键指标 etcd_wal_fsync= etcd_metrics[ 'etcd_disk_wal_fsync_duration_seconds' ] oswbb_w_await= oswbb[ 'w_await' ] # 写等待 oswbb_svctm= oswbb[ 'svctm' ] # 服务时间 # 相关性分析 correlation= { 'etcd_wal vs w_await' : etcd_wal_fsync. corr( oswbb_w_await) , 'etcd_wal vs svctm' : etcd_wal_fsync. corr( oswbb_svctm) , } return correlation5.3 场景判断指南 场景 ETCD 延迟 OSWBB w_await OSWBB svctm OSWBB %util 根因判断 场景1 高 高 高 高 (>80%) 磁盘 I/O 性能瓶颈,设备饱和 场景2 高 正常/低 正常/低 低 (<30%) 文件系统延迟、内核参数、锁竞争 场景3 正常 高 高 低 I/O 队列长,但设备吞吐正常 场景4 正常 正常 正常 正常 无问题
六、诊断建议 6.1 当前环境评估 检查项 当前值 评估 vdb 磁盘 w_await 0.20ms - 18.94ms 正常(波动范围合理) vdb 磁盘 svctm 2.57ms - 3.56ms 正常(< 5ms) vdb 磁盘 %util 2.70% - 15.44% 正常(< 70%) vdb 空间使用率 34% 正常 ETCD metrics 指标 正常采集 正常
结论 : 当前环境磁盘 I/O 性能良好,无明显瓶颈。
6.2 当 ETCD 延迟告警触发时的排查步骤 # 1. 确认 ETCD 延迟指标 kubectl port-forward-n qfusion svc/prometheus9090 :9090--address 127.0 .0.1& curl -s "http://127.0.0.1:9090/api/v1/query?query=histogram_quantile(0.99,rate(etcd_disk_wal_fsync_duration_seconds_bucket[5m]))" # 2. 检查底层磁盘延迟 iostat-x 1 10 | grep vdb# 3. 检查 ETCD 数据目录 ls -lh /opt/qfusion/etcd/member/# 4. 检查文件系统类型 df -T /opt/qfusion# 5. 检查磁盘调度器 cat /sys/block/vdb/queue/scheduler# 6. 检查磁盘队列深度 cat /sys/block/vdb/queue/nr_requests6.3 优化建议 优化项 建议值 说明 ETCD 数据盘 独立 SSD 避免与高 I/O 应用混用 文件系统 XFS 相比 ext4 有更好的 fsync 性能 磁盘调度器 deadline/noop SSD 推荐使用 I/O 队列深度 根据 SSD 调整 通常 256-512
七、总结 7.1 核心结论 etcd_disk_wal_fsync_duration_seconds 不是底层磁盘延迟
它是应用层视角的 fsync 总耗时 包含文件系统、内核调度、设备 I/O 等多个环节 OSWBB 可以与 ETCD 指标匹配使用
通过时间戳关联分析 关键指标:w_await(写等待)、svctm(服务时间)、%util(利用率) 当前环境 I/O 状态正常
磁盘延迟低(w_await < 20ms) 设备利用率正常(%util < 20%) 7.2 验证方法 # 快速验证脚本 cat > check_etcd_disk_latency.sh<< 'EOF' #!/bin/bash echo "=== ETCD WAL fsync P99 ===" kubectl exec -n kube-system $(kubectl get po -n kube-system | grep etcd | head -1 | awk '{print $1}') \ -- sh -c "wget -qO- http://127.0.0.1:2381/metrics" | \ grep etcd_disk_wal_fsync_duration_seconds_bucket echo "" echo "=== 磁盘 I/O 状态 ===" iostat -x 1 1 | grep -v "Linux\|avg-cpu\|Device" EOF chmod +x check_etcd_disk_latency.sh ./check_etcd_disk_latency.sh八、参考资源 资源 链接 ETCD 官方仓库 https://github.com/etcd-io/etcd ETCD Metrics 文档 https://etcd.io/docs/v3.5/metrics/ ETCD 源码 metrics 实现 etcd/pkg/metrics/ OSWBB 文档 Oracle OS Watcher Black Box Prometheus PromQL 文档 https://prometheus.io/docs/prometheus/latest/querying/