4-Grafana Panel 面板和 Time series(时间序列)

熊 1 阅读 监控平台


1. Panel面板介绍

面板(Panel)是 Grafana中基本可视化构建块 , 每个面板都有一个特定于面板中选择数据源的查询编辑器 , 每个面板都有各种各样的样式和格式选项 , 面板可以在仪表板上拖放和重新排列 , 它们也可以调整大小 , 所以要在 Grafana 上创建可视化的图表 , 面板是我们必须要掌握的知识点。

Panel是Grafana中最基本的可视化单元 , 每一种类型的面板都提供了相应的查询编辑器(Query Editor) , 让用户可以从不同的数据源(如 Prometheus)中查询出相应的监控数据 , 并且以可视化的方式展现 , Grafana 中所有的面板均以插件的形式进行使用。

Grafana 提供了各种可视化来支持不同的用例 , 目前内置支持的面板包括 : Time series(时间序列)是默认的也是主要的图形可视化面板、State timeline(状态时间表)状态随时间变化 、Status history(状态历史记录)、Bar chart(条形图)、Histogram(直方图)、Heatmap(热力图)、Pie chart(饼状图)、Stat(统计数据)、Gauge、Bar gauge、Table(表格)、Logs(日志)、Node Graph(节点图)、Dashboard list(仪表板列表)、Alert list(报警列表)、Text panel(文本面板 , 支持 markdown和html)、News Panel(新闻面板 , 可以显示 RSS 摘要)等 , 除此之外 , 我们还可以通过官网的面板插件页面Grafana Plugins - extend and customize your Grafana | Grafana Labs 获取安装其他面板进行使用。

grafana-panel-1

2. 图形面板

前文我们介绍了Grafana中的面板概念 , 对于基于时间的折线图、面积图和条形图 , 我们建议使用默认的时间序列进行可视化。接下来我们就来介绍基于 Time series 时间序列的图形可视化方式的操作。

2.1 添加面板 Time series(时间序列)

cpu使用率 :

(1 - sum(rate(node_cpu_seconds_total{mode="idle"}[1m])) by (instance) / sum(rate(node_cpu_seconds_total[1m])) by (instance) ) * 100

面板是属于某一个Dashboard的 , 所以我们需要先创建一个Dashboard , 在侧边栏点击 + 切换到 Dashboard 下面开始创建Dashboard :

grafana-panel-2

在默认创建的新的Dashboard中就有一个空的面板 , 点击 Add an empty panel 即可开始添加面板 : 创建panel

grafana-panel-3
grafana-panel-4

最右边是关于panel的配置

grafana-panel-5
grafana-panel-6

在左侧的话分了上下两块 , 上面其实就是一个图形的展示。

2.2 Panel options

grafana-panel-7

背景是否透明 , 整体的配置如下

grafana-panel-8

2.3 Tooltip mode

Tooltip mode也即是鼠标移动到图形上面展示所有的指标 , 还是展示鼠标位置的指标。

grafana-panel-9

2.4 Legend

Legend mode也就是标志的模式

grafana-panel-10

Legend placement默认是在底部 , 可以调整到右上角

grafana-panel-11

Legend格式其实就是格式化展示显示在图形上的东西 , 我们这里只需要instance的值。

grafana-panel-12
grafana-panel-13

这里值也可以去选 , 选择最大值和最小值

grafana-panel-14

可以选择不同的表格

grafana-panel-15
grafana-panel-16
grafana-panel-17

2.5 Graph styles

关于图形还可以再去修改样式 , Graph styles里面去修改。

grafana-panel-18

最后效果如下

grafana-panel-19

同样的道理来看看内存使用率

grafana-panel-20

这里会展示出很多的标签 , 在panel里面的Legend只要展示instance即可。

grafana-panel-21
grafana-panel-22

最后调整一下大小 , 调整一下位置即可 !

grafana-panel-23

最后别忘记保存了监控面板!

grafana-panel-24

