Prometheus 高可用架构改造周度运行验收
在大型分布式系统的运维体系中,监控系统本身必须比被监控的业务系统高出一个数量级的可靠性。如果业务系统发生抖动时,监控大盘先由于内存溢出(OOM)崩溃了,那么整个运维团队就彻底沦为了“盲人摸象”。
在第一周的监控深建战役中,我们对生产环境的历史监控架构进行了大刀阔斧的重构:彻底淘汰了单机大一统 Prometheus,落地了**“Prometheus Agent 模式轻量分片采集 + VictoriaMetrics 双写自动去重持久化 + OpenTelemetry Collector 统一汇聚”**的存算分离高可用架构。
今天,我们对这套全新监控体系进行了为期 24 小时的全链路极限压力测试与故障注入运行验收。
验收架构总览与核心设计
[ K8s 节点 / Pods / 中间件 ] ─── 暴露 Metrics │ ├───► [ Prometheus Agent-A (分片 0/2, 双写) ] ──┐ │ │ └───► [ Prometheus Agent-B (分片 1/2, 双写) ] ──┤ │ (remote_write) ▼ ┌─────────────────────────┐ │ VictoriaMetrics Cluster │ │ - vminsert (负载均衡) │ │ - vmstorage (自动去重) │ │ - vmselect (全局聚合) │ └────────────┬────────────┘ ▲ │ (PromQL 查询) [ Grafana 大盘 ]- 采集端解耦:Prometheus 开启
--enable-feature=agent,本地不落 TSDB,无后台段压缩开销,单实例内存稳定在 1.5GB 以内。 - 存储端去重:通过
-dedup.minScrapeInterval=15s,vmstorage 在底层无损合并双写副本,存储开销与查询数据完全平滑。
验收测试三大极限场景实测数据
场景一:单台 Prometheus 采集实例突发宕机(模拟机房单点故障)
- 测试动作:在业务高峰期(全网指标写入速率 180 万 samples/s 时),直接
kubectl delete pod prometheus-agent-0-0 --force强制杀死主采集副本。 - 实测表现:
- 由于备用副本
prometheus-agent-0-1保持着全量并发采集并持续向vminsert写入,Grafana 核心监控大盘曲线无任何断点、无任何毛刺。 - 数据完整率保持100.0%,Alertmanager 告警未发生任何漏报或误报。
- 5 秒后 K8s 重新拉起 Agent 容器,Agent 自动重放 WAL 日志,数据无缝平滑缝合。
- 由于备用副本
场景二:单个 vmstorage 存储节点宕机与分片恢复
- 测试动作:人为切断 4 节点
vmstorage集群中vmstorage-2节点的网络通信。 - 实测表现:
vminsert在 50ms 内感知到节点失联,自动将后续写入流量通过一致性哈希重试重新分配给存活的 3 台节点,无写入阻塞。vmselect查询时标记降级状态,大跨度查询依然在 400ms 内返回数据。- 故障恢复后,
vmstorage-2重新加入集群并自动触发后台数据同步。
场景三:大促 3 倍洪峰时序压力注入压测
- 测试动作:通过模拟发包工具将全集群活跃时间序列从 800 万暴力拉升至2,400 万,瞬时写入吞吐达到每秒 450 万数据点。
- 实测性能数据指标:
| 度量维度 | 改造前(单机 Prometheus) | 改造后(新高可用架构) | 达标判定 |
|---|---|---|---|
| Grafana 核心看板 P99 查询延迟 | 8.4 秒 (频繁报 504 超时) | 185 毫秒 | ✅ 优秀 |
| 活跃指标承载上限 | 450 万 (再多直接 OOM 崩溃) | 3,000 万+ | ✅ 达标 |
| 单数据点磁盘存储压缩率 | 1.8 Bytes / sample | 1.18 Bytes / sample | ✅ 节约 34% 存储 |
| 单机采集器物理内存占用 | 28GB ~ 45GB (剧烈锯齿) | 1.2GB ~ 1.8GB (绝对平稳) | ✅ 压降 95% |
生产级验收标准沉淀
经过严格的破坏性测试与指标验证,我们正式确立了监控体系生产准入的四条黄金红线:
- 可用性红线:采集端任意单一 Pod 宕机,监控大盘数据断点时间必须 $\le 0$ 秒(双写完全无感)。
- 延迟红线:涵盖过去 1 小时、100+ Pod 的全局聚合 PromQL 查询,P99 耗时必须 $\le 500\text{ms}$。
- 内存红线:采集端与存储端容器必须配置明确的
requests == limits,且在连续 7 天大促压测中无任何 OOMKilled 重启记录。 - 去重红线:双写环境下查询相同时间范围的数据点,去重准确率必须达到 100%,不得出现双重叠加的数值漂移。
总结
第一周监控高可用架构的成功验收与上线,标志着我们为即将到来的全链路压测与国庆大促铸就了一座坚不可摧的“可观测性灯塔”。
无论业务流量如何翻江倒海,这座灯塔都将以极致的稳定与精准,为全站稳定性保驾护航。