Оптимизация DQL
Лучшие практики оптимизации DQL-запросов для пользовательских оповещений Anomaly Detection.
Минимизация объёма сканируемых данных¶
Оптимизируйте все DQL-запросы для улучшения производительности и возможности настроить больше оповещений.
Правильное управление хранилищем¶
Организуйте бакеты Grail по паттернам использования команд для предотвращения избыточного сканирования.
Правила оптимизации через фильтры DQL¶
Правило 1: Всегда используйте фильтр bucket¶
Направляет Grail на конкретные хранилища вместо сканирования всего.
fetch logs,bucket:{"bucketname"}
fetch spans, bucket:{"bucketname"}
fetch events, bucket:{"bucketname"}
Определить бакет-источник:
Правило 2: Фильтруйте как можно раньше¶
Исключайте нерелевантные данные сразу после fetch для минимизации обработки.
Правило 3: Эффективное сопоставление строк¶
Сравнение для известных значений (наиболее эффективно):
Сопоставление на основе токенов -- Grail разбивает текст на токены. matchesPhrase() использует токенное сопоставление и эффективнее contains():
Оператор ~ -- аналог matchesPhrase() для вложенных записей и массивов:
Советы по поиску в записях: Указывайте поле для фильтрации. Приоритет:
1. Пары ключ-значение: | filter http.response==504 and status=="ERROR"
2. Поиск по полю: | filter message~"504"
3. matchesPhrase: | filter matchesPhrase(message,"504")
Частичное сопоставление (startsWith, contains) -- менее эффективно, используйте совместно с:
* Фильтром по бакету
* Фильтрами по ресурсам (dt.entity.<field> == "name")
* Хотя бы одним токенным фильтром
Связанные темы¶
- Приложение Anomaly Detection
- Dynatrace Query Language
- Руководство по написанию DQL для обнаружения аномалий