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])
变量可开启 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 |
| Heatmap | Histogram 分布随时间的热力图(延迟分布) |
| State timeline | 状态随时间(up/down 时间轴) |
8.6 导入社区 Dashboard
Grafana 官网 grafana.com/dashboards 有海量现成看板,只需 Dashboard ID 即可导入。经典 ID:
- 1860 — Node Exporter Full(主机全指标)
- 3662 — Prometheus 2.0 Overview(Prometheus 自身)
- 7362 — MySQL Overview
- 763 — Redis Dashboard
- 315 / 13332 — Kubernetes 集群监控
# 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 小结与下一步
- Grafana 接 Prometheus 数据源,Dashboard 由 Panel 组成,每个 Panel 背后是 PromQL。
- 模板变量 +
$__rate_interval让一套看板复用于所有实例。 - 善用社区 Dashboard(1860/3662 等)快速起步,导入后按需适配。
- 下一章解决 存储与高可用——本地 TSDB 之外如何长期留存与横向扩展。