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

Метрики и аналитика

R2 Data Catalog предоставляет метрики, которые позволяют отслеживать запросы Iceberg REST API и задачи обслуживания таблиц (уплотнение и истечение срока действия снимков) во всех ваших хранилищах.

Метрики, отображаемые в панели управления Cloudflare, запрашиваются из GraphQL Analytics API. Вы можете получить доступ к метрикам программно через GraphQL или любой HTTP клиент.

Метрики панели управления

Метрики вкладка на странице сведений о каждом каталоге показывает пять графиков, которые обобщают активность каталога за настраиваемый период времени:

Диаграмма Описание
Байт уплотнено Общий объём байт, записанных заданиями компактификации
Уплотнённые файлы Количество входных файлов, обработанных при уплотнении, и выходных файлов, созданных в результате
Запросы к каталогу Общее количество запросов к Iceberg REST API (например, load-table, list-namespaces, commit-table)
Объём хранилища Текущий размер хранилища бакета
Снимков с истекшим сроком действия Количество снимков, удалённых заданиями по истечению срока действия снимков

На странице обзора также отображаются Запросы к каталогу и Размер бакета столбцы в таблице каталогов, которые дают быстрый обзор по всем вашим каталогам.

Наборы данных GraphQL

Метрики операций с данными

R2 Data Catalog экспортирует указанные ниже метрики через r2CatalogDataOperationsAdaptiveGroups набор данных. Эти метрики отслеживают запросы Iceberg REST API к вашему каталогу, например загрузку таблиц, получение списка пространств имён и подтверждение изменений.

Метрика Имя поля GraphQL Агрегация Описание
Количество запросов count count Общее количество запросов к Iceberg REST API
Байты тела запроса requestBodyBytes sum Общий объём байт, отправленных в телах запросов
Длительность запроса requestDurationMs sum, avg, квантили Длительность запроса в миллисекундах

r2CatalogDataOperationsAdaptiveGroups набор данных предоставляет следующие измерения для фильтрации и группировки запросов:

Метрики обслуживания таблиц

R2 Data Catalog экспортирует указанные ниже метрики через r2CatalogTableMaintenanceAdaptiveGroups набор данных. Эти метрики отслеживают задания по обслуживанию таблиц, включая сжатие и истечение срока действия снимков.

Метрика Имя поля GraphQL Агрегация Описание
Количество заданий count count Общее количество выполненных заданий обслуживания
Обработанные файлы filesProcessed sum Общее количество входных файлов, обработанных заданиями обслуживания
Выходные файлы filesOutput sum Общее количество выходных файлов, созданных заданиями обслуживания
Входные байты inputBytes sum Общий объём байт, прочитанных или просканированных заданиями обслуживания
Исходящие байты outputBytes sum Общий объём байт, записанных заданиями обслуживания
Длительность задания jobDurationMs sum, avg, квантили Длительность задания в миллисекундах

r2CatalogTableMaintenanceAdaptiveGroups набор данных предоставляет следующие измерения для фильтрации и группировки запросов:

Запрос через GraphQL API

Вы можете программно запрашивать аналитику по вашим warehouse R2 Data Catalog через GraphQL Analytics API. Этот API запрашивает те же наборы данных, что и Cloudflare dashboard, и поддерживает GraphQL интроспекция.

Наборы данных GraphQL R2 Data Catalog требуют accountTag фильтр с вашим Cloudflare Account ID.

Измерение операций с данными за период времени

Этот запрос возвращает общее количество запросов к Iceberg REST API и суммарную длительность запросов с группировкой по операциям для конкретного warehouse.

query CatalogDataOperations(
	$accountTag: String!
	$warehouseName: String!
	$datetimeStart: Time!
	$datetimeEnd: Time!
) {
	viewer {
		accounts(filter: { accountTag: $accountTag }) {
			r2CatalogDataOperationsAdaptiveGroups(
				limit: 10000
				filter: {
					warehouseName: $warehouseName
					datetime_geq: $datetimeStart
					datetime_leq: $datetimeEnd
				}
			) {
				count
				dimensions {
					operation
				}
				sum {
					requestBodyBytes
					requestDurationMs
				}
				avg {
					requestDurationMs
				}
			}
		}
	}
}

