Синтаксис переменных
Заголовки панелей и запросы к метрикам могут ссылаться на переменные с использованием двух разных синтаксисов:
$varnameЭтот синтаксис легко читается, но не позволяет использовать переменную в середине слова. Пример: apps.frontend.$server.requests.count${var_name}Используйте этот синтаксис, когда нужно интерполировать переменную в середине выражения.${var_name:<format>}Этот формат даёт больше контроля над тем, как Grafana интерполирует значения. Дополнительные сведения обо всех типах форматирования см. в разделе Advanced variable format options.[[varname]]Не использовать. Устаревший синтаксис, который будет удалён в будущих выпусках.
Прежде чем запросы будут отправлены в источник данных, запрос интерполируется, то есть переменная заменяется её текущим значением. Во время интерполяции значение переменной может быть экранировано, чтобы соответствовать синтаксису языка запросов и месту использования. Например, переменные в запросах с регулярными выражениями для InfluxDB или Prometheus экранируются автоматически. Подробности об экранировании значений при интерполяции см. в документации по конкретному источнику данных.
О расширенном синтаксисе для переопределения форматирования по умолчанию у источника данных см. в разделе Advanced variable format options.
Расширенные параметры форматирования переменных
Форматирование интерполяции переменных зависит от источника данных, но есть ситуации, когда вы можете захотеть изменить форматирование по умолчанию.
Например, для источника данных 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'
doublequote
Форматирует переменные с одним и несколькими значениями в строку, разделённую запятыми, экранирует " в каждом значении как \" и заключает каждое значение в ".
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}'
Join
Форматирует переменные с несколькими значениями с пользовательским разделителем. Если аргумент-разделитель не указан, значения объединяются через ,.
servers = ["test1", "test2"]
String to interpolate: '${servers:join:&}'
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")'
percentencode
Форматирует переменные с одним и несколькими значениями для использования в параметрах URL.
servers = ['foo()bar BAZ', 'test2']
String to interpolate: '${servers:percentencode}'
Interpolation result: 'foo%28%29bar%20BAZ%2Ctest2'
Pipe
Форматирует переменные с несколькими значениями в строку, разделённую вертикальной чертой.
servers = ['test1.', 'test2']
String to interpolate: '${servers:pipe}'
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"
Используйте форматтер customqueryparam, чтобы настроить способ форматирования параметров запроса. Он принимает два необязательных аргумента: имя параметра и префикс значения.
servers = ["test1", "test2"]
String to interpolate: '${servers:customqueryparam:v-servers:x-}'
Interpolation result: "v-servers=x-test1&v-servers=x-test2"
Raw
Не применяет к переменной никакого форматирования, специфичного для источника данных.
Например, в этом случае есть дашборд с источником данных Prometheus и переменной с несколькими значениями. Grafana обычно преобразует значения переменной следующим образом, чтобы соответствовать требованиям Prometheus:
servers = ['test1.', 'test2']
String to interpolate: '${servers}'
Interpolation result: '(test1 | test2)'
При использовании формата raw значения возвращаются без такого форматирования:
servers = ['test1.', 'test2']
String to interpolate: '${servers:raw}'
Interpolation result: 'test1,test2'
Regex
Форматирует переменные с несколькими значениями в строку регулярного выражения.
servers = ['test1.', 'test2']
String to interpolate: '${servers:regex}'
Interpolation result: '(test1\.|test2)'
singlequote
Форматирует переменные с одним и несколькими значениями в строку, разделённую запятыми, экранирует ' в каждом значении как \' и заключает каждое значение в '.
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'"
Text
Форматирует переменные с одним и несколькими значениями в их текстовое представление. Для одной переменной просто возвращается текстовое представление. Для переменных с несколькими значениями возвращается текстовое представление, объединённое через +.
servers = ["test1", "test2"]
String to interpolate: '${servers:text}'
Interpolation result: "test1 + test2"