1. 课程导论:蓝绿发布与灰度发布对比、Prometheus在发布中的核心价值、自动化故障排查的总体流程

1.1 蓝绿发布与灰度发布:核心概念与对比

在微服务与云原生架构下,发布策略直接决定了系统的风险暴露面与回滚速度。蓝绿发布与灰度发布是两种最主流的零宕机部署模式,但它们的切换逻辑、流量控制粒度与监控关注点存在本质差异。

对比维度 蓝绿发布 (Blue/Green) 灰度发布 (Canary)
环境数量 两套完整环境(蓝/绿),始终只有一套在线 一套生产环境 + 小比例金丝雀实例
流量切换 一次性全量切换(负载均衡/网关路由) 渐进式流量迁移(5% → 20% → 50% → 100%)
回滚速度 秒级:切回旧环境路由即可 分钟级:需逐步降低金丝雀权重或直接下线
资源成本 高(双倍资源持续运行) 低(仅额外运行少量金丝雀实例)
监控复杂度 低(对比两套环境整体指标) 高(需按实例标签拆分流量与错误率)
适用场景 数据库无破坏性变更、对回滚速度要求极高 功能验证、A/B测试、逐步放量
SRE 选型建议: 蓝绿发布适合 基础设施层 变更(如 Kubernetes 集群升级、网络插件替换);灰度发布更适合 应用层 功能迭代,尤其是涉及用户感知的 UI/API 变更。

1.2 蓝绿发布典型架构与流量切换流程

下图展示了蓝绿发布的核心组件与一次完整的版本切换过程。注意 Prometheus 需要同时采集蓝、绿两套环境的指标,并在切换前后执行预定义的 健康检查规则。

蓝绿发布架构与流量切换流程 蓝绿发布架构与流量切换流程 用户流量入口 负载均衡器 / 网关 蓝环境 (Blue) 版本: v1.0 (当前在线) 实例数: 10 绿环境 (Green) 版本: v2.0 (待切换) 实例数: 10 Prometheus 监控 切换前:Prometheus 验证绿环境健康指标 → 切换时:修改网关路由 → 切换后:观察蓝环境空负载并下线

1.3 Prometheus 在发布中的核心价值

在蓝绿发布场景中,Prometheus 不仅仅是“看指标”的工具,而是自动化决策的度量基础。其核心价值体现在三个层面:

  • 实时健康度评估: 通过 up、http_requests_total、grpc_server_handled_total 等指标,在切换前自动判定新环境是否就绪。
  • 多维标签对比: 利用 environment="blue" 与 environment="green" 标签,在 PromQL 中直接计算错误率差异:
    # 蓝环境错误率
    sum(rate(http_requests_total{environment="blue", status=~"5.."}[1m])) 
    / 
    sum(rate(http_requests_total{environment="blue"}[1m]))
    
    # 绿环境错误率
    sum(rate(http_requests_total{environment="green", status=~"5.."}[1m])) 
    / 
    sum(rate(http_requests_total{environment="green"}[1m]))
  • 自动化告警触发回滚: 当绿环境错误率超过阈值(如 > 1%)或 P99 延迟飙升时,Prometheus Alertmanager 自动触发 Webhook,驱动 CI/CD 管道执行回滚。
关键指标清单(蓝绿发布专用):
  • container_cpu_usage_seconds_total — CPU 使用率对比
  • container_memory_working_set_bytes — 内存工作集对比
  • http_request_duration_seconds{quantile="0.99"} — P99 延迟
  • grpc_server_handled_total{grpc_code!="OK"} — gRPC 错误计数
  • probe_success — Blackbox 探针存活检测

1.4 自动化故障排查的总体流程

基于 Prometheus 的蓝绿发布自动化故障排查,遵循 “采集 → 检测 → 定位 → 决策 → 恢复” 五步闭环。下图展示了这一流程的完整链路:

自动化故障排查五步闭环流程 自动化故障排查五步闭环流程 ① 指标采集 Prometheus + Exporters ② 异常检测 PromQL + 告警规则 ③ 根因定位 标签聚合 + 链路追踪 ④ 自动决策 Webhook → 回滚/继续 ⑤ 恢复与复盘 自动回滚 + 事件记录 反馈闭环(指标优化) 自动化故障排查关键时间线 T+0s: 绿环境流量切换 → T+10s: Prometheus 采集到错误率飙升 T+15s: Alertmanager 触发 Webhook → T+20s: CI/CD 执行回滚 → T+30s: 流量切回蓝环境

1.5 流程关键节点说明

  1. 指标采集层: 使用 Prometheus Operator 自动发现蓝绿环境的所有 Pod,通过 serviceMonitor 或 podMonitor 注入 environment 标签。
  2. 异常检测层: 预置 recording rules 计算错误率与延迟滑动窗口,避免直接使用原始指标导致告警抖动。
  3. 根因定位层: 结合 kube_pod_labels 与 container_* 指标,快速定位是哪个微服务、哪个实例出现异常。
  4. 自动决策层: Alertmanager 的 webhook_configs 调用 Jenkins/GitLab CI 的 API,传入 rollback=true 参数。
  5. 恢复与复盘层: 回滚完成后,Prometheus 自动生成 发布事件报告,包含切换前后的指标对比图,供 SRE 团队复盘。
常见陷阱: 蓝绿发布中,如果数据库 schema 不兼容(如 v2.0 新增了字段),回滚后旧版本代码可能因无法解析新数据而崩溃。此时 Prometheus 监控的 database_query_duration_seconds 和 database_error_total 指标会立即告警,但根因定位需要结合 日志标签 与 APM 追踪 才能快速锁定。