3. Grafana 基础回顾:数据源配置、面板与仪表盘创建、Alerting 模块简介
在灰度发布准入门禁体系中,Grafana 承担着“可视化决策中枢”的角色——它从 Prometheus、Elasticsearch 等数据源拉取实时指标,通过面板呈现金丝雀健康状态,并借助 Alerting 模块触发准入/回滚判定。本节将快速梳理 Grafana 的核心操作,为后续门禁规则配置打下基础。
3.1 数据源配置:连接可观测性后端
Grafana 支持超过 30 种数据源,在灰度发布场景中最常用的是 Prometheus(指标)和 Loki(日志)。配置入口位于左侧菜单 Configuration → Data Sources。
| 配置项 | 说明 | 灰度发布典型值 |
|---|---|---|
| Name | 数据源标识,在面板查询时引用 | Prometheus-Prod |
| URL | 数据源 HTTP 端点 | http://prometheus.monitoring:9090 |
| Access | 代理模式(Server)或浏览器直连(Browser) | Server(推荐,避免 CORS) |
| Scrape Interval | Grafana 主动拉取间隔 | 15s(与 Prometheus 采集对齐) |
| Max Series | 单次查询返回的最大时间序列数 | 10000(防止浏览器崩溃) |
最佳实践:在灰度发布环境中,建议为每个环境(staging、canary、production)创建独立的数据源实例,并在名称中加入环境后缀,例如
Prometheus-Canary。这可以避免面板查询时误跨环境拉取数据。
3.2 面板与仪表盘创建:构建金丝雀健康看板
面板(Panel)是 Grafana 的最小可视化单元,多个面板组合成仪表盘(Dashboard)。灰度发布看板通常包含:错误率面板、P99 延迟面板、CPU/内存面板、金丝雀 vs 基线对比面板。
3.2.1 创建面板的步骤
- 点击左侧 + → Dashboard → Add panel。
- 在 Query 编辑器中选择数据源(如 Prometheus),输入 PromQL 查询。
- 选择可视化类型:Time series(趋势)、Stat(当前值)、Table(明细)。
- 配置面板标题、单位、阈值颜色(绿色/黄色/红色)。
- 点击 Apply 保存面板到仪表盘。
灰度发布关键查询示例:
# 金丝雀错误率(5m 平均)
sum(rate(http_requests_total{version="canary", status=~"5.."}[5m]))
/
sum(rate(http_requests_total{version="canary"}[5m]))
# 基线 vs 金丝雀 P99 延迟对比
histogram_quantile(0.99,
sum(rate(http_request_duration_seconds_bucket{version="baseline"}[5m])) by (le))
-
histogram_quantile(0.99,
sum(rate(http_request_duration_seconds_bucket{version="canary"}[5m])) by (le))
3.2.2 仪表盘组织原则
| 区域 | 推荐面板 | 刷新间隔 |
|---|---|---|
| 顶部行 | 金丝雀状态(Stat)、错误率(Stat) | 10s |
| 中间行 | 延迟对比(Time series)、吞吐量(Time series) | 15s |
| 底部行 | 资源使用(CPU/Mem)、日志摘要(Loki) | 30s |
注意:不要在一个仪表盘中放置超过 20 个面板,否则浏览器渲染会变慢,影响门禁判定的实时性。建议按微服务拆分仪表盘,每个服务一个独立看板。
3.3 Alerting 模块简介:从可视化到自动化决策
Grafana Alerting(v8.0+ 统一架构)允许用户基于面板查询结果定义告警规则,并通过 Contact Points 发送通知。在灰度发布中,Alerting 被改造为“门禁引擎”——不再发送邮件,而是调用 Webhook 触发 CI/CD 流水线的准入/回滚决策。
3.3.1 Alerting 核心组件
| 组件 | 作用 | 灰度发布中的角色 |
|---|---|---|
| Alert Rule | 定义触发条件和评估频率 | 门禁规则(如:错误率 > 1% 持续 2m) |
| Contact Point | 通知渠道(Email、Slack、Webhook) | Webhook → Jenkins/ArgoCD API |
| Notification Policy | 路由规则:哪个告警发往哪个 Contact Point | 金丝雀告警 → 门禁 Webhook |
| Silence / Mute Timing | 临时静音告警 | 灰度发布期间屏蔽误报 |
3.3.2 创建一条门禁告警规则
- 进入 Alerting → Alert rules → New alert rule。
- 选择 Grafana managed alert(基于面板查询)。
- 编写 PromQL 表达式,例如:
sum(rate(http_requests_total{version="canary", status=~"5.."}[2m])) / sum(rate(http_requests_total{version="canary"}[2m])) > 0.01。 - 设置评估频率
1m,条件持续2m(防止抖动)。 - 配置 Contact Point 为 Webhook,URL 指向 CI/CD 系统的门禁 API(如
http://jenkins/gray-release/canary-judge)。 - 保存并启用规则。
关键参数:
- Pending period:告警触发后等待确认的时间,建议设为 30s~60s,避免瞬时尖峰导致误回滚。
- For duration:条件必须持续满足的时间,灰度发布建议设为 2m~5m,确保问题稳定存在。
- Annotations:携带版本号、环境、流水线 ID 等元数据,方便门禁系统解析。
3.4 本章小结
- 数据源是 Grafana 的根基,灰度发布场景下推荐使用 Prometheus + Loki 组合,并区分环境实例。
- 面板与仪表盘是可视化载体,金丝雀健康看板应聚焦错误率、延迟、资源使用三大黄金指标。
- Alerting 模块是门禁的核心引擎,通过 Webhook 将告警转化为 CI/CD 可消费的判定信号。
- 下一章将深入讲解如何编写 PromQL 门禁表达式,并配置 Alert Rule 的 Pending/For 参数以消除抖动。