Grafana 可视化监控:动态仪表板与图表

FreeGuideOnline 最新 2026-06-13

Grafana 可视化监控:动态仪表板与图表

1. 认识 Grafana:不只是画图工具

Grafana 是一款开源的数据可视化与监控平台,它可以将来自不同数据源的时间序列数据转化为动态、交互式的仪表板。无论你管理的是服务器集群、物联网设备,还是应用性能指标,Grafana 都能帮你快速洞察系统状态。它的核心优势在于:

  • 多数据源支持:Prometheus、InfluxDB、Graphite、Elasticsearch、MySQL 等均可接入。
  • 灵活的可视化:折线图、柱状图、热力图、饼图、仪表盘、表格等几十种面板。
  • 告警引擎:当指标超出阈值时,可向邮件、Slack、Webhook 等渠道发送通知。
  • 动态变量:让仪表板具备模板化能力,一键切换主机、应用或环境。

本教程将带你从零开始,搭建一个可以动态切换主机的实时监控仪表板。


2. 环境搭建与安装

2.1 安装 Grafana(Ubuntu/Debian)

sudo apt-get install -y software-properties-common wget
sudo wget -q -O /usr/share/keyrings/grafana.key https://apt.grafana.com/gpg.key
echo "deb [signed-by=/usr/share/keyrings/grafana.key] https://apt.grafana.com stable main" | sudo tee /etc/apt/sources.list.d/grafana.list
sudo apt-get update
sudo apt-get install -y grafana

启动并设置开机自启:

sudo systemctl daemon-reload
sudo systemctl start grafana-server
sudo systemctl enable grafana-server

默认监听 http://localhost:3000,初始账号密码为 admin/admin,首次登录会要求修改密码。

2.2 安装并配置 Prometheus(数据源示例)

Grafana 本身不存储数据,需要后端数据源。以下以 Prometheus 为例:

wget https://github.com/prometheus/prometheus/releases/download/v2.45.0/prometheus-2.45.0.linux-amd64.tar.gz
tar xvf prometheus-*.tar.gz
cd prometheus-*

编辑 prometheus.yml,添加一个抓取任务来监控本机 Node Exporter(假定已安装并运行在 9100 端口):

scrape_configs:
  - job_name: 'node'
    static_configs:
      - targets: ['localhost:9100']

启动 Prometheus:

./prometheus --config.file=prometheus.yml

3. 连接第一个数据源

  1. 登录 Grafana,左侧菜单进入 Configuration → Data Sources
  2. 点击 Add data source,选择 Prometheus
  3. URL 填入 http://localhost:9090(如果 Prometheus 与 Grafana 在同一主机)。
  4. 点击 Save & test,出现绿色提示即表示连接成功。

这一步完成后,Grafana 就具备了查询指标的能力。


4. 创建你的第一个仪表板

4.1 新建仪表板

左侧菜单点击 + → Dashboard,然后点击 Add new panel,进入面板编辑器。

4.2 编写 PromQL 查询

在下方的 Query 区域,选择数据源为刚刚添加的 Prometheus,输入查询语句:

rate(node_cpu_seconds_total{mode="idle"}[5m])

该语句计算过去 5 分钟 CPU 空闲时间的速率。面板会立即显示折线图。

4.3 调整图表样式

  • 在右侧 Panel options 中设置标题为“CPU 使用率”。
  • Standard options 中,将 Unit 设为 percent (0.0-1.0),让数值以百分比显示。
  • 使用 1 - rate(...) 转换为实际使用率:
100 - (rate(node_cpu_seconds_total{mode="idle"}[5m]) * 100)
  • Legend 中可自定义显示格式,如 {{cpu}}

4.4 保存仪表板

点击右上角 Apply,然后点击保存图标,为仪表板命名,例如“主机监控概览”。


5. 深入图表类型与面板配置

Grafana 提供多种可视化类型,选择合适的图表可大幅提升信息可读性。

5.1 时序折线图(Time series)

适用于展示指标随时间的变化趋势。

  • 多指标对比:可添加多个查询,例如同时显示系统负载、内存使用率。
  • 双 Y 轴:在 Graph stylesField override 中,为某个系列指定不同的 Y 轴,实现不同量级指标的共存。

5.2 仪表盘(Gauge)

显示瞬时值,如当前内存使用百分比。

  • 查询返回单个值(可用 PromQL 函数 avg() 或直接查询 node_memory_MemAvailable_bytes)。
  • Value options 中设置阈值颜色(绿/黄/红)。
  • 设置 Unitpercentdecbytes

5.3 表格(Table)

