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

Шаблонные переменные Elasticsearch

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

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

Использование фильтров

Elasticsearch поддерживает использование фильтров. С их помощью можно задать любое количество фильтров «ключ/значение», и Grafana автоматически применяет их ко всем вашим запросам Elasticsearch.

Фильтры поддерживают следующие операторы:

Оператор Описание
= Равно. Добавляет AND field:"value" в запрос.
!= Не равно. Добавляет AND -field:"value" в запрос.
=~ Соответствует регулярному выражению. Добавляет AND field:/value/ в запрос.
!~ Не соответствует регулярному выражению. Добавляет AND -field:/value/ в запрос.
> Больше чем. Добавляет AND field:>value в запрос.
< Меньше чем. Добавляет AND field:<value в запрос.

Дополнительные сведения см. в документации Filter and Group by documentation.

Выбор синтаксиса переменных

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

  • $varname, например hostname:$hostname, что легко читать и писать, но не позволяет использовать переменную в середине слова.
  • [[varname]], например hostname:[[hostname]]

Когда включены параметры Multi-value или Include all value, Grafana преобразует метки из простого текста в условие, совместимое с Lucene. Подробнее см. в документации Multi-value variables.

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

Вы можете использовать переменные в поле запроса Lucene, полях метрических агрегаций, полях bucket-агрегаций и в поле псевдонима.

Переменные в запросах Lucene

Используйте переменные для динамической фильтрации запросов Elasticsearch:

hostname:$hostname AND level:$level

Объединение или вложение переменных

Вы можете создавать вложенные переменные, где значения одной переменной зависят от выбора другой.

В этом примере определяется переменная с именем $host, которая показывает только хосты, соответствующие выбранному $environment:

JSON
{ "find": "terms", "field": "hostname", "query": "environment:$environment" }

Всякий раз, когда вы изменяете значение переменной $environment через раскрывающийся список, Grafana инициирует обновление переменной $host, чтобы она содержала только имена хостов, отфильтрованные по выбранному окружению.

Переменные в агрегациях

Вы можете использовать переменные в полях bucket-агрегаций, чтобы динамически изменять способ группировки данных. Например, используйте переменную в поле группировки Terms, чтобы позволить пользователям переключаться между группировкой по hostname, service или datacenter.

Примеры шаблонных переменных

Query with template variables
Query with template variables

В приведённом выше примере запрос Lucene фильтрует документы по свойству hostname с использованием переменной с именем $hostname. В примере также используется переменная в поле ввода группировки Terms, с помощью которой можно быстро изменять способ группировки данных.

Создание запроса

Напишите запрос, используя пользовательскую строку JSON, с полем, замапленным как keyword в маппинге индекса Elasticsearch.

Если запрос является multi-field с типами text и keyword, используйте "field":"fieldname.keyword" (иногда fieldname.raw), чтобы указать поле keyword в запросе.

Запрос Описание
{"find": "fields", "type": "keyword"} Возвращает список имён полей с типом индекса keyword.
{"find": "fields", "type": "number"} Возвращает список имён числовых полей (включая float, double, integer, long, scaled_float).
{"find": "fields", "type": "date"} Возвращает список имён полей дат.
{"find": "terms", "field": "hostname.keyword", "size": 1000} Возвращает список значений для поля keyword. Использует текущий временной диапазон дашборда.
{"find": "terms", "field": "hostname", "query": "<Lucene query>"} Возвращает список значений, отфильтрованных по запросу Lucene. Использует текущий временной диапазон дашборда.
{"find": "terms", "field": "status", "orderBy": "doc_count"} Возвращает значения, отсортированные по количеству документов (по умолчанию по убыванию).
{"find": "terms", "field": "status", "orderBy": "doc_count", "order": "asc"} Возвращает значения, отсортированные по количеству документов по возрастанию.

Запросы terms по умолчанию ограничены 500 результатами. Чтобы задать собственное ограничение, установите свойство size в запросе.

Сортировка результатов запроса

По умолчанию запросы возвращают результаты в порядке термов (которые затем можно отсортировать по алфавиту или числово с помощью настройки Sort переменной).

Чтобы получить список термов, отсортированных по количеству документов (список top-N значений), добавьте свойство orderBy со значением doc_count. Это автоматически выбирает сортировку по убыванию:

JSON
{ "find": "terms", "field": "status", "orderBy": "doc_count" }

Вы также можете использовать свойство order, чтобы явно задать сортировку по возрастанию или убыванию:

JSON
{ "find": "terms", "field": "hostname", "orderBy": "doc_count", "order": "asc" }

Note

Elasticsearch не рекомендует сортировку по возрастанию количества документов, поскольку она может возвращать неточные результаты.

Чтобы сохранить термы в порядке количества документов, установите для раскрывающегося списка Sort переменной значение Disabled. В качестве альтернативы можно использовать другие критерии сортировки, например Alphabetical, чтобы переупорядочить их.