📈 第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 数据源

  1. 登录 Grafana → 左上角 Connections → Data sources → Add data source → Prometheus。
  2. URL 填 http://127.0.0.1:9090(本机 Prometheus)。
  3. 点 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)

  1. Dashboards → New → New dashboard → Add visualization。
  2. 选数据源 Prometheus,输入上面的 PromQL,点 Run queries 出图。
  3. 在 Panel options → Unit 选百分比(percent (0-100))或字节(bytes)等格式化。
  4. 顶部 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 文件,方便复用。