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 提供并限制了的。