背景
在面板中,可以利用变量和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"
评论