likes
comments
collection
share

如何构建 Grafana 动态面板并可视化分析开源社区数据

作者站长头像
站长
· 阅读数 73

前言

本篇文章将继续这一话题,并将重点放在如何通过 Variables 构建一个动态的 Grafana Dashboard。

静态面板和动态面板

静态面板

静态面板在本文中指的是面板对应的查询的内容是 “写死的” 或者说通过硬编码编写的。

想象一下你想通过 Grafana 监测你的后端服务器 backend_server_1 的负载情况,于是你将 backend_server_1 写死在了查询中,本着能跑就行的原则来说这确实没有问题;但当这一台服务器已经不足以支持你的应用程序的时候,你可能需要添加 backend_server_2backend_server_3 等等,这时你最开始编写的查询就会出现问题,每当你添加或者减少一台服务器你可能就需要修改一次查询的内容,这是非常麻烦和低扩展性的。

以之前文章中获取各个仓库的 Star 数变化情况的面板为例:

如何构建 Grafana 动态面板并可视化分析开源社区数据

其对应查询数据的 SQL 中将仓库的名字都确定 “死了”,这种静态面板是非常傻的,不要做这样的事。

如何构建 Grafana 动态面板并可视化分析开源社区数据

动态面板

通过使用 Grafana Dashboard 提供的 Variables 特性,我们可以轻松构建出一系列随着设置的变量进行动态变化的面板。

与静态面板相比,动态面板通过编写与不同类型的变量相配合的各种查询,更加灵活和自然。

创建变量

Grafana Dashboard 所支持创建的变量类型非常多(如下表所示),其创建与使用的方式都大同小异,我们这里主要讨论 Query 类型的变量,如果你想了解其他类型的变量,你可以查看官方文档

变量类型描述
Query查询生成的值列表,例如度量名称、服务器名称、传感器 ID、数据中心等。
Custom使用逗号分隔的列表手动定义变量选项。
Text box显示一个带有可选默认值的自由文本输入字段。
Constant定义一个隐藏的常量。
Data source快速更改整个仪表板的数据源。
IntervalInterval 变量表示时间跨度。
Ad hoc filters自动添加到数据源(仅限 Prometheus、Loki、InfluxDB 和 Elasticsearch)的所有度量查询中的键/值过滤器。
Global variables可以在查询编辑器中的表达式中使用的内置变量。
Chained variables变量查询可以包含其他变量。

变量的创建在 Dashboard Settings 的 Variables 选项卡中,点击 New variale 即可。

如何构建 Grafana 动态面板并可视化分析开源社区数据

将变量的类型设置为 Query 后我们可以编写一个查询来设置到这个变量实际的值。

我们这里创建一个简单的 login 变量来查询出数据库中所有 GitHub 组织的名字,由于我们使用了 MySQL 作为数据源,所以我们只需编写一个简单的 SQL 即可。

如何构建 Grafana 动态面板并可视化分析开源社区数据

完成创建之后的 login 变量效果如下,所有的组织都被查询了出来并以下拉框列表的形式进行展示,我们可以选择一个条目作为 login 变量实际的值。

如何构建 Grafana 动态面板并可视化分析开源社区数据

变量之间还可以互相引用。 例如现在我想再创建一个 repos 变量,它可以展示一个组织下的所有仓库的名字,于是我们只需要再 repos 变量的查询中通过 $varname 语法来使用我们已经创建的 login 变量即可,更多使用变量的语法,你可以参考官方文档

如何构建 Grafana 动态面板并可视化分析开源社区数据

通过 Variables 选项卡的 Show dependencies 你可以清晰的看到各个变量之间的依赖关系。

如何构建 Grafana 动态面板并可视化分析开源社区数据

我们还可以选择将查询出的多个值设置为变量实际的值。

如何构建 Grafana 动态面板并可视化分析开源社区数据

现在我们的 repos 变量通过引用 login 变量并开启 Multi-value 选项,我们可以选择一个特定组织下的多个仓库的名字作为 repos 变量的值。

如何构建 Grafana 动态面板并可视化分析开源社区数据

使用变量

使用变量的方式正如我们在创建 repos 变量中做的那样,通过 $varname 或者 ${var_name} 等语法来将变量嵌入具体的查询或者表达式即可。

为了直观的让你看到动态面板相对于静态面板的灵活性与优点所在,我们仍然以最开始的 获取各个仓库的 Star 数变化情况的面板 为例,现在我们有了 repos 变量可以根据 login 变量所选中的组织的名字来选中多个组织下的仓库名字并作为 repos 变量的值。于是我们可以通过以下这种方式来编写我们的 SQL:

如何构建 Grafana 动态面板并可视化分析开源社区数据

如图所示:

  • 我们为选中 cloudwego 这个组织作为 login 变量的值并在 repos 变量中选择了组织下的 netpoll,kitex 和 hertz 这三个仓库;
  • 在 SQL 中我们通过 $varname 的语法使用了 repos 变量;
  • 最终可以看到我们的图表显示了我们选中的三个仓库的 Star 数变化趋势;

这比我们最开始在查询中直接写上仓库的名字要优雅多了。

另外一个需要 注意 的点是在图中的这种用法需要你在添加一个额外的 Transform 来处理查询出的数据,Multi-frame time series Transform 可以将查询返回的字符串类型值作为一种标签,从而可以对各个标签的时间序列进行分别展示。

如何构建 Grafana 动态面板并可视化分析开源社区数据

总结

以上就是本篇文章的所有内容了,我们通过实际例子来了解了 Grafana Dashboard 中的 Variables 的使用,这让我们可以很轻松的创建出灵活的动态面板。

通过对 Grafana Dashboard Variables 等特性的使用,OPENALYSIS 项目可以更加灵活的对配置的开源社区的数据进行可视化分析,我相信这可以帮助你更好的对你所在开源社区进行构建与发展。

参考列表

转载自:https://juejin.cn/post/7390663832782127145
评论
请登录