展示结构化的瞬时数据,如所有磁盘分区的使用情况。

  • 查询可返回多条记录,表格会自动分列。
  • 支持列排序、自定义列样式和链接。

5.4 热力图(Heatmap)

观察数据分布和密度,常用于请求延迟分布。

  • 需使用 Prometheus 的 Histogram 类型指标。
  • 面板会以时间轴为 X 轴,Y 轴为桶范围,颜色深浅代表频率。

5.5 状态时间线(State timeline)

展示离散的状态变化,如服务健康检查的历史状态(UP/DOWN)。


6. 动态变量:让仪表板“活”起来

静态仪表板需要为每台主机单独创建面板。动态变量可让你从一个下拉列表中选择主机、接口或盘符,仪表板自动更新。

6.1 添加变量

  1. 进入仪表板设置(齿轮图标)→ VariablesAdd variable
  2. 选择变量类型为 Query
  3. 数据源选择 Prometheus ,查询语句输入:
label_values(node_cpu_seconds_total, instance)

这会提取所有 instance 标签的值(通常为 host:port)。 4. 在 General 中设置变量名称为 host,Label 为“选择主机”。 5. 设置 Selection options 勾选 Multi-value 和 Include All option。 6. 点击 Update,仪表板顶部会出现主机选择下拉框。

6.2 在查询中使用变量

修改之前的面板查询,用变量替换硬编码的 instance:

100 - (rate(node_cpu_seconds_total{instance=~"$host", mode="idle"}[5m]) * 100)

$host 会传入选中的值,=~ 支持正则匹配多个主机。保存后面板即可随变量切换动态呈现。

6.3 变量串联

你可以定义多个变量,比如 disk 变量依据当前选择的 host 来获取磁盘设备:

label_values(node_disk_io_time_seconds_total{instance=~"$host"}, device)

在仪表板中,先选主机,磁盘列表自动刷新。


7. 告警:从被动查看到主动通知

Grafana 内置告警引擎,可以在 UI 中定义规则,无需依赖外部 Alertmanager(也可与 Prometheus Alertmanager 集成)。

7.1 创建告警规则

编辑任意面板,切换到 Alert 标签页:

  • 点击 Create alert rule from this panel
  • 设置 Condition:例如当查询 A 的最后值 IS ABOVE 90(表示 CPU 使用率 > 90%)。
  • Evaluate every 中填入 1m,评估频率。
  • For 中填入 5m,表示持续 5 分钟满足条件才触发,避免瞬时抖动。

7.2 配置通知渠道

  1. 左侧菜单 Alerting → Contact pointsAdd contact point
  2. 选择类型(Email、Slack、Webhook 等),填写收件地址或 webhook URL。
  3. 保存后进入 Notification policies,设置默认路由或按标签分流。
  4. 可以回到告警规则,在 Notifications 中选择发送到的 contact point。

7.3 测试告警

可通过 Prometheus 模拟高负载,或在规则评估期后检查 Alerting → Alert rules 中的状态,观察通知是否发送。


8. 仪表板最佳实践

  • 使用行(Row)进行分组:将相关面板放在同一行,可折叠,保持界面整洁。
  • 统一时间范围:默认使用仪表板级别的时间选择器,用户可快速缩放或刷新。
  • 应用模板变量:尽量避免硬编码,让一个仪表板覆盖多种场景。
  • 添加注释(Annotations):标记部署、重启等事件,方便关联异常时间点。
  • 版本管理与导出:仪表板可导出为 JSON 文件,通过 Git 进行版本管理,也可用 Grafana Provisioning 自动加载。
  • 性能考虑:查询粒度不宜过细,数据源速率上限要注意;适当降低面板刷新间隔。

9. 扩展阅读与常见问题

可以为面板添加链接,点击后跳转到另一个仪表板或外部系统,并传递当前变量值(如 ?var-host=$host),实现指标下钻分析。

9.2 与其他系统的集成

  • Loki:日志聚合,可实现日志与指标联查。
  • Tempo:分布式追踪,用于微服务性能分析。
  • Grafana OnCall:增强告警排班与升级管理。

9.3 常见问题

  • 图表无数据:检查时间范围、查询语句是否正确;数据源是否连接正常;Prometheus 中 up 指标可判断 target 健康状态。
  • 变量列表为空:确认查询语句能在数据源 Explore 页面正常返回结果,注意转义特殊字符。
  • 告警未触发:检查评估频率和持续时间;验证通知渠道配置;查看 Alerting → Silences 是否误配置了静默。

通过本教程,你已经能够从零搭建起一个带有动态变量、多图表类型和告警通知的 Grafana 监控仪表板。接下来只需接入真实业务指标,不断迭代你的看板,就能实现全面、直观的系统观测。