上面就是创建panel的使用方法,但是我们是将master,node1,node2这些全部展现在一个面板里面,如果监控的节点比较多都展示在这个地方就不方便了。

3. 图形定制

根据上面的方式方法基本上可以把我们的监控图表绘制出来,但是有的场景下面可能需要更多的定制功能。比如我们想要在CPU使用率的面板中同时展示系统、用户以及总的使用率,还需要做一些其他定制让我们的图表看起来更加友好。(需要多个PromQL语句来展示,这也就是将不同的查询放置到一个面板上面)

3.1 多个查询

编辑CPU使用率这个面板,在面板编辑器下方的 Query 区域点击 + Query 按钮新增一个查询 :

这样其实也就是将不同的查询放到一个panel里面去,这样就可以多维度的展示监控指标了。

grafana-panel-25

在该查询中输入查询语句来获取系统CPU的使用率 :

sum(rate(node_cpu_seconds_total{instance=~"$hosts",mode="system"}[1m])) by (instance) / sum(rate(node_cpu_seconds_total{instance=~"$hosts"}[1m])) by (instance)  * 100

空闲CPU:

(1 - sum(rate(node_cpu_seconds_total{mode="idle",instance=~"$instance"}[1m])) by (instance) / sum(rate(node_cpu_seconds_total{instance=~"$instance"}[1m])) by (instance) ) * 100
grafana-panel-26

用同样的方式再新增一个查询用户CPU使用率的语句 :

grafana-panel-27

如果我们选择查询所有节点的CPU使用率,那么最终的效果如下所示 : (这样就可以看到总使用率和用户使用率了)。

grafana-panel-28

这样就将不同的查询整合到同一个panel里面来了。

3.2 转换

我们可以看 Legend 部分的展示始终会带上 :9100 这个端口号,但其实这对于我们展示来说意义不大,所以最好是去掉这个端口信息,可以点击编辑器下方 Query 旁边的 Transform 选项卡进入转换页面 :

grafana-panel-29
grafana-panel-30

Transform 转换功能允许我们在查询结果可视化之前加入、计算、重新排序、隐藏和重命名查询结果,不过目前只支持时间序列数据。

对于拥有大量仪表板或大量查询的用户而言,能够在另一个面板中重用来自一个面板的查询结果可能会带来巨大的性能提升。

如果有多个转换,Grafana会按照它们列出的顺序来应用它们,每个转换都会创建一个新的结果集,该结果集会传递到管道中的下一个转换进行处理。

Grafana 中支持非常多的转换方式,我们这里使用 Rename by regex 这个通过正则重命名的转换器即可,这里我们只需要添加一个 (.*):9100 的正则表达式即可,将 host 信息保留下来,如下图所示 :

grafana-panel-31

关于转换的更多使用方法可以参考官方文档 https://grafana.com/docs/grafana/latest/panels/transformations/types-options/。

3.3 Legend配置

上面转换完成后,可以看到Legend部分展示的图例较多,我们可以将Legend的模式修改为 Table :

grafana-panel-32

修改为 Table 模式后可以看到图形中的Legend用表格的形式展示出来了。

grafana-panel-33

展示到右上方,这样方便看。

此外我们还可以通过 Legend values 来选择一些其他的信息进行展示,比如最大值、最小值、平均值等等 : (以table展示的话显得更加有序)。

grafana-panel-34

3.4 Standard options

由于我们这里计算的都是百分比,所以可以将单位设置为 %,位于右侧的 Standard options 下方的 Unit 中选择 Misc -> Percent(0-100) 即可 :

grafana-panel-35
grafana-panel-36

此外还可以配置图例的最小值、最大值、保留小数的位数、图形颜色配置等等。

grafana-panel-37

可以去选择图形颜色的配置

grafana-panel-38

3.5 时间间隔设置为变量

前面我们在查询监控数据的时候都是将区间向量的范围固定成了 1m 或者 5m,这样固定后显然不是非常灵活,所以我们可以再添加一个时间间隔的参数来灵活选择。

