变量语法
面板标题和指标查询可以使用两种不同的语法引用变量
$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'
Distributed - 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
将多个值格式化为用于 Graphite 查询的 glob。
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
将多个值格式化为 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'
原始
数据源变量的原始格式返回数据源的 UID(唯一标识符),而不是其名称。
datasourceVariable = 'd7bbe725-9e48-4af8-a0cb-6cb255d873a3'
String to interpolate: '${datasourceVariable:raw}'
Interpolation result: 'd7bbe725-9e48-4af8-a0cb-6cb255d873a3'
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"