Query Editor: сердце панели¶
Панель без данных — это холст без красок. А Query Editor — это мастерская, в которой краски смешиваются. В этой главе мы разберём каждый элемент — подробно и с примерами.
Аналогия¶
Query Editor — это язык общения с источником данных. Вы формулируете запрос на языке источника (PromQL, SQL, LogQL, Elasticsearch Query DSL, ...), a Grafana переводит результат запроса в универсальный формат Data Frame (см. Часть I) и передаёт дальше панели для отрисовки. Query Editor — это мост.
Data Source Selector (Выбор источника данных)¶
Первое поле сверху. Выпадающий список всех источников данных, к которым у вас есть доступ (Query Permission). Если источник данных не в списке — либо у вас нет доступа, либо источник не настроен вообще.
Лайфхак: если вы используете переменную $datasource (подробно — Часть IV), то здесь будет указано $datasource. Это значит, что панель будет запрашивать данные из того источника, который выбран в переменной, а не жёстко задан. Гибкость.
Query Type Selector: Code vs Builder Mode¶
У каждого источника данных может быть два интерфейса для запроса:
Code Mode¶
Это «родной» язык источника данных. Для Prometheus — PromQL (Prometheus Query Language). Для Loki — LogQL. Для Tempo — TraceQL. Для SQL-баз — SQL. Для Elasticsearch — Elasticsearch Query DSL.
Code Mode — это текстовое поле, куда вы пишете запрос вручную. Параллельно Grafana в реальном времени пытается понять, что именно вы запрашиваете, и выводит в легенде (Legend) предсказуемое описание того, как будут называться возвращаемые ряды.
Builder Mode¶
Это визуальный конструктор запросов — для тех, кто не знает языка запросов к источнику данных. Вы выбираете метрику из списка, оператор, значения — и Grafana генерирует PromQL/SQL/LogQL под капотом. Удобно для экспериментов: Builder помогает понять, как формируется запрос, не читая документацию по языку запросов. Но для сложных запросов Builder обычно не справляется — переключаете на Code Mode и пишете вручную.
Expression Queries (Запросы-выражения)¶
Особый тип запроса, который работает не с источником данных, а с результатами предыдущих запросов. Expression позволяет выполнять математические операции над результатами, фильтровать, объединять ряды. Например: $A > 100 (показать только ряды, где значение выше 100). Или $A - $B (разница двух запросов).
Expression-запрос помечается буквой «E» в списке запросов, в отличие от обычных — «A», «B», «C».
Query Options (Опции запроса)¶
Под полем запроса располагается набор настроек, влияющих на то, как запрос выполняется и как его результаты отрисовываются.
Max Data Points¶
Ограничение на максимальное количество точек данных, которое запрос может вернуть. Полезно для предотвращения зависания бекенда при случайном запросе десятков миллионов точек. Когда данных больше, чем Max Data Points, Grafana применяет автоматическое агрегирование чтобы уложиться в лимит.
Рекомендация: оставляйте стандартное значение, если не знаете зачем менять. Обычно — ширина графика в пикселях разделить на 2 (получается плотность 2 точки на пиксель). Для большинства метрических запросов это даёт и быструю отрисовку, и приемлемую точность.
Min Interval¶
Автоматический шаг агрегации. Grafana сама определяет, с какой частотой запрашивать данные, в зависимости от выбранного таймрейнджа и Max Data Points. Например, если выбран последний час и Max Data Points = 500, то шаг будет около 7 секунд. Если последние 30 дней и Max Data Points = 500, то шаг — около 1.5 часа.
Min Interval задаёт нижний предел этого шага. Если указано 1m, а Grafana хочет 10s — она поставит 1m. Это полезно, когда источник данных хранит данные с шагом 1 минута и нет смысла запрашивать чаще.
| Min Interval | Когда использовать |
|---|---|
1m |
Prometheus с scrape_interval: 60s |
15s |
Prometheus с агрессивным скрейпингом |
5m |
CloudWatch или другой источник с нативной агрегацией 5 минут |
1h |
Долгосрочное хранилище (месяцы/годы) |
Самые частые — 1m и 5m.
Relative Time¶
Сдвиг временного диапазона для конкретного запроса. Например, если дашборд показывает последние 24 часа, а Query имеет Relative Time: 7d, то запрос будет выполнен для периода неделю назад, а не сейчас. Используется для сравнения текущих данных с данными недельной давности («недельное сравнение» — week-over-week).
Time Shift¶
Похоже на Relative Time, но проще: сдвиг на заданный интервал, а не на весь диапазон дашборда. Time Shift: 1d означает «показать данные за вчерашний день» независимо от того, какой таймрейндж выбран на дашборде.
Multiple Queries (Несколько запросов в одной панели)¶
Панель может иметь несколько запросов. Они нумеруются буквами: A, B, C, D, E, ... до Z. Каждый из них — отдельный запрос к источнику данных (или expression-запрос).
Что происходит с результатами нескольких запросов:
- Все результаты объединяются в один набор рядов, если нет Expression-запросов.
- Expression-запросы имеют доступ к результатам предыдущих запросов через
$A,$B, etc. - Transformations могут потом разделить их или обработать.
Если запрос A возвращает метки {instance="server01", job="node"}, а запрос B возвращает те же метки — они сольются в один ряд если labels совпадают. Если метки разные — появятся два ряда.
Совет: для одного графика лучше использовать один запрос, который возвращает несколько рядов с разными labels. Не создавайте 10 запросов A–J на 10 серверов — лучше один запрос с job="node" и потом в легенде настройте отображение по instance. Это и читаемость в редакторе запросов повышает, и производительности не вредит.
Query Inspector (Ctrl+I)¶
Незаменимый инструмент отладки. Показывает:
- Stats: сколько времени выполнялся запрос, количество возвращённых рядов и точек данных. Идеально для поиска «тяжёлых» запросов.
- Data: результат запроса в виде Data Frame — поля, типы, первые записи. Видно, что именно пришло и в каком формате.
- JSON: сериализованный ответ целиком. Удобно для отладки, особенно при подготовке данных для Provisioning.
- Query: точный запрос, который был отправлен источнику. Иногда Grafana модифицирует его (подставляет переменные), и тут видно конечную форму.
Query History¶
Grafana запоминает все ваши запросы — даже те, которые вы сделали в Explore. Query History позволяет найти запрос, который вы выполнили 3 дня назад в Explore, и скопировать его в панель одним кликом. Без повторного ввода.
Explain¶
Разбор запроса: как Grafana интерпретирует ваш запрос, какие шаги выполняет для получения результата. Полезно для сложных запросов в PromQL или LogQL — вы видите промежуточные шаги, видите где именно запрос «тормозит» или отфильтровывает данные.
Резюме¶
Query Editor — это то, с чего начинается панель и то, где она «спотыкается» если что-то не так. Если вы освоили Query Editor — вы освоили 60% работы с Grafana. Остальные 40% — это визуализация и смысловое наполнение дашборда.
И последний совет: прежде чем нажимать Save после Query — откройте Query Inspector и посмотрите на фактические данные. В 20% случаев при первом запросе к источнику данных вы получили не совсем то, что ожидали. И лучше узнать это сейчас, а не на утреннем дашборде перед всем руководством.
Далее: Field Configuration