如何在 Jsonnet 中为 Grafana 仪表板模板填充变量
Posted
技术标签:
【中文标题】如何在 Jsonnet 中为 Grafana 仪表板模板填充变量【英文标题】:How to Populate Variables for Grafana Dashboard Template in Jsonnet 【发布时间】:2021-08-30 17:31:41 【问题描述】:我想使用单个模板部署和管理许多类似的带有 jsonnet/grafonnet 的 Grafana 仪表板,其中在每个仪表板实例中替换变量。
到目前为止,我的(不工作)方法的简化示例如下所示:
# main.jsonnet
(import 'template.json')
_config+::
name: 'thing1',
,
metric::
name: 'metric1',
,
+
(import 'template.json')
_config+::
name: 'thing2',
,
metric::
name: 'metric2',
,
#template.json
local grafana = import 'github.com/grafana/grafonnet-lib/grafonnet/grafana.libsonnet';
local prometheus = grafana.prometheus;
local dashboard = grafana.dashboard;
local graphpanel = grafana.graphPanel;
grafanaDashboards+::
local fileName = $._config.name + '.json',
fileName:
dashboard.new(
'%(name)s Dashboard' % $._config.name,
).addPanel(
grafana.text.new(
title='%(name)s dashboard' % $.metric.name,
content='Dashboard for metric ' + $.metric.name,
),
)
,
但是,在渲染时,它只输出一个仪表板,其值为“thing2”“metric2”。
这样的模板的正确方法是什么?我正在寻找像这样输出的多个仪表板...
dashboard1 - “thing1” “metric1”
dashboard2 - "thing2" metric2"
【问题讨论】:
【参考方案1】:问题在于,在 main.jsonnet
中,您将 (+
) metric2
合并到 metric1
内容之上,完全覆盖它。
您需要为每个字段创建一个显式字段(一个数组也可以,但稍后在 jsonnet 中处理它更麻烦),然后您可以利用 jsonnet -m <dir>
为每个字段创建一个文件。
综合起来:
main.jsonnet
// main.jsonnet
'dash1.json': (import 'template.jsonnet')
_config+::
name: 'thing1',
,
metric::
name: 'metric1',
,
.grafanaDashboards,
'dash2.json': (import 'template.jsonnet')
_config+::
name: 'thing2',
,
metric::
name: 'metric2',
,
.grafanaDashboards,
template.jsonnet
差异:将所需的 gridPos
添加到该函数调用
//template.json
local grafana = import 'github.com/grafana/grafonnet-lib/grafonnet/grafana.libsonnet';
local prometheus = grafana.prometheus;
local dashboard = grafana.dashboard;
local graphPanel = grafana.graphPanel;
grafanaDashboards+::
local fileName = $._config.name + '.json',
fileName:
dashboard.new(
'%(name)s Dashboard' % $._config.name,
).addPanel(
grafana.text.new(
title='%(name)s dashboard' % $.metric.name,
content='Dashboard for metric ' + $.metric.name,
),
gridPos=0 // required parameter, put 0 but dunno if ok
),
,
命令行
使用jsonnet-bundler 供应商导入的依赖项
# Download deps to vendor/
$ jb init
$ jb install https://github.com/grafana/grafonnet-lib
GET https://github.com/grafana/grafonnet-lib/archive/3082bfca110166cd69533fa3c0875fdb1b68c329.tar.gz 200
# Create dash1,2.json output from main.jsonnet fields
$ jsonnet -J vendor -m . main.jsonnet
./dash1.json
./dash2.json
【讨论】:
以上是关于如何在 Jsonnet 中为 Grafana 仪表板模板填充变量的主要内容,如果未能解决你的问题,请参考以下文章
如何在基于 sysdig 指标标签的 grafana 仪表板中创建下拉菜单
Grafana Alert/AzureMonitor:在 Grafana 中为图形创建警报规则时出现执行错误