📈 第06章 · Grafana 可视化
数据源/面板/仪表盘
Grafana 可视化¶
这一章讲 Prometheus 的最佳搭档 Grafana:把时序指标变成一张张直观的面板/仪表盘。Prometheus 负责"存与查",Grafana 负责"画与看"。本机的 Prometheus 只有 node-exporter 采集,配上 Grafana 后就能把 CPU/内存/磁盘等画成漂亮的大屏。
Grafana 与 Prometheus 分工¶
| Prometheus | Grafana | |
|---|---|---|
| 角色 | 时序数据库 + 查询引擎 | 可视化 + 仪表盘 + 告警 |
| 存 | 采集并存储指标 | 不存数据,只查 |
| 查 | PromQL | 通过数据源调用 PromQL |
| 呈现 | 弱 | 强(图表/面板/Dashboard) |
简单理解:Grafana 是"前端大屏",接上 Prometheus 数据源后,用 PromQL 绑定到图表上。
安装与启动¶
# Docker 一键跑 Grafana(若有 Docker)
docker run -d -p 3001:3000 --name grafana grafana/grafana
# 或 apt 安装(需加官方仓库/源)
sudo apt install -y grafana
sudo systemctl enable --now grafana-server
默认登录 admin/admin,端口 3000(注意与你的业务端口区分)。
添加 Prometheus 数据源¶
- 登录 Grafana → 左上角 Connections → Data sources → Add data source → Prometheus。
- URL 填
http://127.0.0.1:9090(本机 Prometheus)。 - 点 Save & Test,看到绿色 "Successfully queried the Prometheus API" 即通。
常见面板(用真正的 PromQL)¶
很多指标来自 node-exporter(主机系统指标)。例如:
| 指标 | PromQL | 用途 |
|---|---|---|
| CPU 使用率 | 100 - (avg(rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100) |
主机 CPU 占用 |
| 内存使用率 | 100 - (node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes) * 100 |
内存占用 |
| 磁盘使用率 | 100 - (node_filesystem_avail_bytes{fstype!~"tmpfs"} / node_filesystem_size_bytes{fstype!~"tmpfs"}) * 100 |
挂载点占用 |
| 网络吞吐 | sum(rate(node_network_receive_bytes_total[5m])) |
入向速率 |
| 负载 | node_load1 |
1 分钟负载 |
提示 | 用
rate(x[5m])而非原始计数,因为计数器是累加的;rate计算 5 分钟内的平均每秒增量。务必理解node_*_bytes_total是"累计"值,直接画会一直往上拉一条斜线。
建一张面板(Panel)¶
- Dashboards → New → New dashboard → Add visualization。
- 选数据源 Prometheus,输入上面的 PromQL,点 Run queries 出图。
- 在 Panel options → Unit 选百分比(
percent (0-100))或字节(bytes)等格式化。 - 顶部 Save 保存到某个 Dashboard。
更高效的做法:直接 Import 官方成熟仪表盘:
- Dashboards → Import → 输入
1860(node-exporter 常用 ID)或搜 "Node Exporter Full"。 - 填好数据源即可一键得到完整的节点监控大屏。
用变量做切换(进阶)¶
想在顶部按"机房/主机"切换,用 dashboard 变量:
# 在 Dashboard settings 里加变量 query
label_values(node_uname_info, instance)
然后在面板 PromQL 里引用 $instance,例如:
100 - (avg(rate(node_cpu_seconds_total{mode="idle",instance="$instance"}[5m])) * 100)
报警(Alerting)¶
Grafana 也能发告警(或交由 Prometheus rules + Alertmanager):
- 面板 Edit → Alert tab → 设定阈值表达式(如 CPU > 90 持续 10 分钟)。
- 配置 Notification channels(邮件/Slack/钉钉/飞书)。
- 新版 Grafana 用 Grafana Alerting → Alert rules 管理统一告警。
补充 | 比较稳妥的告警方案仍是 Prometheus 的
rules + Alertmanager,Grafana 主要做可视化。详见《监控与日志 · 告警规则与 Alertmanager》。
安全提示¶
- 改默认密码;
admin/admin千万别留在公网暴露。 - 若 Grafana 只给内网/自己看,建议只监听
127.0.0.1或加反代鉴权。
相关命令¶
- 反代访问:
nginx反代 3001 端口给 Grafana(用 https 域名)。 - 查数据源是否连通:
curl -s http://127.0.0.1:3001/api/health。 - 导出/导入 Dashboard:JSON 文件,方便复用。