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

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

Email Service предоставляет аналитику, которая позволяет отслеживать производительность отправки и показатели доставки по всем вашим доменам.

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

Метрики

Сейчас Email Service предоставляет следующие метрики:

Набор данных GraphQL Dataset Name Описание
Отправка (агрегированные данные) emailSendingAdaptiveGroups Агрегированное количество отправленных писем с группировкой по таким параметрам, как статус, дата, домен отправки и результаты аутентификации.
Отправка (события) emailSendingAdaptive Отдельные события отправки писем с полной информацией: отправитель, получатель, тема, ID сообщения и сведения об ошибках.
Маршрутизация (агрегированные данные) emailRoutingAdaptiveGroups Агрегированное количество писем маршрутизации с группировкой по таким параметрам, как статус, дата, домен получателя и результаты аутентификации.
Маршрутизация (события) emailRoutingAdaptive Отдельные события маршрутизации писем с полной информацией: отправитель, получатель, тема, ID сообщения и решения по обработке.

Метрики можно запрашивать (и они хранятся) за последние 31 день.

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

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

  1. Войдите в Панель управления Cloudflare ↗ и выберите свой аккаунт.
  2. Перейдите в Вычисления > Служба электронной почты и выберите Email Sending или Email Routing.
  3. Выберите существующий домен или просмотрите общеаккаунтные метрики.
  4. Выберите Аналитика на вкладке.

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

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

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

Чтобы начать использовать GraphQL Analytics API, следуйте документации по настройке Аутентификация для GraphQL Analytics API. Ваш API-токен должен включать Analytics Read разрешение.

Это на уровне зоны наборы данных. Чтобы выполнять к ним запросы, укажите идентификатор зоны (не идентификатор аккаунта) в качестве zoneTag фильтр. Наборы данных GraphQL для Email Service включают:

Измерения Email Sending

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

Измерение Тип Описание
date Дата Группировка по дням
datetime Время Точная метка времени события
datetimeMinute Время Группировка по минутам
datetimeFiveMinutes Время группировка с интервалом 5 минут
datetimeFifteenMinutes Время группировка с интервалом 15 минут
datetimeHour Время Группировка по часам
status string Статус доставки (например, delivered, deliveryFailed)
eventType string Источник письма (incoming, forward, reply, newEmail)
sendingDomain string Домен, используемый для отправки письма
envelopeTo string Адрес конверта получателя
errorCause string Причина ошибки для неудачных отправок
arc string Результат аутентификации ARC
dkim string Результат аутентификации DKIM
dmarc string Результат аутентификации DMARC
spf string Результат аутентификации SPF
isSpam uint8 Было ли письмо помечено как спам
isNDR uint8 Является ли письмо отчётом о недоставке
isLastEvent uint8 Является ли это последним событием для данного письма

emailSendingAdaptive набор данных включает всё перечисленное выше, а также поля для каждого события: from, to, subject, messageId, sessionId, errorDetail.

Измерения Email Routing

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

Измерение Тип Описание
date Дата Группировка по дням
datetime Время Точная метка времени события
datetimeMinute Время Группировка по минутам
datetimeFiveMinutes Время группировка с интервалом 5 минут
datetimeFifteenMinutes Время группировка с интервалом 15 минут
datetimeHour Время Группировка по часам
status string Результат обработки письма
eventType string Источник письма (incoming, forward, reply, newEmail)
action string Действие, применяемое правилом маршрутизации
ruleMatched string UUID правила маршрутизации, которому соответствует письмо
arc string Результат аутентификации ARC
dkim string Результат аутентификации DKIM
dmarc string Результат аутентификации DMARC
spf string Результат аутентификации SPF
isSpam uint8 Было ли письмо помечено как спам
isNDR uint8 Является ли письмо отчётом о недоставке
isLastEvent uint8 Является ли это последним событием для данного письма

emailRoutingAdaptive набор данных включает всё перечисленное выше, а также поля для каждого события: from, to, subject, messageId, sessionId, errorDetail, ruleMatched.

Примеры

Ниже приведены типичные запросы GraphQL, которые можно использовать для получения данных аналитики Email Service. В этих запросах используется переменная $zoneTag, в качестве значения которого нужно указать Zone ID вашей зоны Cloudflare. Найти его можно в панели управления Cloudflare в разделе Обзор страницу.

