4. 性能指标采集:Prometheus与Velero Metrics集成、关键性能指标(KPI)定义

性能调优的前提是可观测。Velero 原生暴露了丰富的 Prometheus Metrics,但默认并未开启。本章将指导你完成集成配置,并定义故障排查中必须关注的三大 KPI:备份时长、恢复时长、缓存命中率。

4.1 Prometheus 与 Velero Metrics 集成

Velero 使用 github.com/prometheus/client_golang 库暴露指标,监听端口默认为 :8085,路径为 /metrics。集成步骤如下:

  1. 确认 Velero 部署中已启用 Metrics:检查 Velero Deployment 的启动参数是否包含 --metrics-address=:8085。
  2. 创建 ServiceMonitor(适用于 Prometheus Operator):定义标签选择器匹配 Velero Pod。
  3. 配置 Prometheus 抓取:若未使用 Operator,则在 Prometheus 配置文件中添加 scrape_configs。
关键配置示例(Prometheus scrape_configs):
scrape_configs:
  - job_name: 'velero'
    kubernetes_sd_configs:
      - role: endpoints
    relabel_configs:
      - source_labels: [__meta_kubernetes_namespace]
        action: keep
        regex: velero
      - source_labels: [__meta_kubernetes_service_name]
        action: keep
        regex: velero
    metrics_path: /metrics
    scheme: http
验证集成:使用 kubectl -n velero port-forward deploy/velero 8085:8085 后,访问 http://localhost:8085/metrics,应看到以 velero_ 开头的指标。

4.2 关键性能指标(KPI)定义

在灾备缓存命中故障场景中,我们聚焦以下三个核心 KPI。它们直接反映系统健康度与调优效果。

KPI 名称 指标来源(Prometheus Metric) 定义与计算方式 故障排查意义
备份时长 velero_backup_duration_seconds(Histogram) 单次备份从开始到结束的耗时。通常关注 P99 或 P95 分位值。 过长表示可能存在网络瓶颈、存储限速或缓存未命中导致的数据重传。
恢复时长 velero_restore_duration_seconds(Histogram) 单次恢复操作的完成时间。同样关注高百分位值。 恢复时长突增通常与缓存层(如对象存储 CDN 或本地缓存)命中率下降直接相关。
缓存命中率 velero_cache_hit_total / velero_cache_miss_total(Counter) 命中次数 ÷(命中次数 + 未命中次数)× 100%。 核心指标。命中率低于 90% 时,备份/恢复时长会显著劣化,需立即排查缓存策略或存储后端。

4.3 缓存命中率计算与告警阈值

缓存命中率是衡量 Velero 本地缓存(--cache-dir)或远端缓存层效率的关键。在 PromQL 中计算如下:

# 缓存命中率(最近 5 分钟)
(
  sum(rate(velero_cache_hit_total[5m]))
  /
  (sum(rate(velero_cache_hit_total[5m])) + sum(rate(velero_cache_miss_total[5m])))
) * 100
告警建议:
  • Warning:缓存命中率 < 90%,持续 10 分钟。
  • Critical:缓存命中率 < 70%,持续 5 分钟。此时备份/恢复时长通常会翻倍。

4.4 性能指标采集架构

下图展示了 Velero、Prometheus 与 Grafana 之间的指标采集与可视化关系,以及缓存命中率在链路中的位置。

Velero 性能指标采集架构 Velero Server :8085/metrics 本地缓存 (--cache-dir) 对象存储 (S3/GCS) Prometheus scrape /metrics Grafana Dashboard 关键指标采集点 • velero_backup_duration_seconds • velero_restore_duration_seconds • velero_cache_hit_total / velero_cache_miss_total 缓存命中率计算 (PromQL) sum(rate(velero_cache_hit_total[5m])) / (sum(rate(velero_cache_hit_total[5m])) + sum(rate(velero_cache_miss_total[5m])))

4.5 备份/恢复时长分位值监控

由于备份和恢复时长属于典型的长尾分布,仅看平均值会掩盖性能劣化。建议在 Grafana 中配置如下面板:

  • P50(中位数):反映典型负载下的性能基线。
  • P95:反映大多数用户体验的上限,超过此值需关注。
  • P99:反映极端异常情况,通常与缓存未命中或存储抖动强相关。
Grafana PromQL 查询示例(备份时长 P95):
histogram_quantile(0.95,
  sum(rate(velero_backup_duration_seconds_bucket[5m])) by (le)
)

4.6 缓存命中率与备份时长的关联分析

在故障排查中,我们通常将缓存命中率与备份/恢复时长绘制在同一张 Grafana 面板中,观察其负相关关系。下图展示了这种关联分析的逻辑流程。

缓存命中率与备份时长关联分析流程 采集缓存命中率 采集备份时长 P95 绘制叠加时间序列 命中率下降 & 时长上升 命中率稳定 & 时长正常 触发缓存命中故障告警
实战建议:在 Grafana 中创建一个“灾备性能总览”Dashboard,将缓存命中率、备份时长 P95、恢复时长 P95 三个面板并排放置,时间范围统一。当缓存命中率跌破 85% 时,备份时长通常会在 2 分钟内出现明显尖峰,这是缓存命中故障的典型前兆。