Синтаксис переменных

Заголовки панелей и запросы к метрикам могут ссылаться на переменные с использованием двух разных синтаксисов:

  • $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

Форматирует переменные с несколькими значениями в строку, разделённую запятыми.

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

Distributed - OpenTSDB

Форматирует переменные с несколькими значениями в пользовательском формате для OpenTSDB.

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

doublequote

Форматирует переменные с одним и несколькими значениями в строку, разделённую запятыми, экранирует " в каждом значении как \" и заключает каждое значение в ".

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}'

Join

Форматирует переменные с несколькими значениями с пользовательским разделителем. Если аргумент-разделитель не указан, значения объединяются через ,.

Bash
servers = ["test1", "test2"]
String to interpolate: '${servers:join:&}'
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")'

percentencode

Форматирует переменные с одним и несколькими значениями для использования в параметрах URL.

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

Pipe

Форматирует переменные с несколькими значениями в строку, разделённую вертикальной чертой.

Bash
servers = ['test1.', 'test2']
String to interpolate: '${servers:pipe}'
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"

Используйте форматтер customqueryparam, чтобы настроить способ форматирования параметров запроса. Он принимает два необязательных аргумента: имя параметра и префикс значения.

Bash
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:

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

При использовании формата raw значения возвращаются без такого форматирования:

Bash
servers = ['test1.', 'test2']
String to interpolate: '${servers:raw}'
Interpolation result: 'test1,test2'

Regex

Форматирует переменные с несколькими значениями в строку регулярного выражения.

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

singlequote

Форматирует переменные с одним и несколькими значениями в строку, разделённую запятыми, экранирует ' в каждом значении как \' и заключает каждое значение в '.

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

sqlstring

Форматирует переменные с одним и несколькими значениями в строку, разделённую запятыми, экранирует ' в каждом значении как '' и заключает каждое значение в '.

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

Text

Форматирует переменные с одним и несколькими значениями в их текстовое представление. Для одной переменной просто возвращается текстовое представление. Для переменных с несколькими значениями возвращается текстовое представление, объединённое через +.

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