Skip to content

非公式本サイトは非公式の日本語ドキュメントであり、Cloudflare 公式サイトではありません。最新情報はdevelopers.cloudflare.comをご確認ください。

メトリクスと分析

最終更新 Markdown で表示Agent セットアップ

Email Service は分析を公開しており、すべてのドメインについてメール送信のパフォーマンスと配信率を確認できます。

Cloudflare ダッシュボード のチャートに表示されるメトリクスは、Cloudflare の GraphQL Analytics API から取得しています。GraphQL または HTTP クライアントから プログラムで メトリクスにアクセスできます。

メトリクス

Email Service が現在公開しているメトリクスは次のとおりです。

データセット GraphQL データセット名 説明
送信(集計) emailSendingAdaptiveGroups ステータス、日付、送信ドメイン、認証結果などのディメンションでグループ化した、メール送信件数の集計です。
送信(イベント) emailSendingAdaptive 送信者、宛先、件名、メッセージ ID、エラー情報など、個別のメール送信イベントの詳細です。
ルーティング(集計) emailRoutingAdaptiveGroups ステータス、日付、受信ドメイン、認証結果などのディメンションでグループ化した、メールルーティング件数の集計です。
ルーティング(イベント) emailRoutingAdaptive 送信者、宛先、件名、メッセージ ID、処理の判断など、個別のメールルーティングイベントの詳細です。

メトリクスは過去 31 日間を対象にクエリでき、同じ期間保持されます。

ダッシュボードでメトリクスを確認する

Email Service のドメイン単位の分析は、Cloudflare ダッシュボードで確認できます。現在および過去のメトリクスを表示する手順は次のとおりです。

  1. Cloudflare ダッシュボード にログインし、アカウントを選択します。
  2. Compute > Email Service に移動し、Email Sending または Email Routing を選択します。
  3. 既存のドメインを選ぶか、アカウント全体のメトリクスを表示します。
  4. Analytics タブを選択します。

必要に応じて、クエリする時間範囲を選べます。デフォルトは直近 24 時間です。

GraphQL API でクエリする

GraphQL Analytics API を使って、Email Service ドメインの分析をプログラムからクエリできます。この API は Cloudflare ダッシュボードと同じデータセットを参照し、GraphQL の イントロスペクション にも対応しています。

GraphQL Analytics API を使い始めるには、ドキュメントに沿って GraphQL Analytics API の認証 を設定します。API トークンには Analytics Read 権限が必要です。

これらは ゾーンレベル のデータセットです。クエリするときは、zoneTag フィルターにゾーン ID(アカウント ID ではありません)を指定します。Email Service の GraphQL データセットは次のとおりです。

  • emailSendingAdaptiveGroups — グループ化できるディメンション付きの、メール送信件数の集計
  • emailSendingAdaptive — 個別のメール送信イベント
  • emailRoutingAdaptiveGroups — グループ化できるディメンション付きの、メールルーティング件数の集計
  • emailRoutingAdaptive — 個別のメールルーティングイベント

Email Sending のディメンション

emailSendingAdaptiveGroups データセットは、グループ化とフィルターに次のディメンションを使えます。

ディメンション 説明
date Date 日単位のグループ化
datetime Time イベントの正確なタイムスタンプ
datetimeMinute Time 分単位のグループ化
datetimeFiveMinutes Time 5 分間隔のグループ化
datetimeFifteenMinutes Time 15 分間隔のグループ化
datetimeHour Time 時間単位のグループ化
status string 配信ステータス(例: delivereddeliveryFailed
eventType string メールの起点(incomingforwardreplynewEmail
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 データセットには上記に加え、イベント単位のフィールド fromtosubjectmessageIdsessionIderrorDetail があります。

Email Routing のディメンション

emailRoutingAdaptiveGroups データセットは、グループ化とフィルターに次のディメンションを使えます。

ディメンション 説明
date Date 日単位のグループ化
datetime Time イベントの正確なタイムスタンプ
datetimeMinute Time 分単位のグループ化
datetimeFiveMinutes Time 5 分間隔のグループ化
datetimeFifteenMinutes Time 15 分間隔のグループ化
datetimeHour Time 時間単位のグループ化
status string メールの処理結果
eventType string メールの起点(incomingforwardreplynewEmail
action string ルーティングルールが適用したアクション
ruleMatched string メールが一致したルーティングルールの UUID
arc string ARC 認証結果
dkim string DKIM 認証結果
dmarc string DMARC 認証結果
spf string SPF 認証結果
isSpam uint8 メールがスパムとしてフラグされたかどうか
isNDR uint8 非配信レポートかどうか
isLastEvent uint8 このメールの最後のイベントかどうか

emailRoutingAdaptive データセットには上記に加え、イベント単位のフィールド fromtosubjectmessageIdsessionIderrorDetailruleMatched があります。

次は、Email Service の分析を取得するよくある GraphQL クエリです。これらのクエリは変数 $zoneTag を使います。値には Cloudflare のゾーン ID を指定します。ゾーン ID は、Cloudflare ダッシュボードのドメイン Overview ページで確認できます。

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

メール送信の件数

指定した期間のメール件数を、datestatus(例: delivereddeliveryFailed)でグループ化してクエリします。

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
				}
			}
		}
	}
}

配信失敗の分析

指定した期間の配信失敗の原因を、errorCausesendingDomain でグループ化して調べます。

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
			}
		}
	}
}

メールルーティングの件数

指定した期間にルーティングされたメール件数を、datestatus でグループ化してクエリします。

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
				}
			}
		}
	}
}

ルーティングルールのアクティビティ

どのルーティングルールがメールに一致したかを、ruleMatchedaction でグループ化して確認します。

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
			}
		}
	}
}

次のステップ

役に立ちましたか?