Измерение процентилей задержки запросов

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

query CatalogLatencyPercentiles(
	$accountTag: String!
	$warehouseName: String!
	$datetimeStart: Time!
	$datetimeEnd: Time!
) {
	viewer {
		accounts(filter: { accountTag: $accountTag }) {
			r2CatalogDataOperationsAdaptiveGroups(
				limit: 10000
				filter: {
					warehouseName: $warehouseName
					datetime_geq: $datetimeStart
					datetime_leq: $datetimeEnd
				}
			) {
				count
				dimensions {
					operation
				}
				quantiles {
					requestDurationMsP50
					requestDurationMsP90
					requestDurationMsP99
				}
			}
		}
	}
}

Запрос метрик задач обслуживания таблиц

Этот запрос возвращает сводку заданий компактификации и истечения срока действия снимков для конкретного warehouse: количество обработанных файлов, объём прочитанных и записанных байт, а также статус выполнения.

query CatalogMaintenanceMetrics(
	$accountTag: String!
	$warehouseName: String!
	$datetimeStart: Time!
	$datetimeEnd: Time!
) {
	viewer {
		accounts(filter: { accountTag: $accountTag }) {
			r2CatalogTableMaintenanceAdaptiveGroups(
				limit: 10000
				filter: {
					warehouseName: $warehouseName
					datetime_geq: $datetimeStart
					datetime_leq: $datetimeEnd
				}
			) {
				count
				dimensions {
					jobType
					tableName
					success
				}
				sum {
					filesProcessed
					filesOutput
					inputBytes
					outputBytes
					jobDurationMs
				}
			}
		}
	}
}

Фильтр по операции или таблице

Вы можете сузить результаты до конкретной операции или таблицы Iceberg. Например, чтобы запросить только load-table операции для конкретной таблицы:

query CatalogFilterByOperation(
	$accountTag: String!
	$datetimeStart: Time!
	$datetimeEnd: Time!
) {
	viewer {
		accounts(filter: { accountTag: $accountTag }) {
			r2CatalogDataOperationsAdaptiveGroups(
				limit: 10000
				filter: {
					warehouseName: "my-warehouse"
					operation: "load-table"
					tableName: "my_table"
					datetime_geq: $datetimeStart
					datetime_leq: $datetimeEnd
				}
			) {
				count
				sum {
					requestDurationMs
				}
			}
		}
	}
}

Чтобы запросить только неудачные задания обслуживания:

query CatalogFailedMaintenanceJobs(
	$accountTag: String!
	$datetimeStart: Time!
	$datetimeEnd: Time!
) {
	viewer {
		accounts(filter: { accountTag: $accountTag }) {
			r2CatalogTableMaintenanceAdaptiveGroups(
				limit: 10000
				filter: {
					warehouseName: "my-warehouse"
					success: 0
					datetime_geq: $datetimeStart
					datetime_leq: $datetimeEnd
				}
			) {
				count
				dimensions {
					jobType
					tableName
				}
			}
		}
	}
}

Запросы по всем хранилищам

Чтобы запросить метрики по всем warehouse аккаунта, опустите warehouseName фильтр и включите warehouseName в измерениях:

query CatalogAllWarehouses(
	$accountTag: String!
	$datetimeStart: Time!
	$datetimeEnd: Time!
) {
	viewer {
		accounts(filter: { accountTag: $accountTag }) {
			r2CatalogDataOperationsAdaptiveGroups(
				limit: 10000
				filter: { datetime_geq: $datetimeStart, datetime_leq: $datetimeEnd }
			) {
				count
				dimensions {
					warehouseName
					operation
				}
				sum {
					requestDurationMs
				}
			}
		}
	}
}