在 Grafana 中可视化指标:数据源、面板与社区仪表板
将 Grafana 连接到 Prometheus,从头构建一个面板,然后导入现成的仪表板,而不是手工构建一切。
Prometheus 存储并查询指标;它本意并不是你日常查看指标的地方。Grafana 是最常与它搭配的仪表板层。本指南将两者连接起来,手工构建一个面板以理解底层发生了什么,然后导入一个社区仪表板,而不是从头构建一切,这也是大多数真实的 Grafana 使用方式。
将 Prometheus 添加为数据源
# docker-compose.yml (add to the stack from the previous guide)
grafana:
image: grafana/grafana:latest
container_name: grafana
ports:
- "3000:3000"
volumes:
- grafana-data:/var/lib/grafana
执行 docker compose up -d 之后,打开 http://localhost:3000,使用默认的 admin / admin 登录(系统会提示你更改它)。在 Connections → Data sources → Add new data source 下添加数据源,选择 Prometheus,并将它的 URL 指向 http://prometheus:9090,即上一篇指南中的 Compose 服务名,因为 Grafana 和 Prometheus 共享同一个 Docker 网络。保存并测试;连接成功就确认了 Grafana 能够访问 Prometheus,然后你再在其上构建任何东西。
手工构建一个面板
创建一个新的仪表板,添加一个可视化,并选择 Prometheus 数据源。不直接输入 PromQL,而是让 Grafana 的查询构建器逐字段地构造查询,这是了解查询究竟在做什么的合理方式:
- Metric(指标):选择
node_cpu_seconds_total。 - Label filters(标签过滤):添加
mode != "idle",因为空闲模式下的 CPU 时间不是你关心要可视化的部分。如果你只有一个 node_exporter 实例,job和instance标签不会区分任何东西,可以不加;当你监控的主机多于一台时它们才有意义。 - Grafana 会提示像这样的计数器需要应用一个速率函数。将它切换为在
1m之类的窗口上的rate()(或irate(),不过如 PromQL 指南所述,rate()是更稳定的默认选择)。 - 在 Options 下,将图例从 Auto 改为自定义格式
{{mode}},这样得到的线条会被标注为system、user、iowait等,而不是完整的、重复的标签集。
用一个名称保存该面板,并将它添加到仪表板中。在构建器之下,有一个 Code 视图显示 Grafana 所构造的实际 PromQL,值得看一次,这样你最终可以跳过构建器,直接编写查询。
第二个面板:来自表达式的磁盘使用量
并非每个面板都来自单个指标;有些来自对几个指标的组合:
node_filesystem_size_bytes{mountpoint="/"} - node_filesystem_free_bytes{mountpoint="/"}
这通过从总大小中减去空闲字节数来计算根文件系统上实际使用的字节数,并过滤到根挂载点,这样临时和虚拟文件系统不会让结果杂乱。请把它直接粘贴到面板的 Code 视图中,而不是试图逐字段地构建;任何涉及两个指标之间算术运算的东西,通常写出来比点击构建器更快。
导入社区仪表板,而不是从头构建
一旦你有几十个值得跟踪的指标,手工构建每个面板就无法扩展,而对于常见的 exporter,几乎肯定已经有别人构建并发布了一个全面的仪表板。Grafana 的仪表板库可以按 exporter 名称搜索,每个仪表板都有一个数字 ID:
- 在库中搜索你使用的 exporter(
node exporter、cadvisor),并选择一个评价好、最近更新过的。 - 复制它的仪表板 ID。
- 在 Grafana 中,前往 Dashboards → New → Import,粘贴该 ID 并加载。
- 在提示时选择你的 Prometheus 数据源,然后导入。
这为你提供了一套完整的、预先构建好的面板,CPU、内存、交换区、磁盘 I/O、网络错误、运行时间等等,而无需手工构建每一个。它也是学习 PromQL 的一种真正有用的方式:打开一个导入的面板的编辑器,阅读它为某个你很熟悉的指标所使用的查询,这往往比孤立地阅读文档更清楚。
从这里开始定制
导入的仪表板是一个起点,而不是最终答案。每个面板都仍然是完全可编辑的:调整标签过滤、更改可视化类型、调整阈值和颜色,或删除你不需要的面板。把导入视为你可以向外扩建的脚手架,而不是要么原封不动地使用、要么完全回避的东西。