菜单
云Grafana 企业版 开源版

变量语法

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

  • $varname 这种语法易于阅读,但无法在单词中间使用变量。 示例: apps.frontend.$server.requests.count
  • ${var_name} 当您希望在表达式中插入变量时,请使用此语法。
  • ${var_name:<format>} 此格式允许您更精确地控制Grafana如何插入值。有关所有格式化类型的详细信息,请参阅高级变量格式选项
  • [[varname]] 不要使用。已弃用的旧语法,将在未来的版本中删除。

在查询发送到数据源之前,查询会被插值,即变量会被替换为其当前值。在插值过程中,变量值可能会被转义以符合查询语言和其使用的语法。例如,在InfluxDB或Prometheus查询中用于正则表达式表达式的变量将被正则表达式转义。有关插值过程中值转逃的详细信息,请参阅数据源特定文档主题。

有关覆盖数据源默认格式的复杂语法,请参阅高级变量格式选项

高级变量格式选项

变量插值的格式取决于数据源,但在某些情况下,您可能想要更改默认格式。

例如,MySql数据源的默认设置是将多个值以带有引号的逗号分隔符连接: 'server01','server02'。在某些情况下,您可能希望得到一个不带引号的逗号分隔字符串: server01,server02。您可以使用以下列出的高级变量格式选项来实现这一点。

通用语法

语法: ${var_name:option}

Grafana Play 网站上测试格式化选项。

如果指定了无效的格式化选项,则默认/回退选项为glob

另一种语法(可能在将来被弃用)是[[var_name:option]]

CSV

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

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

分布式 - OpenTSDB

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

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

双引号

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

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

glob - Graphite

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

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

JSON

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

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

Lucene - Elasticsearch

以Lucene格式格式化具有多个值的变量以用于Elasticsearch。

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

百分编码

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

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

管道

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

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

原始

数据源变量的原始格式返回数据源的UID(唯一标识符),而不是其名称。

bash
datasourceVariable = 'd7bbe725-9e48-4af8-a0cb-6cb255d873a3'
String to interpolate: '${datasourceVariable:raw}'
Interpolation result: 'd7bbe725-9e48-4af8-a0cb-6cb255d873a3'

正则表达式

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

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

单引号

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

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

SQL字符串

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

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

文本

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

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

查询参数

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

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