根据前文的方式方法基本上可以把我们的监控图表绘制出来,但是有的场景下面可能需要更多的定制功能。比如我们想要在 CPU 使用率的面板中同时展示系统、用户以及总的使用率,还需要做一些其他定制让我们的图表看起来更加友好。
多个查询
编辑 CPU 使用率这个面板,在面板编辑器下方的 Query 区域点击 + Query 按钮新增一个查询:
在该查询中输入查询语句 sum(rate(node_cpu_seconds_total{instance=~"$host",mode="system"}[1m])) by (instance) / sum(rate(node_cpu_seconds_total{instance=~"$host"}[1m])) by (instance) * 100 来获取系统 CPU 的使用率:
用同样的方式再新增一个查询用户 CPU 使用率的语句:
如果我们选择查询所有节点的 CPU 使用率,那么最终的效果如下所示:
转换
我们可以看大佬 Legend 部分的展示始终会带上 :9100 这个端口号,但其实这对于我们展示来说意义不大,所以最好是去掉这个端口信息,可以点击编辑器下方 Query 旁边的 Transform 选项卡进入转换页面:
Transform 转换功能允许我们在查询结果可视化之前加入、计算、重新排序、隐藏和重命名查询结果,不过目前只支持时间序列数据。对于拥有大量仪表板或大量查询的用户而言,能够在另一个面板中重用来自一个面板的查询结果可能会带来巨大的性能提升。如果有多个转换,Grafana 会按照它们列出的顺序来应用它们,每个转换都会创建一个新的结果集,该结果集会传递到管道中的下一个转换进行处理。
Grafana 中支持非常多的转换方式,我们这里使用 Rename by regex 这个通过正则重命名的转换器即可,这里我们只需要添加一个 (.*):9100 的正则表达式即可,将 host 信息保留下来,如下图所示:
关于转换的更多使用方法可以参考官方文档 https://grafana.com/docs/grafana/latest/panels/transformations/types-options/ 了解更多信息。
Legend 配置
上面转换完成后,可以看到 Legend 部分展示的图例较多,我们可以将 Legend 的模式修改为 Table:
修改为 Table 模式后可以看到图形中的 Legend 用表格的形式展示出来了,此外我们还可以通过 Legend values 来选择一些其他的信息进行展示,比如最大值、最小值、平均值等等:
其他选项
由于我们这里计算的都是百分比,所以可以将单位设置为 %,位于右侧的 Standard options 下方的 Unit 中选择 Misc -> Percent(0-100) 即可:
此外还可以配置图例的最小值、最大值、保留小数的位数、图形颜色配置等等:
时间间隔
前面我们在查询监控数据的时候都是将区间向量的范围固定成了 1m 或者 5m,这样固定后显然不是非常灵活,所以我们可以再添加一个时间间隔的参数来灵活选择。
这里我们新增了一个名为 interval 的参数,不过需要注意该参数的类型为 Interval,然后我们配置该参数可选的值包括 1m,5m,10m,30m,添加后在 Dashboard 页面上就会多一个时间间隔的下拉框。然后记得将查询语句中的相关时间间隔替换成 $interval 参数:
覆盖
用同样的方式可以去对内存监控图表进行修改,比如在一个图表中展示总内存、已用内存、可用内存、内存使用率等信息。
新增总内存的查询 node_memory_MemTotal_bytes{instance=~"$host"},已用内存的查询 node_memory_MemTotal_bytes{instance=~"$host"} - node_memory_MemAvailable_bytes{instance=~"$host"} 以及可用内存的查询 node_memory_MemAvailable_bytes{instance=~"$host"},如下图所示:
但是这里有一个明显的问题是内存使用率的结果是一个百分比,而其他内存使用情况的结果是具体的内存大小,那么将他们绘制在同一个图形中必然会有单位不一致的问题,而且结果相差也较大,那么可以怎么来解决这个问题呢?
首先我们可以先将整个面板的单位调整为 bytes(IEC),该形式的单位会自动在 GiB、MiB、KiB 之间进行换算:
但是明显使用率的单位是不正确的,这个时候就需要我们针对该查询进行覆盖配置,点击编辑器右侧 Overrides 选项卡进行覆盖配置:
点击选项卡中的 + Add field override 按钮可以对属性进行覆盖操作,可选的方式有很多,比如可以设置指定具体属性的值,也可以根据正则表达式来匹配属性的名进行配置,还可以根据指定的类型以及指定的 query 查询结果进行覆盖,显然我们这里选择最后一项 Fields returned by query 更加合理,直接选择查询使用率的 A 这条语句进行覆盖:
然后就可以开始针对查询 A 的各项属性进行单独的配置:
比如我们可以将内存使用百分比的图形样式修改成 Point 点的形式:
然后还可以图形的各种样式,比如 Point 的大小
同样还可以给图例的 Y 轴添加上百分比的单位,显示在图形右侧,这样看上去就更加清晰了:
最终效果如下所示:
这样我们就在同一个图形当中显示出了不同单位的两种图形,而且毫无违和感吧~
调整精度
在上面的内存信息图表中我们已经可以直接看到总内存、使用了多少内存等信息了,其实对于内存的使用率数据要求就不是那么高了,我们可以少绘制几个使用率的数据点,可以提高 Grafana 的性能。
这里就需要对查询 A 的 Min Step 和 Resolution 选项进行配置:
当查询到的样本数据量非常大时可以导致 Grafana 渲染图标时出现一些性能问题,通过 Min Step 可以控制 Prometheus 查询数据时的最小步长,从而减少从 Prometheus 返回的数据量。Resolution 选项则可以控制 Grafana 自身渲染的数据量。例如,如果 Resolution 的值为 1/10,Grafana 会将 Prometeus 返回的 10 个样本数据合并成一个点。因此 Resolution 越小可视化的精确性越高,反之,可视化的精度越低。比如我们这里设置最小步长为 5m,分辨率为 1/10,最终的图形样式如下所示: