Dashboard 与告警:Panel、变量与统一 Alerting
基于 Grafana 11.x · 核于 2026-08
速查
- Dashboard 结构:Dashboard = 多个 Panel + Variables(下拉变量)+ Annotations(事件标注)+ Time range(时间范围)+ Refresh(刷新间隔)。
- Panel 配置四要素:①数据源 + 查询(PromQL/LogQL/SQL);②可视化类型(time series/stat/bar gauge/table/geomap/node graph/flame graph/logs);③Field/Override(单位/颜色/阈值/字段级覆盖);④Alert(直接在 Panel 挂告警)。
- 常用 Panel 类型:Time series(折线,时序指标)、Stat(大数字 + 阈值色)、Bar gauge(多维条形)、Table(多列表格)、Geomap(地图)、Node graph(拓扑/追踪)、Flame graph(剖析)、Logs(日志流)、Trace view(追踪瀑布)。
- Variables(变量):Dashboard 顶部下拉框——Query 变量(
label_values(service)动态查可选值)、Custom(手动填)、Text box(自由输入)、Interval(时间间隔)、Datasource(数据源切换)。引用$var在查询中自动替换。 - 链式变量:
$region→$cluster(后者查询用前者过滤),实现级联下拉。 - Annotations(注解):在时间轴上标注事件(如「部署 v1.2」),帮助关联指标变化与事件。
- Transform(转换):查询结果在客户端做二次处理(join/过滤/计算/重命名)——一个查询出多种呈现。
- 统一 Alerting:Alert Rule(条件 + for + 数据源)→ Contact Point(接收方:邮件/钉钉/PagerDuty)→ Notification Policy(按 label 路由/分组/去重/抑制)→ Silence(静默)。
- 告警状态机:Normal → Pending(条件成立未过 for)→ Firing(过 for 触发)→ Resolved。
- Folder/Permission:Dashboard 按 Folder 组织,企业版支持 Folder 级 RBAC(谁能看/改)。
一、Dashboard 结构
一个 Dashboard 是一组 Panel 的集合,外加交互元素:
┌─ Dashboard: 订单服务监控 ─────────────────────────┐
│ [时间范围: 最近 1h] [刷新: 30s] [service▼ 订单服务]│ ← Variables
│ ┌─────────┬─────────┬─────────┐ │
│ │ Panel 1 │ Panel 2 │ Panel 3 │ │ ← Panels
│ │ QPS │ P99 │ 错误率 │ │
│ ├─────────┴─────────┴─────────┤ │
│ │ Panel 4: 日志流(Loki) │ │
│ │ ▼ deploy v1.2 ◄── Annotation 标注 │
│ └─────────────────────────────┘ │
└──────────────────────────────────────────────────┘- Dashboard JSON:Grafana 的 Dashboard 本质是 JSON 文件(可导出/导入/版本管理)——这是「Dashboard as Code」的基础。
- Folder 组织:Dashboard 放进 Folder(如「生产环境」「测试环境」),Folder 可设权限(企业版)。
二、Panel 配置详解
每个 Panel 有四层配置:
数据源 + 查询
数据源: Prometheus
查询: sum by (handler) (rate(http_requests_total{service="$service"}[5m]))- 查询用数据源的原生语言(PromQL/LogQL/SQL),Grafana 不抽象。
- 一个 Panel 可叠加多条查询(A/B/C),用于对比。
可视化类型(选对类型)
| 类型 | 适用场景 | 例子 |
|---|---|---|
| Time series | 时序数据趋势 | QPS、延迟、CPU 随时间 |
| Stat | 单个关键数字 | 当前在线用户、错误总数 |
| Bar gauge | 多维度横向对比 | 各服务 CPU 占用 |
| Gauge | 仪表盘(带阈值) | 磁盘使用率 |
| Table | 多列结构化数据 | 各实例状态明细 |
| Geomap | 地理分布 | 各区域请求热力 |
| Node graph | 节点关系/拓扑 | 服务调用链、追踪拓扑 |
| Flame graph | 剖析火焰图 | Pyroscope CPU/内存 |
| Logs | 日志流(时间线) | Loki 日志展示 |
| Trace view | 追踪瀑布图 | Tempo/Jaeger span |
| Pie chart | 占比 | 各状态码分布 |
| Heatmap | 密度分布 | 延迟分布热力图 |
Field 与 Override
- 单位(Unit):bytes/percent/req/s/秒——决定 Y 轴格式化。
- 颜色方案(Color scheme):单色/阈值色/梯度色。
- 阈值(Threshold):值超过 X 变红——结合 Stat/Gauge 直观告警。
- Override:对特定字段(如某列)单独设格式——表格里不同列不同单位。
告警(Panel-level Alert)
Panel 上直接挂 Alert Rule——条件 + for + 关联 Contact Point。
三、Variables:参数化与联动
变量让一个 Dashboard 复用多维度:
Query 变量(最常用)
promql
// 变量 $service 的可选值从 Prometheus 动态查
label_values(http_requests_total, service)
// → [订单服务, 用户服务, 支付服务]- Panel 查询引用
$service:rate(http_requests_total{service="$service"}[5m])。 - 用户在下拉框选「订单服务」,所有引用
$service的 Panel 自动查service="订单服务"。
链式变量(级联)
$region(区域)→ $cluster(集群,查询过滤 $region)
// 选「华东」→ $cluster 只列华东的集群变量类型汇总
| 类型 | 用途 |
|---|---|
| Query | 从数据源动态查可选值(label_values/SHOW TABLES) |
| Interval | 时间间隔(用于 [5m]/[1h] 动态窗口) |
| Datasource | 切换数据源(同一 Dashboard 切 dev/prod) |
| Custom | 手动填可选值 |
| Text box | 自由输入(无下拉) |
| Constant | 常量(跨 Panel 引用) |
四、Annotations:事件标注
Annotations 在时间轴上标注事件,帮助关联「指标变化」与「事件」:
- 部署标注:在时间轴标「deploy v1.2」,若 QPS 在该时刻突降,能快速定位是部署引起的。
- 告警标注:告警触发时在对应 Panel 时间轴标红。
- 查询型标注:从 Loki/Prometheus 查事件作为标注(如「所有 5xx 日志」)。
五、Transform:查询结果二次处理
Transform 在客户端对查询结果做处理,避免改后端查询:
- Join:把两个查询结果按字段合并(如指标 + 元信息)。
- Filter:按条件过滤行。
- Calculate field:新增计算列(如
A/B算比率)。 - Rename/Reorder:重命名/重排列。
典型场景:一个 Prometheus 查询返回多列,用 Transform 拆成两个 Panel;或把指标与实例元信息 join 到一起显示。
六、统一 Alerting
Grafana 11 的 Alerting 是统一告警平台:
Alert Rule
yaml
# 基于数据源(Prometheus/Loki/CloudWatch)
- name: HighErrorRate
datasource: Prometheus
expression: |
sum by (service) (rate(http_requests_total{code=~"5.."}[5m]))
/ sum by (service) (rate(http_requests_total[5m])) > 0.01
for: 5m # 持续时长
labels: { severity: critical, service: api }
annotations:
summary: "{{ $labels.service }} 错误率超 1%"Contact Point(接收方)
- 邮件、Slack、钉钉(webhook)、PagerDuty、webhook 通用。
- 一个 Contact Point 可对接多个渠道。
Notification Policy(路由)
yaml
root:
group_by: [alertname, service] # 分组
group_wait: 30s
group_interval: 5m
repeat_interval: 4h
routes:
- matchers: [severity="critical"]
receiver: pagerduty # P0 走 PagerDuty
- matchers: [severity="warning"]
receiver: dingtalk # P2 走钉钉- 分组(group_by):同组告警合并成一条,避免风暴。
- 抑制(mute timings/inhibit):定义「A 触发则屏蔽 B」。
- 静默(silence):维护窗口临时屏蔽(matcher + 时长)。
与 Alertmanager 的关系
Grafana Alerting 可独立工作(内置 Alertmanager),也可把告警转发到外部 Alertmanager(兼容既有投资)——两者择一或并存。
下一步
掌握了 Dashboard 与告警后,下一步看LGTM 生态——Loki(日志)/Tempo(追踪)/Mimir(指标长期存储)/Pyroscope(剖析)四支柱如何与 Grafana 联动。