Перейти к содержанию

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

Dynatrace Query Language (DQL) вводит важные концепции, которые необходимо понять для начала работы.

Запрос DQL — это запрос только для чтения, предназначенный для обработки данных и возврата результатов. Запрос формулируется в виде обычного текста с использованием конвейерной модели потока данных, которую легко читать, создавать и автоматизировать.

Объединение команд с помощью оператора pipe

Запрос DQL содержит одну или несколько команд, каждая из которых возвращает табличный вывод, содержащий записи (строки) и поля (столбцы). Все команды последовательно соединяются символом | (pipe). Данные перетекают из одной команды в следующую. На каждом шаге данные фильтруются или преобразуются, а затем передаются на следующий шаг.

Диаграмма, показывающая, как можно объединять команды в DQL.

После каждой операции DQL возвращает таблицу или набор таблиц с данными. Оператор pipe направляет эти таблицы в следующую операцию, где они подвергаются дальнейшей обработке или преобразованию. Это позволяет легко последовательно наращивать цепочку операций до достижения конечного желаемого результата.

Поскольку передача информации от одного оператора к другому осуществляется последовательно, порядок операторов запроса важен и может влиять как на результаты, так и на производительность.

Лучший способ изучить DQL — начать с нескольких базовых запросов.

Загрузка данных

Команда DQL fetch определяет, какие данные загружать из Dynatrace и, при необходимости, обрабатывать на последующих шагах конвейера обработки.

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

fetch logs


| filter loglevel == "ERROR"


| summarize numErr = count()

Оператор начинается с загрузки (fetch) всех полученных логов. Поскольку на первом этапе не указан временной диапазон запроса, применяется временной диапазон, заданный в пользовательском интерфейсе Dynatrace. Он содержит три команды — fetch, filter и summarize — каждая разделена символом pipe.

Записи логов передаются в команду filter, которая уменьшает количество выходных записей на основе указанного выражения фильтра. Последняя строка возвращает таблицу с одним полем и одной записью, содержащей количество оставшихся строк.

numErr
34

Вы также можете изменить тип данных на events, используя команду fetch с последующим events. Пример запроса показывает суммарное значение поля amount в наборе данных событий.

fetch events


| summarize Total_amount = sum(amount)

Указание временного диапазона

Мы рекомендуем использовать элементы управления пользовательского интерфейса для выбора временного диапазона запроса.

Однако оператор DQL позволяет переопределить выбор в интерфейсе с помощью параметров from или to для указания нужного временного диапазона. Если не указано в приложении или в API, временной диапазон по умолчанию составляет 2 часа.

Этот пример с относительными временными диапазонами запрашивает логи за последние два часа:

fetch logs, from:now() - 2h

Этот пример запрашивает логи за последние 24 часа, исключая последние два часа:

fetch logs, from:now() - 24h, to:now() - 2h

Вы также можете использовать абсолютные временные диапазоны с параметром timeframe:

fetch logs, timeframe:"2021-10-20T00:00:00Z/2021-10-28T12:00:00Z"

Фильтрация по логическому выражению

Сузьте запрашиваемые записи с помощью filter. Используйте операторы == или != для включения или исключения полей с определенными значениями. Функции, такие как endsWith или contains, позволяют включить поля, которые заканчиваются или содержат определенную строку.

fetch logs, from:now() - 2h


| filter loglevel == "SEVERE" or loglevel == "ERROR" and not endsWith(log.source,"audit.log")

Выбор подмножества полей

fetch logs


| fields timestamp, loglevel, log.source, content

Сортировка результатов с помощью sort

По умолчанию команда sort сортирует записи в порядке возрастания. В следующем примере мы сортируем результаты в порядке убывания.

fetch logs


| filter loglevel == "SEVERE" or loglevel == "ERROR"


| fields timestamp, loglevel, dt.process.name, host.name, content


| limit 5


| sort timestamp desc

Агрегации

Этот пример подсчитывает количество событий booking.process.started. Намеренно принимаются только рабочие дни и часы (Пн-Пт, с 8:00 до 17:00).

fetch bizevents


| filter event.type=="booking.process.started"


| fieldsAdd hour=formatTimestamp(timestamp,format:"hh"), day_of_week=formatTimestamp(timestamp,format:"EE")


| filterOut (day_of_week  == "Sat" or day_of_week == "Sun") or (toLong(hour) <= 08 or toLong(hour) >= 17)


| summarize numStarts = count(), by:{product}

Агрегации по времени

DQL предоставляет специализированные команды, такие как makeTimeseries, для агрегации списка необработанных записей событий в отображаемый временной ряд. Рассмотрим логи, сгруппированные по уровню лога с 5-минутным интервалом агрегации:

fetch logs


| filter loglevel == "SEVERE" or loglevel == "ERROR"


| makeTimeseries count = count(), by:loglevel, interval:5m

Приложение Learn DQL

Вы можете изучить DQL на практике с помощью интерактивных руководств в приложении Learn DQL. Вы можете использовать это приложение, если вы являетесь клиентом с доступом к среде Dynatrace Dynatrace или зарегистрированным участником Dynatrace Community. Вы также можете зарегистрироваться для получения бесплатной 15-дневной пробной версии, чтобы попробовать приложение. Чтобы узнать больше о приложении Learn DQL, посетите Dynatrace Hub. Для доступа к приложению перейдите на Discover Dynatrace.

Связанные темы

  • Dynatrace Query Language
  • Сравнение DQL с SQL и другими языками
  • Справочник по языку DQL
  • Команды DQL
  • Функции DQL
  • Операторы DQL
  • Типы данных DQL
  • Лучшие практики DQL