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

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

Pipelines предоставляет метрики, которые позволяют измерять объём принятых, обработанных и доставленных в приёмники данных.

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

Метрики

Метрики оператора

Pipelines экспортирует указанные ниже метрики в рамках pipelinesOperatorAdaptiveGroups набор данных. Эти метрики отслеживают данные, считанные и обработанные операторами конвейера.

Метрика Имя поля GraphQL Описание
Входящие байты bytesIn Общее количество байт, считанных конвейером (фильтрация по streamId_neq: "" чтобы получать данные, считываемые из streams)
Получено записей recordsIn Общее количество записей, считанных конвейером (фильтрация по streamId_neq: "" чтобы получать данные, считываемые из streams)
Ошибки декодирования decodeErrors Число сообщений, которые не удалось десериализовать по схеме потока

Подробный разбор причин, по которым события были отклонены (включая конкретные типы ошибок, такие как missing_field, type_mismatch, parse_failure, а также null_value), см. Метрики пользовательских ошибок.

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

Метрики приёмника

Pipelines экспортирует указанные ниже метрики в рамках pipelinesSinkAdaptiveGroups набор данных. Эти метрики отслеживают доставку данных в приёмники.

Метрика Имя поля GraphQL Описание
Записанные байты bytesWritten Общее количество байт, записанных в приёмник после сжатия
Записано записей recordsWritten Общее количество записей, записанных в приёмник
Записанные файлы filesWritten Число файлов, записанных в приёмник
Записано групп строк rowGroupsWritten Число записанных групп строк (для файлов Parquet)
Несжатые записанные байты uncompressedBytesWritten Общее количество байт, записанных до сжатия

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

Метрики пользовательских ошибок

Pipelines отслеживает события, которые отбрасываются при обработке из-за ошибок десериализации. Если структурированный поток получает события, не соответствующие заданной схеме, такие события принимаются при приёме, но отбрасываются при обработке. Показатель pipelinesUserErrorsAdaptiveGroups предоставляет информацию об этих отброшенных событиях, показывая, какие события были отброшены и почему. Полную схему этого набора данных можно изучить с помощью GraphQL интроспекция.

Метрика Имя поля GraphQL Описание
Количество count Число событий, не прошедших валидацию

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

Известные типы ошибок

Семейство ошибок Тип ошибки Описание
deserialization missing_field Обязательное поле, определённое в схеме потока, отсутствовало в событии
deserialization type_mismatch Значение поля не соответствует ожидаемому типу в схеме (например, отправлена строка вместо ожидаемого числа)
deserialization parse_failure Событие не удалось разобрать как корректный JSON, либо значение поля не удалось привести к ожидаемому типу
deserialization null_value Обязательное поле присутствовало, но имело значение null

Просмотр метрик и ошибок в панели управления

Аналитика по каждому конвейеру доступна на панели управления Cloudflare. Чтобы посмотреть текущие и исторические метрики конвейера, выполните следующее:

  1. Войдите в Панель управления Cloudflare ↗ и выберите свой аккаунт.
  2. Перейдите в Pipelines > Pipelines.
  3. Выберите конвейер.
  4. Перейдите в Метрики вкладку для просмотра метрик или Ошибки вкладку, чтобы просмотреть отброшенные события.

При необходимости можно выбрать временной интервал для запроса. По умолчанию используются последние 24 часа.

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

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

Для наборов данных Pipelines GraphQL требуется accountTag фильтр с вашим Cloudflare Account ID.

Измерение метрик оператора за период времени

Этот запрос возвращает общее количество байт и записей, прочитанных конвейером из потоков, а также ошибки декодирования, если они есть.

query PipelineOperatorMetrics(
	$accountTag: String!
	$pipelineId: String!
	$datetimeStart: Time!
	$datetimeEnd: Time!
) {
	viewer {
		accounts(filter: { accountTag: $accountTag }) {
			pipelinesOperatorAdaptiveGroups(
				limit: 10000
				filter: {
					pipelineId: $pipelineId
					streamId_neq: ""
					datetime_geq: $datetimeStart
					datetime_leq: $datetimeEnd
				}
			) {
				sum {
					bytesIn
					recordsIn
					decodeErrors
				}
			}
		}
	}
}

Измерение метрик доставки в приёмник

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

query PipelineSinkMetrics(
	$accountTag: String!
	$pipelineId: String!
	$sinkId: String!
	$datetimeStart: Time!
	$datetimeEnd: Time!
) {
	viewer {
		accounts(filter: { accountTag: $accountTag }) {
			pipelinesSinkAdaptiveGroups(
				limit: 10000
				filter: {
					pipelineId: $pipelineId
					sinkId: $sinkId
					datetime_geq: $datetimeStart
					datetime_leq: $datetimeEnd
				}
			) {
				sum {
					bytesWritten
					recordsWritten
					filesWritten
					rowGroupsWritten
					uncompressedBytesWritten
				}
			}
		}
	}
}

Запрос ошибок отброшенных событий

Этот запрос возвращает сводку событий, отклонённых из-за ошибок проверки схемы, сгруппированную по типу ошибки и отсортированную по частоте.

query GetPipelineUserErrors(
	$accountTag: String!
	$pipelineId: String!
	$datetimeStart: Time!
	$datetimeEnd: Time!
) {
	viewer {
		accounts(filter: { accountTag: $accountTag }) {
			pipelinesUserErrorsAdaptiveGroups(
				limit: 100
				filter: {
					pipelineId: $pipelineId
					datetime_geq: $datetimeStart
					datetime_leq: $datetimeEnd
				}
				orderBy: [count_DESC]
			) {
				count
				dimensions {
					date
					errorFamily
					errorType
				}
			}
		}
	}
}

Пример ответа:

{
	"data": {
		"viewer": {
			"accounts": [
				{
					"pipelinesUserErrorsAdaptiveGroups": [
						{
							"count": 679,
							"dimensions": {
								"date": "2026-02-19",
								"errorFamily": "deserialization",
								"errorType": "missing_field"
							}
						},
						{
							"count": 392,
							"dimensions": {
								"date": "2026-02-19",
								"errorFamily": "deserialization",
								"errorType": "type_mismatch"
							}
						},
						{
							"count": 363,
							"dimensions": {
								"date": "2026-02-19",
								"errorFamily": "deserialization",
								"errorType": "parse_failure"
							}
						},
						{
							"count": 44,
							"dimensions": {
								"date": "2026-02-19",
								"errorFamily": "deserialization",
								"errorType": "null_value"
							}
						}
					]
				}
			]
		}
	},
	"errors": null
}

Чтобы отфильтровать по конкретному типу ошибки, добавьте errorType в фильтр:

pipelinesUserErrorsAdaptiveGroups(
	limit: 100
	filter: {
		pipelineId: $pipelineId
		datetime_geq: $datetimeStart
		datetime_leq: $datetimeEnd
		errorType: "type_mismatch"
	}
	orderBy: [count_DESC]
)

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

pipelinesUserErrorsAdaptiveGroups(
	limit: 100
	filter: {
		datetime_geq: $datetimeStart
		datetime_leq: $datetimeEnd
	}
	orderBy: [count_DESC]
) {
	count
	dimensions {
		pipelineId
		errorFamily
		errorType
	}
}