Grafana 可视化监控:动态仪表板与图表
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. 连接第一个数据源
- 登录 Grafana,左侧菜单进入 Configuration → Data Sources。
- 点击 Add data source,选择 Prometheus。
- URL 填入
http://localhost:9090(如果 Prometheus 与 Grafana 在同一主机)。 - 点击 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 styles → Field override 中,为某个系列指定不同的 Y 轴,实现不同量级指标的共存。
5.2 仪表盘(Gauge)
显示瞬时值,如当前内存使用百分比。
- 查询返回单个值(可用 PromQL 函数
avg()或直接查询node_memory_MemAvailable_bytes)。 - 在 Value options 中设置阈值颜色(绿/黄/红)。
- 设置 Unit 为
percent或decbytes。
5.3 表格(Table)
展示结构化的瞬时数据,如所有磁盘分区的使用情况。
- 查询可返回多条记录,表格会自动分列。
- 支持列排序、自定义列样式和链接。
5.4 热力图(Heatmap)
观察数据分布和密度,常用于请求延迟分布。
- 需使用 Prometheus 的
Histogram类型指标。 - 面板会以时间轴为 X 轴,Y 轴为桶范围,颜色深浅代表频率。
5.5 状态时间线(State timeline)
展示离散的状态变化,如服务健康检查的历史状态(UP/DOWN)。
6. 动态变量:让仪表板“活”起来
静态仪表板需要为每台主机单独创建面板。动态变量可让你从一个下拉列表中选择主机、接口或盘符,仪表板自动更新。
6.1 添加变量
- 进入仪表板设置(齿轮图标)→ Variables → Add variable。
- 选择变量类型为 Query。
- 数据源选择 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 ABOVE90(表示 CPU 使用率 > 90%)。 - 在 Evaluate every 中填入
1m,评估频率。 - 在 For 中填入
5m,表示持续 5 分钟满足条件才触发,避免瞬时抖动。
7.2 配置通知渠道
- 左侧菜单 Alerting → Contact points → Add contact point。
- 选择类型(Email、Slack、Webhook 等),填写收件地址或 webhook URL。
- 保存后进入 Notification policies,设置默认路由或按标签分流。
- 可以回到告警规则,在 Notifications 中选择发送到的 contact point。
7.3 测试告警
可通过 Prometheus 模拟高负载,或在规则评估期后检查 Alerting → Alert rules 中的状态,观察通知是否发送。
8. 仪表板最佳实践
- 使用行(Row)进行分组:将相关面板放在同一行,可折叠,保持界面整洁。
- 统一时间范围:默认使用仪表板级别的时间选择器,用户可快速缩放或刷新。
- 应用模板变量:尽量避免硬编码,让一个仪表板覆盖多种场景。
- 添加注释(Annotations):标记部署、重启等事件,方便关联异常时间点。
- 版本管理与导出:仪表板可导出为 JSON 文件,通过 Git 进行版本管理,也可用 Grafana Provisioning 自动加载。
- 性能考虑:查询粒度不宜过细,数据源速率上限要注意;适当降低面板刷新间隔。
9. 扩展阅读与常见问题
9.1 面板链接(Panel links)
可以为面板添加链接,点击后跳转到另一个仪表板或外部系统,并传递当前变量值(如 ?var-host=$host),实现指标下钻分析。
9.2 与其他系统的集成
- Loki:日志聚合,可实现日志与指标联查。
- Tempo:分布式追踪,用于微服务性能分析。
- Grafana OnCall:增强告警排班与升级管理。
9.3 常见问题
- 图表无数据:检查时间范围、查询语句是否正确;数据源是否连接正常;Prometheus 中
up指标可判断 target 健康状态。 - 变量列表为空:确认查询语句能在数据源 Explore 页面正常返回结果,注意转义特殊字符。
- 告警未触发:检查评估频率和持续时间;验证通知渠道配置;查看
Alerting → Silences是否误配置了静默。
通过本教程,你已经能够从零搭建起一个带有动态变量、多图表类型和告警通知的 Grafana 监控仪表板。接下来只需接入真实业务指标,不断迭代你的看板,就能实现全面、直观的系统观测。