【问题标题】:How to Populate Variables for Grafana Dashboard Template in Jsonnet如何在 Jsonnet 中为 Grafana 仪表板模板填充变量
【发布时间】: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"

【问题讨论】:

    标签: grafana grafana-templating jsonnet


    【解决方案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 dash{1,2}.json output from main.jsonnet fields
    $ jsonnet -J vendor -m . main.jsonnet
    ./dash1.json
    ./dash2.json
    
    

    【讨论】:

      猜你喜欢
      • 2018-10-25
      • 2020-12-01
      • 1970-01-01
      • 2020-03-17
      • 2022-12-14
      • 1970-01-01
      • 2020-02-19
      • 1970-01-01
      • 2021-03-09
      相关资源
      最近更新 更多