INTEGRITY Документация

Query Builder

Query Builder помогает составлять структурированные запросы для анализа и визуализации данных телеметрии. Query Builder выполняет поиск по набору данных Workers Observability, который в настоящее время включает все логи, сохраненные Workers Logs.

Query Builder находится в Observability странице панели управления Cloudflare:

Перейдите в Observability ↗

Включите Query Builder

Query Builder доступен всем разработчикам и не требует включения. Запросы выполняют поиск по всем Workers Logs, сохраненным Cloudflare. Если вы еще не включили Workers Logs, сделать это можно, добавив следующую настройку в Файл Wrangler Worker и повторного развёртывания Worker.

{
	"observability": {
		"enabled": true,
		"logs": {
			"invocation_logs": true,
			"head_sampling_rate": 1 // optional. default = 1.
		}
	}
}
[observability]
enabled = true

  [observability.logs]
  invocation_logs = true
  head_sampling_rate = 1

Напишите запрос в Cloudflare dashboard

  1. На панели управления Cloudflare перейдите к разделу Workers & Pages страницу.

    Перейдите в Workers & Pages ↗
  2. Выберите свой Worker.

  3. Выберите Observability в левой панели навигации, а затем Обзор на вкладке.

  4. Выберите Визуализация.

  5. Необязательно: добавьте поля в Filter, Group By, Order By и Limit. Подробнее о том, что формирует запрос.

  6. Необязательно: выберите подходящий временной диапазон.

  7. Выберите Запуск. Запрос будет автоматически выполняться при каждом изменении.

Составление запросов

Визуализация

Query Builder поддерживает множество операторов визуализации, включая:

Функция Аргументы Описание
Количество н/д Общее количество строк, соответствующих условиям запроса
Количество уникальных значений любое поле Количество вхождений уникальных значений в наборе данных
Мин числовое поле Наименьшее значение поля в наборе данных
Макс. числовое поле Наибольшее значение поля в наборе данных
Сумма числовое поле Сумма всех значений поля в наборе данных
Среднее числовое поле Среднее значение поля в наборе данных
Стандартное отклонение числовое поле Стандартное отклонение поля в наборе данных
Дисперсия числовое поле Дисперсия поля в наборе данных
P001 числовое поле Значение поля, ниже которого находится 0.1% данных
P01 числовое поле Значение поля, ниже которого находится 1% данных
P05 числовое поле Значение поля, ниже которого находится 5% данных
P10 числовое поле Значение поля, ниже которого находится 10% данных
P25 числовое поле Значение поля, ниже которого находится 25% данных
Медиана (P50) числовое поле Значение поля, ниже которого находится 50% данных
P75 числовое поле Значение поля, ниже которого находится 75% данных
P90 числовое поле Значение поля, ниже которого находится 90% данных
P95 числовое поле Значение поля, ниже которого находится 95% данных
P99 числовое поле Значение поля, ниже которого находится 99% данных
P999 числовое поле Значение поля, ниже которого находится 99.9% данных

В один запрос можно добавить несколько визуализаций. Каждая визуализация выводит график. Также возвращается единая сводная таблица с необработанными результатами запроса.

Пример отображения Query Builder с несколькими визуализациями

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

Фильтр

Фильтры позволяют получить столбцы, соответствующие заданным условиям. Фильтр состоит из трёх компонентов: ключа, оператора и значения.

В качестве ключа может выступать любое поле события журнала. Например, вы можете выбрать $workers.cpuTimeMs или $metadata.message.

Оператор представляет собой логическое условие, которое принимает значение true или false. Поддерживаемые условия перечислены в таблице ниже:

Тип данных Допустимые условия (операторы)
Числовой Equals, Does not equal, Greater, Greater or equals, Less, Less or equals, Exists, Does not exist
String Equals, Does not equal, Includes, Does not include, Regex, Exists, Does not exist, Starts with

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

Чтобы добавить фильтр:

  1. Выберите + в Фильтр раздел. 2. Выберите Выберите ключ... и ввести имя ключа. Например, $workers.cpuTimeMs. 3. Выберите оператор и измените его на наиболее подходящий. Например, Greater than. 4. Выберите Выберите значение... и введите значение. Например, 100.

Если выполнить запрос с указанным выше фильтром, будут показаны только те события журнала, где $workers.cpuTimeMs > 100 будет возвращён.

При добавлении нескольких фильтров они объединяются оператором AND, поэтому возвращаются только события, соответствующие всем фильтрам.

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

Group By

Group By объединяет строки с одинаковым значением в итоговые строки. Например, если запрос добавляет $workers.event.request.cf.country в качестве поля Group By, тогда сводная таблица будет группироваться по странам.

Order By

Order By влияет на то, как сортируются результаты в сводной таблице. Если asc выбран, результаты сортируются по возрастанию: от меньшего к большему. Если desc выбран, результаты сортируются по убыванию: от большего к меньшему.

Лимит

Limit ограничивает количество возвращаемых результатов. В сочетании с Order By, его можно использовать для возврата «верхних» или «первых» N результатов.

Выберите период времени

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

Просмотр результатов запроса

Для запросов доступны три представления: Visualizations, Invocations и Events.

Вкладка Visualizations

Визуализации вкладка отображает графики и сводную таблицу по запросу.

Обзор визуализации

вкладка Invocations

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

Обзор вызовов

вкладка Events

События вкладка отображает все журналы, отсортированные по времени. Возвращаются только события, соответствующие критериям запроса. Вкладку Events можно настроить, добавив в представление дополнительные поля.

Обзор

Сохранение запросов

Рекомендуется сохранять запросы, которые могут пригодиться для будущих расследований. Чтобы сохранить запрос с именем, описанием и пользовательскими тегами, выберите Save Query. Запросы сохраняются на уровне аккаунта и доступны всем пользователям аккаунта.

Сохранённые запросы можно запустить повторно, выбрав нужный запрос в Запросы вкладка. Вы можете отредактировать запрос и сохранить изменения.

Пользователи могут отмечать запросы звёздочкой. Отмеченные запросы привязаны к конкретному пользователю, а не к учётной записи.

Удалить запросы

Сохранённые запросы можно удалить в Запросы вкладка. Если вы удалите запрос, он будет удален для всех пользователей аккаунта.

  1. На панели управления Cloudflare перейдите к разделу Observability страницу.

    Перейдите в Observability ↗
  2. Выберите Запросы на вкладке.

  3. Справа выберите три точки, чтобы открыть дополнительные действия.

  4. Выберите Удалить запрос и следуйте инструкциям.

Общий доступ к запросам

Сохранённым запросам присваивается уникальный URL, и ими можно поделиться с любым пользователем аккаунта.

Пример: составление запроса

В этом примере мы составим запрос для поиска и отладки всех путей, которые отвечают ошибками 5xx. Сначала создадим базовый запрос. В этом базовом запросе визуализация будет выполняться по количеству необработанных событий. Мы можем добавить фильтр для $workers.event.response.status которое больше 500. Затем группируем по $workers.event.request.path и $workers.event.response.status чтобы определить количество запросов, затронутых этим поведением.

Формирование запроса

Результаты показывают, что /agents/chat/default пути возникали ошибки 404 и 500. Теперь можно применить фильтр для этого пути и разобраться в причине.

Добавление дополнительного поля в запрос

Теперь можно разобраться в ситуации, выбрав Вызовы вкладка. Видно, что эта ошибка была зафиксирована в двух вызовах.

Изучение вкладки Invocations в Query Builder

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

Просмотр логов для одного вызова