如何使用 Grafana 监控系统性能指标 - Part 2

在系列文章的 Part 1 中,对于如何部署和配置 Grafana & Prometheus 进行性能指标数据的收集和可视化进行了“简单”介绍,不过实际写出来才发现这个东西不是一般的复杂。本文则着重介绍系统的第二大重点即如何将 Part 1 中收集到的数据,通过 Grafana 进行可视化处理。

Grafana 简介

Grafana 是一个数据可视化系统,也就是将存储在不同数据源的数据转化成更易于人类阅读和理解的图表的系统。如果你留意过 Part 1 中关于添加数据源的部分那你就应该已经知道 Grafana 不止可以处理 Prometheus 的数据,它也可以连接诸如 ElasticSearch,或者更加传统的数据库比如 MySQL、PostgreSQL 等,并将存储在其中的数据进行可视化处理。

这里要说一个定律,在软件领域不存在同时拥有 “操作简单”-“拓展性强”-“功能强大” 的系统,Grafana 属于拓展性和功能性强大,但是使用方面相当复杂的系统。Grafana 通过 3 个阶段将你的数据转换为可视化的数据大屏:

  1. 使用数据查询语法将原始数据转换为面板(Panels)可以使用的数据格式。

  2. 使用面板将上一步转换完成的数据渲染成单个指标的可视化图形。

  3. 通过多个面板的组合形成一个完整的仪表板(Dashboard),导出此仪表板即可得到最终的数据大屏。

其中第 1、2 步会涉及相当多的内容,可以预见的是,本文不可能非常细致的讲解完这些内容,所以下面的一些链接会非常重要:

  • 仪表板市场:你可以在这里找到社区分享的仪表板,通过导入他们的仪表板来学习如何配置你自己的仪表板。

  • 仪表板的配置与管理:你可以在此文档中学习如何配置和管理仪表板,比如如何使用模板变量、如何导出公共可访问仪表板。

  • 面板的配置与数据转换语法:此文档介绍所有官方预制的可用面板如何使用及其接受的数据格式,以及如何转换原始数据。

本文会从一个官方模板开始对 Grafana 进行简单入门介绍。

看看别人的城堡

Grafana 的仪表板搭建的过程其实跟搭建一个积木城堡的过程有点类似,作为入门学习的第一个仪表板,个人推荐使用 Node Exporter Full,这个仪表板相当于 node_exporter 的使用说明书。打开链接后你会看到如下界面:

2025-02-18_13-59-59.png

点击右侧的 Copy ID to clipboard 或者 Download JSON 都可以获取到导入仪表板所需的 ID 和 JSON 代码,如何导入仪表板在 Part 1 中已经讲解此处不再赘述。导入完成后,打开仪表板,你需要在顶部按照你的信息选择对应的模板变量,之后你就能看到仪表板正常工作了:

2025-02-18_14-04-40.png

此仪表板下方均为标签页,点击可以展开来查看更多信息。此仪表板的图表非常全面,你甚至可以使用基于此仪表板进行拆分组合重新来创建你自己的仪表板。

积木游戏-底座

要搭建一个结实的城堡,首先你得有一块地基。点击侧边 仪表板-右上角“新建”-新建仪表板,创建一个你自己的仪表板吧:

2025-02-18_14-08-02.png

点击“添加可视化”:

2025-02-18_14-08-44.png

选择你唯一的数据源,然后你会进入面板编辑页:

2025-02-18_14-10-03.png

但这里我们先不管这个页面,点击 Back to dashboard 返回仪表板编辑页:

2025-02-18_14-11-07.png

这就是你的真正的第一个仪表板了,点击右上角 Save dashboard 来保存你的仪表板:

2025-02-18_14-14-06.png

