Шаблонные переменные Elasticsearch
Вместо жёсткого кодирования таких сведений, как имена серверов, приложений и датчиков в запросах метрик, можно использовать переменные. Grafana выводит эти переменные в раскрывающихся списках в верхней части дашборда, помогая изменять отображаемые на дашборде данные. Grafana называет такие переменные шаблонными переменными.
Введение в шаблонизацию и шаблонные переменные см. в документации Templating и Add and manage variables.
Использование фильтров
Elasticsearch поддерживает использование фильтров. С их помощью можно задать любое количество фильтров «ключ/значение», и Grafana автоматически применяет их ко всем вашим запросам Elasticsearch.
Фильтры поддерживают следующие операторы:
Дополнительные сведения см. в документации 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:
{ "find": "terms", "field": "hostname", "query": "environment:$environment" }
Всякий раз, когда вы изменяете значение переменной $environment через раскрывающийся список, Grafana инициирует обновление переменной $host, чтобы она содержала только имена хостов, отфильтрованные по выбранному окружению.
Переменные в агрегациях
Вы можете использовать переменные в полях bucket-агрегаций, чтобы динамически изменять способ группировки данных. Например, используйте переменную в поле группировки Terms, чтобы позволить пользователям переключаться между группировкой по hostname, service или datacenter.
Примеры шаблонных переменных
В приведённом выше примере запрос Lucene фильтрует документы по свойству hostname с использованием переменной с именем $hostname.
В примере также используется переменная в поле ввода группировки Terms, с помощью которой можно быстро изменять способ группировки данных.
Создание запроса
Напишите запрос, используя пользовательскую строку JSON, с полем, замапленным как keyword в маппинге индекса Elasticsearch.
Если запрос является multi-field с типами text и keyword, используйте "field":"fieldname.keyword" (иногда fieldname.raw), чтобы указать поле keyword в запросе.
Запросы terms по умолчанию ограничены 500 результатами. Чтобы задать собственное ограничение, установите свойство size в запросе.
Сортировка результатов запроса
По умолчанию запросы возвращают результаты в порядке термов (которые затем можно отсортировать по алфавиту или числово с помощью настройки Sort переменной).
Чтобы получить список термов, отсортированных по количеству документов (список top-N значений), добавьте свойство orderBy со значением doc_count. Это автоматически выбирает сортировку по убыванию:
{ "find": "terms", "field": "status", "orderBy": "doc_count" }
Вы также можете использовать свойство order, чтобы явно задать сортировку по возрастанию или убыванию:
{ "find": "terms", "field": "hostname", "orderBy": "doc_count", "order": "asc" }
Note
Elasticsearch не рекомендует сортировку по возрастанию количества документов, поскольку она может возвращать неточные результаты.
Чтобы сохранить термы в порядке количества документов, установите для раскрывающегося списка Sort переменной значение Disabled. В качестве альтернативы можно использовать другие критерии сортировки, например Alphabetical, чтобы переупорядочить их.