Skip to content

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 查询引用 $servicerate(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 联动。