好了,你还记得我们刚才经历了几个页面吗?首先你创建仪表板后,第一个来到的页面是 面板配置页,这个页面相当于对单个积木进行调整的页面,点击 Back to dashboard 后,来到的是 仪表板配置页,这里相当于是对整体积木如何排列组合进行调整的页面。注意,保存之后仪表板会进入查看状态,你需要点击右上角的 Edit 来进入编辑状态才能修改仪表板设置。鼠标悬浮到面板上后,面板的右上角会出现三个点,点击它可以打开面板操作菜单:

2025-02-18_14-16-30.png

点击 编辑 可以打开对应面板的 面板配置页,面板配置页和仪表板配置页是两大基础页面,必须记住。

积木游戏-第一块积木

在仪表板配置页,很明显 Grafana 已经自动给你创建了“第一块积木”:一个空面板。那我们需要让它显示东西,这时候就需要用到之前导入的仪表板了。首先,打开这个空面板的面板配置页:

2025-02-18_14-23-16.png

  1. 可视化类型选择:在这里你可以选择要怎样可视化你的数据,是折线图,还是饼图,或者是单纯的文字、颜色等等。

  2. 可视化配置:在这里配置具体的可视化策略,比如如果是纯文字的话大于指定值文字应该是什么颜色等。

  3. 数据转换语句:在这里配置数据转换语句,打个比方就是数据库查询语法,只不过是 Grafana 专用的。用于从数据源将原始数据转换成当前可视化类型所需要的数据。

  4. 预览区:预览当前面板。

所以现在它还什么都没有,那么我们首先配置数据转换语句,从先前的 Node Exporter Full 面板里抽一条获取内存数据的语句吧:

(1 - (node_memory_MemAvailable_bytes{instance="$node", job="$job"} / node_memory_MemTotal_bytes{instance="$node", job="$job"})) * 100

把它按照下图顺序输入进数据转换语句区:

2025-02-18_14-51-38.png

但是,预览区还是空的!点击 Run queries 之后面板什么反应都没有!

不要慌,这是正常的,再看看之前的语句,你会发现里面有一些很奇怪的变量:$node$job,这些是什么?

还记得 Prometheus 的配置么?Prometheus 可以配置多个收集器,所以此处语句如果不加以判断会同时查询出所有收集器的对应指标,$开头的变量是仪表板的模板变量,如果你有印象的话在导入 Node Exporter Full 仪表板时,那张图中我在顶部用红框圈出了一些选项,那些就是模板变量。但是很显然这里我们没有模板变量,而且我们只需要来自特定设备的内存数据,所以此处对这个语句进行修改:

(1 - (node_memory_MemAvailable_bytes{job="aps-info"} / node_memory_MemTotal_bytes{job="aps-info"})) * 100

注意,aps-info 是先前我在 Prometheus 中配置的一个收集器的 job 名称,你需要替换成你自己的 job 名称才能拿到数据。输入新的语句,再次点击 Run queries,你就可以看到历史内存占用的百分比折线图了:

2025-02-18_14-43-44.png

但是为什么是百分比折线图?百分比是因为我们的数据查询语句,仔细看一下就会发现计算出的数据就是内存占用百分比。但是折线图就需要提到上文的区域 1 了,在这里你可以选择数据可视化的形式,点击区域 1 打开可视化选择器:

2025-02-18_14-43-55.png

这次我们选择 Gauge:

2025-02-18_14-45-03.png

你会发现预览区就变成了一个表,但是它好像很奇怪的样子。因为用积木游戏的比喻来说,我们现在只是选了一块形状合适的积木而已,我们还需要对其进行配置来让这个积木的花纹好看协调。

积木游戏-贴个花吧

那么想让这块积木协调好看,那就需要调整区域 2 的可视化配置。首先我们查询的是内存百分比,那么数字应该展现成百分比的形式对吧?

在区域 2 向下滚动,找到 Standard options,Unit 选择 Misc-Percent(0-100),然后预览区就会对应发生变化:

2025-02-18_14-57-52.png