grafana-panel-39

这个1m钟就需要改为参数的形式。

grafana-panel-40

这里我们新增了一个名为 interval 的参数,不过需要注意该参数的类型为 Interval,然后我们配置该参数可选的值包括 1m,5m,10m,30m,添加后在Dashboard页面上就会多一个时间间隔的下拉框。然后记得将查询语句中的相关时间间隔替换成 $interval 参数 :

grafana-panel-41

可以看到这里可以选择时间间隔了。

grafana-panel-42

修改PromQL!

grafana-panel-43

3.6 覆盖

用同样的方式可以去对内存监控图表进行修改,比如在一个图表中展示总内存、已用内存、可用内存、内存使用率等信息。

新增

#总内存的查询       
node_memory_MemTotal_bytes{instance=~"$host"}
#已用内存的查询       
node_memory_MemTotal_bytes{instance=~"$host"} - node_memory_MemAvailable_bytes{instance=~"$host"}
#可用内存的查询       
node_memory_MemAvailable_bytes{instance=~"$host"}

如下图所示 :

grafana-panel-44

但是这里有一个明显的问题是内存使用率的结果是一个百分比,而其他内存使用情况的结果是具体的内存大小,那么将他们绘制在同一个图形中必然会有单位不一致的问题,而且结果相差也较大,那么可以怎么来解决这个问题呢?

首先我们可以先将整个面板的单位调整为 bytes(IEC),该形式的单位会自动在GiB、MiB、KiB 之间进行换算:

grafana-panel-45

但是明显使用率的单位是不正确的,这个时候就需要我们针对该查询进行覆盖配置,点击编辑器右侧 Overrides 选项卡进行覆盖配置:

grafana-panel-46

点击选项卡中的 + Add field override 按钮可以对属性进行覆盖操作,可选的方式有很多,比如可以设置指定具体属性的值,也可以根据正则表达式来匹配属性的名进行配置,还可以根据指定的类型以及指定的 query 查询结果进行覆盖,显然我们这里选择最后一项 Fields returned by query 更加合理,直接选择查询使用率的 A 这条语句进行覆盖:

下面其实就是对单独的promsql语句展示图形的配置,包括线条,以百分比显示

grafana-panel-47
grafana-panel-48

然后就可以开始针对查询 A 的各项属性进行单独的配置:

grafana-panel-49

比如我们可以将内存使用百分比的图形样式修改成 Point 点的形式:

grafana-panel-50

然后还可以图形的各种样式,比如 Point 的大小。

grafana-panel-51

同样还可以给图例的Y轴添加上百分比的单位,显示在图形右侧,这样看上去就更加清晰了:

grafana-panel-52

最终效果如下所示:

grafana-panel-53

这样我们就在同一个图形当中显示出了不同单位的两种图形,而且毫无违和感吧~

3.7 调整精度

在上面的内存信息图表中我们已经可以直接看到总内存、使用了多少内存等信息了,其实对于内存的使用率数据要求就不是那么高了,我们可以少绘制几个使用率的数据点,可以提高 Grafana的性能。

这里就需要对查询 A 的 Min Step 和 Resolution 选项进行配置:

grafana-panel-54

当查询到的样本数据量非常大时可以导致Grafana渲染图标时出现一些性能问题,通过 Min Step 可以控制Prometheus 查询数据时的最小步长,从而减少从Prometheus返回的数据量。

Resolution 选项则可以控制Grafana自身渲染的数据量。例如,如果Resolution的值为1/10,Grafana会将 Prometeus返回的10个样本数据合并成一个点。因此 Resolution 越小可视化的精确性越高,反之,可视化的精度越低。比如我们这里设置最小步长为 5m,分辨率为 1/10,最终的图形样式如下所示:

grafana-panel-55


参考链接

构建企业级监控平台系列(三十) : Grafana Panel 面板和 Time series(时间序列) (qq.com)