变量语法
面板标题和指标查询可以使用两种不同的语法来引用变量
$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
将具有多个值的变量格式化为逗号分隔的字符串。
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 - Graphite
将具有多个值的变量格式化为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 - Elasticsearch
以Lucene格式格式化具有多个值的变量以用于Elasticsearch。
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'
原始
数据源变量的原始格式返回数据源的UID(唯一标识符),而不是其名称。
datasourceVariable = 'd7bbe725-9e48-4af8-a0cb-6cb255d873a3'
String to interpolate: '${datasourceVariable:raw}'
Interpolation result: 'd7bbe725-9e48-4af8-a0cb-6cb255d873a3'
正则表达式
将具有多个值的变量格式化为正则表达式字符串。
servers = ['test1.', 'test2']
String to interpolate: '${servers:regex}'
Interpolation result: '(test1\.|test2)'
单引号
将单值和多值变量格式化为逗号分隔的字符串,在每个值中使用\'
转义'
,并用'
引用每个值。
servers = ['test1', 'test2']
String to interpolate: '${servers:singlequote}'
Interpolation result: "'test1','test2'"
SQL字符串
将单值和多值变量格式化为逗号分隔的字符串,在每个值中使用''
转义'
,并用'
引用每个值。
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"