数字多了个百分比符号,同时区域颜色也发生了变化,从全是绿色变成了一段绿色一段红色。这是因为我们选择的单位告诉了 Grafana 我们的数据转换语句查询出的结果是一个百分比值,所以它自动加上了百分比符号,但是那块颜色是怎么回事呢?这就要继续向下,找到 Thresholds 配置区,默认这里只有一个 80,但是我们可以删掉默认的 80,然后配置成 60-黄色、80-橙色、90-红色,你就可以看到预览区对应发生了变化:

2025-02-18_15-02-16.png

这里的配置的意思是:当数据值大于等于 0 且小于 60 时,设置标识颜色为绿色,大于等于 60 且小于 80 时,设置标识颜色为黄色,以此类推。最下方有一个选项:Absolute / Percentage,这两个选项是控制上面的区间的判断方式。由于我们的数据转换语句本身产出的数据是 0-100 的数字值,如果对语句进行稍微的修改,去掉末尾的 * 100,那么此时由于产出的数据是 0-1,这个区间的配置就会失效。为了避免这种情况,你可以把该选项改为 Percentage,用百分比的方式去决定颜色划分区域。

注意,当你把 Thresholds 的判断方式改为百分比后,此时数据的最大值由上文 Standard Options 中的 Unit 决定,所以如果此时我们直接改为百分比之后图表是不会发生任何变化的,因为 Unit 中我们的设置是 Percent(0-100),最大值就是 100。如果你修改了语句,去掉了末尾的 * 100,那么此时 Unit 选项需要对应改为 Percent(0.0-1.0)才能让颜色正常显示。

2025-02-18_15-10-42.png

那么,如果我的数据没有合适的单位怎么办?答案是你只能选择通用数据格式,自行设置数据的最小值和最大值:

2025-02-18_15-16-21.png

即使是使用特定单位时,你也依然可以手动设置数据的最小值和最大值,按照需求进行调整即可。

积木游戏-请别人进来参观吧

在面板配置页,点击右上角 Back to dashboard 返回仪表板配置页,然后 Save dashboard 保存仪表板。在仪表板配置页中,右上角的 Share 右侧有个下拉箭头,点击它:

2025-02-18_15-26-47.png

  1. Share internally:内部分享,通过此链接分享的仪表板查看方必须能够登录 Grafana 且账号至少拥有 Viewer 权限才能查看此仪表板。

  2. Share externally:外部分享,通过此链接分享的仪表板不要求用户登录,所有人均可查看。

  3. Share snapshot:快照分享,创建一个快照,并将此仪表板快照分享给外部,所有人均可查看,但是数据是静态的不会更新。

如果你的仪表板使用了模板变量比如我们最开始导入的 Node Exporter Full 仪表板,就只能使用内部分享和快照分享,不能外部分享。如果你的仪表板使用了模板变量或者有敏感信息,那么就使用内部分享,并给每一个需要查看仪表板的用户创建一个仅查看权限的账户即可。如果你需要做数据大屏,那么就需要使用外部分享,这种不要求用户登录,但是不能使用模板变量。快照分享比较特殊,前面两种分享都是动态分享,仪表板会自动刷新并展示最新数据,但是快照分享会在分享的时候为仪表板拍下一张静态快照,此快照数据不会再更新,也会自动去除所有数据转换语句等敏感信息,适合 demo 展示用。

那么如果我需要使用模板变量,又想对外展示数据大屏,该怎么做呢?

有两种方式,一是创建一个大屏用户,然后在展示大屏的这台设备上登陆这个用户然后访问仪表板即可。二是允许系统匿名登陆,再进行内部分享,这样内部分享也不再要求用户登录,就可以给大屏直接展示了。推荐使用方案 1,如果要使用方案 2 的话,相关文档在这里

回到分享这里,点击 Share externally,在打开的页面中,勾选风险告知协议,点击 Accept 即可创建外部分享链接。

2025-02-18_15-41-14.png

之后就会创建分享链接:

2025-02-18_15-41-42.png

上面的两个开关分别是:是否允许用户自行调整查询时间范围、是否显示仪表板注释信息。默认均为关闭,一般无需更改。点击下方的 Copy external link 即可复制仪表板外部访问链接,Revoke access 为删除分享链接。在浏览器中打开你复制的链接就能看到你自己的仪表板了:

2025-02-18_15-45-14.png

虽然是很简单的仪表板,但是至少迈出了步伐。

积木游戏-终章

很疑惑,怎么突然就终章了?因为在这个入门篇里确实没有更多需要介绍的内容了。Node Exporter Full 是你很好的老师,你可以从这个仪表板中学到很多东西,只需要参照这篇教程的步骤慢慢学习即可。当然你也可以说是 Ctrl + C 和 Ctrl + V,但是只要随便探索一下做一个自己喜欢的仪表板是没什么大问题的。

在面板配置中,找不到自己想要的数据转换是最常遇到的问题,这里额外介绍 Grafana 的一个重要功能:探索,它就在侧边栏,点击它进入探索页面:

2025-02-18_16-00-09.png

乍一看这个页面跟面板配置页的数据转换语句配置区很像对吧?实际上他们就是同样的功能,这里相当于数据转换语句的测试台。在这里有一个很重要的功能叫做指标浏览器。点击查询区的第一个 Select metric

2025-02-18_16-02-16.png

然后点击 Metrics explorer 来打开指标浏览器:

2025-02-18_16-03-28.png

在这里,你可以查看或者搜索全系统内的所有可用统计指标,比如我们要查询所有节点的可用空间,那么对应的就是要查询文件系统大小,搜索 filesystem

2025-02-18_16-07-25.png

在结果里可以看到 node_filesystem_size_bytes 的意思是文件系统全部字节数,node_filesystem_free_bytes 是文件系统可用空间字节数。那么我们可以用这两个值来计算文件系统剩余空间:

2025-02-18_16-13-17.png

这个结果很乱,对吧?我们明明只需要对根目录进行计算就可以了,那么我们就得限制下 mountpoint 必须为 / 才行:

2025-02-18_16-17-46.png

你可以像我一样在调整这些东西的时候把模式临时切换成 Builder,这样可视化操作会省事一点。设置好后再次点击“运行查询”,你就可以看到结果只剩下各个收集器的结果了。

那么如果我只要特定收集器的结果呢?根据先前的文章,这里只需要再次限制 job 名称为指定的收集器名即可:

2025-02-18_16-19-57.png

此时你在页面中间即可看到对应的查询语句,或者在右上角将模式切换回 Code 模式也可以拿到你的数据转换语句,然后把它丢进面板配置页进行适当的配置:

2025-02-18_16-23-03.png

一个简简单单的面板就配置好了!

用好探索面板会给你带来非常巨大的帮助,当然最后还是得多学习才行。

结尾

自己进行配置的时候没觉得这么复杂,毕竟都是一次性工作,单次配置之后就不用再管让它自己工作就行,但是实际写成教程文档把它归纳出来才发现这个东西好像不是一般的复杂,学习成本还是有那么一点点的高。不过效果很好,Grafana 的可视化也可以用于其他方面,比如自己的网站用户都在访问什么东西,可以让 Grafana 从数据库中取数据进行可视化,这样就能更好地实现精准推送。总的来说这套系统虽然复杂,但是作为基础的性能监控其实是大材小用的。

就像 Part 1 的最开头说的那样,如果你只是需要一个简单的监控系统,可以看看 Uptime Kuma,比起 Prometheus 可简单太多了...

拓展内容

官方文档索引(全英文)


如何使用 Grafana 监控系统性能指标 - Part 2
https://blog.tihus.com//archives/499b79b0-4759-4a16-a7de-dffcea2cf888
作者
MitsuhaYuki
发布于
2025年02月18日
更新于
2025年02月18日
许可协议