grafana变量用法,使用grafana渲染模板

小熊 监控运维评论16,972字数 2770阅读9分14秒阅读模式

背景

在面板中,可以利用变量和html插件,渲染出配置文件。一般上监控平台会需要prometheus的配置。

job_name: <display_name></br>
scrape_interval: 15s</br>
static_configs:</br>
  - targets: [ {metacluster_instance:singlequote} ]</br>
    labels:</br>
      alert: 'true'</br>
      cluster: '{cluster}'</br>
      role: 'metacluster'</br>
  - targets: [ ${etcd_instance:singlequote} ]</br>

这里用到了grafana变量语法,可以看到这里的prometheus暂时没有使用比较好的自动发现方案,按这种静态识别接入,变量是主机列表,需要以单引号和逗号的方式连接多个instance。

变量的语法

面板标题和指标查询可以使用两种不同的语法来引用变量。

  • $varname 易于阅读,但不允许在单词中间使用变量。示例:apps.frontend.$server.requests.count
  • ${var_name} 如果要在表达式中间使用变量,请使用此语法。比较常用shell也是用这种语法。
  • ${var_name:<format>} 这种格式可以更好地控制 Grafana 如何解释值。

例如,MySQL 数据源的默认设置是以逗号分隔的多个值并使用引号:。'server01','server02' ,在某些情况下,你可能想要一个不带引号的逗号分隔的字符串:。server01,server02。

一般语法

语法:${var_name:option}

CSV

将具有多个值的变量格式化为逗号分隔的字符串。

servers = [ 'test1',  'test2' ]
String to interpolate:  '${servers:csv}'
Interpolation result:  'test1,test2'
分布式——OpenTSDB

以 OpenTSDB 的自定义格式格式化具有多个值的变量。

servers = [ 'test1',  'test2' ]
String to interpolate:  '${servers:distributed}'
Interpolation result:  'test1,servers=test2'

双引号

将单值和多值变量格式化为逗号分隔的字符串,在每个值"中使用转义符,\"并用引号引用每个值。"

servers = [ 'test1',  'test2' ]
String to interpolate:  '${servers:doublequote}'
Interpolation result:  '"test1","test2"'

Glob-石墨

将具有多个值的变量格式化为 glob(用于 Graphite 查询)。

servers = [ 'test1',  'test2' ]
String to interpolate:  '${servers:glob}'
Interpolation result:  '{test1,test2}'

JSON

将具有多个值的变量格式化为逗号分隔的字符串。

servers = [ 'test1',  'test2' ]
String to interpolate:  '${servers:json}'
Interpolation result:  '["test1", "test2"]'

Lucene-Elasticsearc

在 Elasticsearch 中以 Lucene 格式格式化具有多个值的变量。

servers = [ 'test1',  'test2' ]
String to interpolate:  '${servers:lucene}'
Interpolation result:  '("test1" OR "test2")'

百分比码

格式化单值和多值变量以用于 URL 参数。

servers = [ 'foo()bar BAZ',  'test2' ]
String to interpolate:  '${servers:percentencode}'
Interpolation result:  'foo%28%29bar%20BAZ%2Ctest2'

管道

将具有多个值的变量格式化为用竖线分隔的字符串。

servers = [ 'test1.',  'test2' ]
String to interpolate:  '${servers:pipe}'
Interpolation result:  'test1.|test2'

未加工的

关闭特定于数据源的格式,例如 SQL 查询中的单引号。

servers = [ 'test.1',  'test2' ]
String to interpolate:  '${var_name:raw}'
Interpolation result:  'test.1,test2'

Regex (正则表达式)

将具有多个值的变量格式化为正则表达式字符串。

servers = [ 'test1.',  'test2' ]
String to interpolate:  '${servers:regex}'
Interpolation result:  '(test1\.|test2)'

单引号

将单值和多值变量格式化为逗号分隔的字符串,在每个值'中使用转义符,\'并用引号引用每个值。'

servers = [ 'test1',  'test2' ]
String to interpolate:  '${servers:singlequote}'
Interpolation result:  "'test1','test2'"

Sqlstring

将单值和多值变量格式化为逗号分隔的字符串,在每个值'中使用转义符,''并用引号引用每个值。'

servers = [ "test'1",  "test2" ]
String to interpolate:  '${servers:sqlstring}'
Interpolation result:  "'test''1','test2'"

文本

将单值和多值变量格式化为其文本表示形式。对于单个变量,它只会返回文本表示形式。对于多值变量,它将返回与+组合的文本表示形式。

servers = [ "test1",  "test2" ]
String to interpolate:  '${servers:text}'
Interpolation result:  "test1 + test2"

查询参数

将单值和多值变量格式化为其查询参数表示形式。例如:var-foo=value1&var-foo=value2

servers = [ "test1",  "test2" ]
String to interpolate:  '${servers:queryparam}'
Interpolation result:  "var-servers=test1&var-servers=test2"

weinxin
公众号
扫码订阅最新深度技术文,回复【资源】获取技术大礼包
小熊