{
	"zoneTag": "<YOUR_ZONE_ID>",
	"start": "2024-07-15",
	"end": "2024-07-30"
}

Операции отправки писем

Чтобы запросить количество писем за заданный диапазон дат, сгруппированное по date и status (например, delivered, deliveryFailed):

query EmailSendingByStatus($zoneTag: string!, $start: Date!, $end: Date!) {
	viewer {
		zones(filter: { zoneTag: $zoneTag }) {
			emailSendingAdaptiveGroups(
				filter: { date_geq: $start, date_leq: $end }
				limit: 10000
				orderBy: [date_DESC]
			) {
				count
				dimensions {
					date
					status
				}
			}
		}
	}
}

Анализ сбоев доставки

Чтобы изучить причины сбоев доставки за определённый диапазон дат, сгруппированные по errorCause и sendingDomain:

query EmailDeliveryFailures($zoneTag: string!, $start: Date!, $end: Date!) {
	viewer {
		zones(filter: { zoneTag: $zoneTag }) {
			emailSendingAdaptiveGroups(
				filter: { date_geq: $start, date_leq: $end, status: "deliveryFailed" }
				limit: 10000
				orderBy: [date_DESC]
			) {
				count
				dimensions {
					date
					errorCause
					sendingDomain
				}
			}
		}
	}
}

Почасовой объём

Чтобы запросить объём отправленных писем с группировкой по часам и выявить закономерности трафика:

query EmailSendingHourlyVolume($zoneTag: string!, $start: Time!, $end: Time!) {
	viewer {
		zones(filter: { zoneTag: $zoneTag }) {
			emailSendingAdaptiveGroups(
				filter: { datetimeHour_geq: $start, datetimeHour_leq: $end }
				limit: 10000
				orderBy: [datetimeHour_ASC]
			) {
				count
				dimensions {
					datetimeHour
					status
				}
			}
		}
	}
}

Отдельные события электронной почты

Чтобы запросить отдельные события писем для устранения конкретных проблем с доставкой. Здесь используется emailSendingAdaptive набор данных и выполняет фильтрацию по datetime (тип Time):

query RecentEmailEvents($zoneTag: string!, $start: Time!, $end: Time!) {
	viewer {
		zones(filter: { zoneTag: $zoneTag }) {
			emailSendingAdaptive(
				filter: { datetime_geq: $start, datetime_leq: $end }
				limit: 50
				orderBy: [datetime_DESC]
			) {
				datetime
				from
				to
				subject
				status
				eventType
				sendingDomain
				messageId
				errorCause
				errorDetail
				dkim
				dmarc
				spf
				isSpam
			}
		}
	}
}

Операции маршрутизации писем

Чтобы запросить количество маршрутизированных писем за заданный диапазон дат, сгруппированное по date и status:

query EmailRoutingByStatus($zoneTag: string!, $start: Date!, $end: Date!) {
	viewer {
		zones(filter: { zoneTag: $zoneTag }) {
			emailRoutingAdaptiveGroups(
				filter: { date_geq: $start, date_leq: $end }
				limit: 10000
				orderBy: [date_DESC]
			) {
				count
				dimensions {
					date
					status
				}
			}
		}
	}
}

Активность правил маршрутизации

Чтобы увидеть, какие правила маршрутизации соответствуют письмам, сгруппированные по ruleMatched и action:

query EmailRoutingRuleActivity($zoneTag: string!, $start: Date!, $end: Date!) {
	viewer {
		zones(filter: { zoneTag: $zoneTag }) {
			emailRoutingAdaptiveGroups(
				filter: { date_geq: $start, date_leq: $end }
				limit: 10000
				orderBy: [date_DESC]
			) {
				count
				dimensions {
					date
					ruleMatched
					action
				}
			}
		}
	}
}

Отдельные события маршрутизации

Чтобы запросить отдельные события маршрутизации для устранения неполадок:

query RecentRoutingEvents($zoneTag: string!, $start: Time!, $end: Time!) {
	viewer {
		zones(filter: { zoneTag: $zoneTag }) {
			emailRoutingAdaptive(
				filter: { datetime_geq: $start, datetime_leq: $end }
				limit: 50
				orderBy: [datetime_DESC]
			) {
				datetime
				from
				to
				subject
				status
				action
				ruleMatched
				messageId
				errorDetail
				dkim
				dmarc
				spf
				isSpam
			}
		}
	}
}

Следующие шаги