Последнее обновление: августа 10, 2026

Переменные шаблонов MySQL

Вместо жёсткого задания таких деталей, как имена серверов, приложений и датчиков, в запросах метрик вы можете использовать переменные. Grafana отображает эти переменные в виде раскрывающихся списков в верхней части дашборда, помогая изменять отображаемые на дашборде данные. Grafana называет такие переменные переменными шаблонов.

Введение в шаблонизацию и переменные шаблонов см. в разделах Templating и Add and manage variables.

Переменная запроса

Переменная запроса в Grafana динамически извлекает значения из вашего источника данных с помощью запроса. С помощью переменной запроса вы можете написать SQL-запрос, возвращающий значения, такие как имена измерений, имена ключей или значения ключей, которые отображаются в раскрывающемся списке.

Редактор запросов переменных поддерживает те же режимы Builder и Code, что и основной редактор запросов. Используйте режим Builder для визуального построения запросов путём выбора набора данных, таблицы, столбцов и фильтров. Используйте режим Code для написания SQL напрямую.

Например, следующий запрос возвращает все значения из столбца hostname:

SQL
SELECT hostname FROM my_host

Запрос может возвращать несколько столбцов, и Grafana автоматически формирует список, используя значения из этих столбцов. Например, следующий запрос возвращает значения из обоих столбцов hostname и hostname2, которые включаются в раскрывающийся список переменной.

SQL
SELECT my_host.hostname, my_other_host.hostname2 FROM my_host JOIN my_other_host ON my_host.city = my_other_host.city

Чтобы использовать в запросе зависящие от диапазона времени макросы, такие как $__timeFilter(column), вы должны установить режим обновления переменной шаблона в On Time Range Change.

SQL
SELECT event_name FROM event_log WHERE $__timeFilter(time_column)

Переменные «ключ/значение»

Вы можете создать переменную «ключ/значение», чтобы в раскрывающемся списке отображалась понятная метка (например, hostname), а в запросах панелей использовалось другое значение (например, ID). Используйте Value field и Text field редактора переменных в нижней части раздела запроса, чтобы указать, какие столбцы запроса задают значение и метку. Ваш запрос может использовать любые имена столбцов; вам не нужны __value или __text в SQL.

Пример: выполните запрос, возвращающий hostname и id, затем установите Text field в hostname и Value field в id.

SQL
SELECT hostname, id FROM my_host

Обратите внимание, что значения в текстовом столбце должны быть уникальными. Если есть дубликаты, Grafana использует только первую совпадающую запись.

Как вариант, вы можете использовать устаревший подход: возвращать в запросе столбцы с именами __text и __value (например, SELECT hostname AS __text, id AS __value FROM my_host).

Вложенные переменные

Вы можете создавать вложенные переменные, когда одна переменная зависит от значения другой. Например, если у вас есть переменная с именем region, вы можете настроить переменную hosts так, чтобы она показывала только хосты из выбранного региона. Если region — многовыбираемая переменная, используйте оператор IN вместо =, чтобы сопоставить несколько выбранных значений.

SQL
SELECT hostname FROM my_host WHERE region IN($region)

Фильтрация результатов с помощью __searchFilter

Использование __searchFilter в поле запроса позволяет фильтровать результаты запроса на основе ввода пользователя в раскрывающемся списке выбора. Если вы ничего не вводите, значением по умолчанию для __searchFilter является %.

Обратите внимание, что вы должны заключить выражение __searchFilter в кавычки, так как Grafana не добавляет их автоматически.

Следующий пример демонстрирует, как использовать __searchFilter в поле запроса для включения поиска по hostname в реальном времени по мере ввода пользователем в раскрывающемся списке выбора.

SQL
SELECT hostname FROM my_host WHERE hostname LIKE '$__searchFilter'

Использование переменных в запросах

Grafana автоматически заключает значения переменных шаблонов в кавычки только тогда, когда переменная шаблона является multi-value.

При использовании многовыбираемой переменной используйте оператор сравнения IN вместо =, чтобы сопоставить несколько значений.

Grafana поддерживает два синтаксиса использования переменных в запросах:

  • синтаксис $<varname>

Пример с переменной шаблона с именем hostname:

SQL
SELECT
  UNIX_TIMESTAMP(atimestamp) as time,
  aint as value,
  avarchar as metric
FROM my_table
WHERE $__timeFilter(atimestamp) and hostname in($hostname)
ORDER BY atimestamp ASC
  • синтаксис [[varname]]

Пример с переменной шаблона с именем hostname:

SQL
SELECT
  UNIX_TIMESTAMP(atimestamp) as time,
  aint as value,
  avarchar as metric
FROM my_table
WHERE $__timeFilter(atimestamp) and hostname in([[hostname]])
ORDER BY atimestamp ASC

Отключение заключения в кавычки для многовыбираемых переменных

По умолчанию Grafana форматирует многовыбираемые переменные как заключённую в кавычки строку, разделённую запятыми. Например, если выбраны server01 и server02, результатом будет 'server01', 'server02'. Чтобы отключить заключение в кавычки, используйте параметр форматирования csv для переменных:

text
${servers:csv}

Это выводит значения как список без кавычек, разделённый запятыми.

Использование явного заключения в кавычки для строковых переменных

Не полагайтесь на неявное поведение заключения в кавычки для строковых переменных в SQL-запросах. Поведение заключения в кавычки может различаться в зависимости от типа панели и контекста:

  • Повторяющиеся панели могут вообще не заключать одновыбираемые переменные в кавычки, из-за чего в SQL появляются значения без кавычек и запрос ломается.
  • Если вы вручную обернёте переменную в кавычки (например, WHERE name = '$myvar'), а Grafana также применит своё собственное заключение в кавычки, значение будет заключено в двойные кавычки (например, ''30'' вместо '30'). Это намеренное поведение заключения в кавычки было восстановлено в Grafana 11.3.

Чтобы избежать обеих проблем, используйте параметр форматирования sqlstring. Он выполняет экранирование и заключение в кавычки за один шаг, так что вам не нужно добавлять свои собственные кавычки вокруг переменной:

SQL
SELECT *
FROM my_table
WHERE hostname = ${hostname:sqlstring}

Это даёт безопасно заключённую в кавычки строку (например, 'server01') независимо от типа панели или контекста. Для многовыбираемых переменных используйте IN с ${var:sqlstring}:

SQL
SELECT *
FROM my_table
WHERE hostname IN (${hostname:sqlstring})

Caution

Не оборачивайте ${var:sqlstring} в дополнительные кавычки. Форматтер sqlstring уже выдаёт значение в кавычках. Написание '${var:sqlstring}' приводит к двойному заключению в кавычки.

Дополнительную информацию см. в разделе Advanced variable format options.