Редактор запросов InfluxDB
Редактор запросов InfluxDB помогает создавать и выполнять запросы к вашему источнику данных InfluxDB. Открыть его можно со страницы Explore или из любой панели дашборда, нажав многоточие в правом верхнем углу панели и выбрав Edit.
Редактор поддерживает три языка запросов: SQL, InfluxQL и Flux. У каждого из них собственный опыт редактирования и собственная система макросов. Для SQL и InfluxQL доступны как режим визуального конструктора, так и режим редактирования кода, а Flux предоставляет только редактор кода. Редактор запросов также можно использовать для получения данных журналов.
Общую информацию о редакторах запросов Grafana см. в разделе Query and transform data.
Прежде чем начать
- Убедитесь, что вы настроили источник данных InfluxDB.
- Проверьте, что ваши учётные данные имеют соответствующие разрешения на запросы к целевой базе данных или бакету.
Ключевые концепции
Если вы только начинаете работать с InfluxDB, эти термины будут встречаться по всему редактору запросов:
Выбор редактора запросов
У источника данных InfluxDB есть три редактора запросов, каждый из которых соответствует языку запросов, выбранному в конфигурации источника данных:
Параметры редактора зависят от языка запросов.
Редактор запросов InfluxQL
Редактор запросов InfluxQL помогает выбирать метрики и теги для создания запросов InfluxQL. Есть два режима: visual editor mode и raw query mode. Чтобы переключиться между ними, нажмите значок карандаша в правом верхнем углу.
Режим визуального редактора запросов содержит следующие компоненты:
- FROM — выберите measurement для запроса.
- WHERE — выберите фильтры, нажимая значок +. Можно вводить регулярные выражения или использовать текстовое поле для значений тегов в виде регулярных выражений.
- SELECT — выберите поля и функции из выпадающего списка. Несколько полей и функций можно добавить, нажимая значок +.
- GROUP BY — выберите тег в выпадающем меню.
- TIMEZONE — необязательно Группировка данных по определённому часовому поясу.
- ORDER BY TIME — сортировка данных по времени по возрастанию или убыванию.
- LIMIT — необязательно Ограничивает число строк, возвращаемых запросом.
- SLIMIT — необязательно Ограничивает число серий, возвращаемых запросом. Дополнительные сведения см. в разделе SLIMIT clause.
- FORMAT AS — выберите формат в выпадающем меню: time series, table или logs.
- ALIAS — добавьте псевдоним. Дополнительные сведения см. в разделе Alias patterns.
Режим редактора необработанных запросов
Вы можете писать необработанные запросы InfluxQL, переключившись в режим raw query. Нажмите значок карандаша в правом верхнем углу редактора запросов, чтобы переключить режим. При переключении в режим визуального редактора все изменения, сделанные в режиме raw query, теряются.
При использовании режима raw query ваш запрос должен содержать WHERE $timeFilter. Также следует указать группировку по времени и функцию агрегирования. В противном случае InfluxDB может вернуть сотни тысяч точек данных, что потенциально может привести к зависанию браузера.
Сопоставление по регулярным выражениям
Вы можете вводить регулярные выражения для имён метрик или значений фильтров по тегам.
Заключайте шаблон регулярного выражения в прямые слэши (/), как показано в этом примере: /measurement/.
Grafana автоматически корректирует условие фильтрации по тегу, чтобы использовать оператор сопоставления с регулярным выражением InfluxDB (=~).
Поля и функции агрегирования
В строке SELECT можно указать, какие поля и функции использовать.
Если вы выполняете group by time, необходимо использовать функцию агрегирования. Некоторые функции, например derivative, также требуют функции агрегирования.
Поле ввода редактора запросов формирует предложение InfluxDB SELECT. Например:
SELECT derivative(mean("value"), 10s) / 10 AS "REQ/s"
FROM....
В инструкции SELECT также можно использовать * для выбора всех полей.
SELECT * FROM <measurement_name>
Результаты GROUP BY
Чтобы сгруппировать результаты по тегу, укажите тег в строке GROUP BY:
- Нажмите значок + в строке GROUP BY.
- Выберите тег в выпадающем списке.
GROUP BY можно выполнять по нескольким вариантам.
Чтобы удалить вариант GROUP BY, нажмите значок X рядом с этим вариантом.
Шаблоны псевдонимов
Вы также можете использовать синтаксис подстановки шаблона [[tag_hostname]].
Например, значение Host: [[tag_hostname]], введённое в поле ALIAS BY, заменяется значением тега hostname для каждого значения легенды.
Пример значения легенды — Host: server1.
Редактор запросов SQL
Grafana поддерживает язык запросов SQL для InfluxDB 3.x и более новых облачных продуктов (Cloud Serverless, Cloud Dedicated, Clustered). SQL — рекомендуемый InfluxData язык запросов для новых развёртываний.
Редактор запросов SQL предоставляет два режима:
- Builder mode — визуальный конструктор запросов, который помогает строить запросы SQL, выбирая таблицы, столбцы, фильтры и агрегации из выпадающих меню. Этот режим полезен для построения запросов без написания SQL напрямую.
- Code mode — текстовый редактор для написания необработанных запросов SQL с автодополнением и подсветкой синтаксиса. Переключайтесь между режимами с помощью переключателя в верхней части редактора запросов.
Запросы SQL подключаются к InfluxDB по протоколу FlightSQL (gRPC), который обеспечивает высокопроизводительную передачу данных для больших наборов результатов.
Формат вывода
Редактор запросов SQL поддерживает два формата вывода:
- Time series (по умолчанию) — возвращает данные в виде временных рядов. Запрос должен содержать столбец с временной меткой.
- Table — возвращает данные в виде таблицы; полезно для запросов, не являющихся временными рядами, или когда нужно отобразить необработанные результаты.
Выберите формат в выпадающем списке Format в редакторе запросов.
Макросы
В запросе можно использовать макросы, которые автоматически подставляются значениями из контекста Grafana.
Примеры запросов SQL
Базовый запрос временного ряда:
SELECT time, usage_system, usage_user
FROM cpu
WHERE $__timeFilter(time)
ORDER BY time
Агрегированный запрос временного ряда с date_bin:
SELECT
$__dateBin(time) AS time,
mean(usage_system) AS avg_system,
mean(usage_user) AS avg_user
FROM cpu
WHERE $__timeFilter(time)
GROUP BY $__dateBin(time)
ORDER BY time
Использование JOIN между таблицами:
SQL поддерживает JOIN, которые недоступны в InfluxQL или Flux:
SELECT
c.time,
c.usage_system,
m.used_percent AS mem_used
FROM cpu c
INNER JOIN mem m ON c.time = m.time AND c.host = m.host
WHERE $__timeFilter(c.time)
ORDER BY c.time
Фильтрация с помощью предложений WHERE:
SELECT $__dateBin(time) AS time, mean(usage_system) AS avg_system
FROM cpu
WHERE $__timeFilter(time)
AND host = 'server01'
AND cpu = 'cpu-total'
GROUP BY $__dateBin(time)
ORDER BY time
Полный список поддерживаемых инструкций, операторов и функций SQL см. в справочной документации по SQL от InfluxData.
Редактор запросов Flux
Grafana поддерживает Flux при работе с InfluxDB v1.8 и выше. Если ваш источник данных настроен для Flux, вы можете использовать в редакторе запросов Flux, который служит текстовым редактором для необработанных запросов Flux с поддержкой макросов.
Дополнительные сведения и данные о подключении см. в разделе InfluxDB 1.8 API compatibility.
Использование макросов
Вы можете вводить макросы в запрос, чтобы они заменялись значениями из контекста Grafana.
Макросы поддерживают копирование и вставку из InfluxData Chronograf.
Например, рассмотрим следующий запрос Flux:
from(bucket: v.defaultBucket)
|> range(start: v.timeRangeStart, stop: v.timeRangeStop)
|> filter(fn: (r) => r["_measurement"] == "cpu" or r["_measurement"] == "swap")
|> filter(fn: (r) => r["_field"] == "usage_system" or r["_field"] == "free")
|> aggregateWindow(every: v.windowPeriod, fn: mean)
|> yield(name: "mean")
Grafana интерполирует этот запрос Flux в следующий и отправляет его в InfluxDB, при этом значения интервала и периода времени меняются в соответствии с активным выделением времени:
from(bucket: "grafana")
|> range(start: 2020-06-11T13:59:07Z, stop: 2020-06-11T14:59:07Z)
|> filter(fn: (r) => r["_measurement"] == "cpu" or r["_measurement"] == "swap")
|> filter(fn: (r) => r["_field"] == "usage_system" or r["_field"] == "free")
|> aggregateWindow(every: 2s, fn: mean)
|> yield(name: "mean")
Чтобы посмотреть интерполированную версию запроса с помощью Query inspector, обратитесь к разделу Panel Inspector.
Журналы запросов
Вы можете запрашивать и отображать данные журналов из InfluxDB в Explore и в панели дашборда Logs panel.
InfluxQL: выберите источник данных InfluxDB в редакторе запросов. В разделе Select measurement field рядом с блоком FROM выберите measurement, содержащий данные журналов, а затем выберите подходящие поля, отображающие сообщение журнала. Добавьте дополнительные фильтры, нажав значок + рядом с полем WHERE. Установите FORMAT AS в Logs.
SQL: напишите запрос SQL, возвращающий столбец с временной меткой и текстовый столбец с сообщением журнала. Установите Format в Table. Например:
SELECT time, message, level, host
FROM syslog
WHERE $__timeFilter(time)
ORDER BY time DESC
Flux: используйте запрос Flux с полем _value, содержащим сообщение журнала.
После того как InfluxDB вернёт результаты, панель журналов отобразит строки журналов вместе с гистограммой. Ось x представляет время, а ось y показывает частоту или количество.
Дальнейшие шаги
- Используйте шаблонные переменные для динамичных дашбордов.
- Настройте аннотации, чтобы накладывать события на графики.
- Создавайте правила оповещений на основе ваших запросов к InfluxDB.