Grafana: (3) 变量的创建、管理与使用
建议点击 查看原文 查看最新内容。
原文链接: https://typonotes.com/posts/2023/06/08/grafana-variable-management/
之前在 Grafana: (1) DataSource 数据源管理 中提到过, 对于不同环境的的数据源命名是具有一定规则, 可以在后期通过变量管理。
这个需求其实很好理解:
在面板中 引入变量, 能快速切换不同环境, 还能对更好的过滤查询条件。这点很容易理解。

Grafana 给出了 9种内置变量类型 , 个人比较常用的有一下几种
在 Dashboard 右上角 点击 齿轮/Dashboard Setting 进入配置界面, 选择 变量/Variables。
点击 Add Variable 或者 New 创建变量

可以认为分为 三个区 或者 四个区(按名字)
重点说一下 红区
我们创建一个 数据源变量。直接看图, 很直观了。

实际上, 在没有过滤之前, 我拥有 十多个 Prometheus 的变量。
Query 变量应该是用的 最多 的变量之一了。

Type 选择 Query。通过查询获得结果。DataSource, 不同的 数据源类型 语句对应的查询语句的语法肯定是不一样的, 这个很好理解。这里我们选择刚才创建的变量 ${MyCluster}。Refresh 刷新时机。是 加载面板 或者 时间范围变化 触发, 根据各自的情况选择。Regex, 使用的 Google/re2 的正则表达语法。Sort 排序通常选 Alphabetical(asc) , 依据字母表顺序排列。label_values 和 query_result需要重点强调一下的是 label_values 和 query_result 都是 Grafana 针对 Prometheus 的语法, Prometheus template variables, 只能在 Grafana 上使用。
这两个 方法/函数 都可以通过 Grafana 在 Prometheus 进行数据查询, 并返回数据。但是一些差异。
这里有一个很重要的 方法/函数: label_values, 可以提取一个 标签。
语法很简单
label_values( 向量, 标签名)
例如上图中我们使用的条件, 以获取 namespace 的值
label_values( up{}, namespace ) # 查询 up, 提取 namespace 标签
在向量中, 查询条件是可以 扩展 的, 也是可以使用 变量 的。例如这里通过提出 job 的值的时候, 使用了变量 namespace 的值。
label_values( up{namespace="$namespace"}, job) # 带有 up, 提取 job 标签
这应该可以算作 Chained Variable/链接变量, 理论上是 无限 嵌套的, 但最好这种变量查询 不要超过 5-10 层(主要还是看每次查询的数据量)。
关于 query_result 我还没搞清楚到底要怎么用, 以及用在什么地方。
按照官方的说法:label_vaules 不支持查询, 因此可以使用 query_result 查询结果, 并通过 正则 过滤。
query_result(topk(5, sum(rate(up[1m])) by (instance)))
官方在这里有一个案例 Use interval and range variables, 有兴趣可以自己了解一下。
话说回来, 所有变量创建完成之后, 可以在 变量管理 界面, 点击右上角的 Show Dependencies 查看变量之间的以来关系。

使用变量很简单, 将变量替换在对应的地方就可以了。
这是替换后

这是替换前

这里说说变量的基础语法。
$variable 这是最基本的用法。${variable:<format>} 可以变量进行不同类型的格式化。要注意 格式化 的方法是 Grafana 提供并限制了的。