Chapter 08

Grafana 可视化

Prometheus 自带的界面适合调试,长期看板要交给 Grafana。学会接数据源、建面板、用模板变量、导入社区 Dashboard。

8.1 Grafana 与 Prometheus 的关系

Prometheus 内置的 Expression Browser 只够临时查询与调试。Grafana 是独立的开源可视化平台,把 Prometheus 作为一等数据源接入,提供丰富的图表、变量、告警和分享能力。二者是云原生监控的黄金搭档。

Data Source 数据源
Grafana 连接的后端,如 Prometheus、Loki、MySQL。一个 Grafana 可接多个数据源混合展示。
Dashboard 仪表盘
一组 Panel 的集合,对应一个 JSON 文档,可导出/导入/版本控制。
Panel 面板
单个可视化单元:时间序列图、Stat、Gauge、Table、Heatmap 等,背后是一条或多条 PromQL。
Template Variable 模板变量
Dashboard 顶部的下拉框(如选 instance、namespace),让一个看板复用于所有实例。
Provisioning 声明式配置
用 YAML/JSON 文件预置数据源与 Dashboard,让 Grafana 配置可版本化、可复现。
Legend / Unit 图例与单位
控制曲线命名({{instance}})与坐标轴单位(bytes、percent、seconds)。

8.2 启动并添加数据源

$ docker run -d --name grafana -p 3000:3000 grafana/grafana:11.1.0
# 默认账号 admin / admin,首次登录改密码

登录后 Connections → Data sources → Add → Prometheus,填 URL http://prometheus:9090,点 Save & test。生产建议用 Provisioning 声明式配置:

# /etc/grafana/provisioning/datasources/prom.yml
apiVersion: 1
datasources:
  - name: Prometheus
    type: prometheus
    access: proxy
    url: http://prometheus:9090
    isDefault: true

8.3 创建第一个面板

新建 Dashboard → Add visualization → 选 Prometheus 数据源,在查询编辑器写 PromQL:

# QPS by 接口,Legend 设为 {{handler}}
sum by(handler) (rate(http_requests_total[5m]))

右侧面板设置里:Visualization 选 Time series,Unit 选 requests/sec (reqps),Legend 用 {{handler}} 让曲线自动命名。

8.4 模板变量:一套看板管所有实例

Dashboard Settings → Variables → New variable,类型选 Query:

# 变量 $instance:从 up 指标提取所有 instance 值
label_values(up{job="node"}, instance)

然后在面板 PromQL 里引用变量,实现下拉切换:

rate(node_cpu_seconds_total{instance="$instance", mode!="idle"}[5m])
多选与 All 选项

变量可开启 Multi-value 与 Include All。多选时 $instance 会渲染成 regex,PromQL 里要用 =~"$instance" 匹配。$__rate_interval 是 Grafana 内建变量,自动算合适的 rate 窗口,推荐替代硬编码 [5m]

8.5 常用面板类型

面板适用场景
Time series随时间变化的曲线,最常用(QPS、延迟、CPU)
Stat单个大数字 + 迷你趋势(当前在线数、错误率)
Gauge带阈值色带的仪表(资源使用率)
Bar gauge横向条形对比(各实例内存 Top N)
Table表格明细,配 instant query
HeatmapHistogram 分布随时间的热力图(延迟分布)
State timeline状态随时间(up/down 时间轴)

8.6 导入社区 Dashboard

Grafana 官网 grafana.com/dashboards 有海量现成看板,只需 Dashboard ID 即可导入。经典 ID:

# Dashboards → Import → 输入 ID 1860 → 选 Prometheus 数据源 → Import
社区看板需适配

导入的看板可能依赖特定 job 名或 label(如 job="node"),若你的命名不同需改查询。建议导入后 Save as 复制一份再改,别直接改原版以便升级。

8.7 面板即代码(可选)

成熟团队会把 Dashboard JSON 纳入 Git,用 Provisioning 自动加载,或用 Grafonnet(Jsonnet 库)/ Terraform grafana provider 声明式管理,实现"监控即代码"。

8.8 小结与下一步