Magic Transit は、ネットワーク間接続 全体の健全性を判断するためにエンドポイントヘルスチェックを使います。プローブは顧客ネットワークの名前空間の外側にある Cloudflare インフラから始まり、トンネル終端のボーダールーターより内側の、ネットワーク深部の IP アドレスを対象にします。こうした「長距離」プローブは診断専用です。
ヘルスチェックで監視するエンドポイント IP アドレスを選ぶときは、次の指針を使います。
- Cloudflare が広報するプレフィックスごとに、IP アドレスを 1 つ指定します。
- 同じ ISP(インターネットサービスプロバイダー)とインフラを通る冗長 IP は必須ではありませんが、トラブルシューティング時に役立ちます。
Cloudflare は、公開されている Cloudflare IP 範囲 ↗ 内からヘルスチェック用 IP へ ping します。この範囲は Cloudflare API でも確認できます。
IP プレフィックスのエンドポイントヘルスチェックを設定するときは、その IP プレフィックスの範囲内の IP アドレスを選びます。エンドポイントヘルスチェック構成の例は次の表を参照してください。
| プレフィックス | エンドポイント IP アドレス |
|---|---|
103.21.244.0/24 |
103.21.244.100 |
103.21.245.0/24 |
103.21.245.100 |
詳細は トンネルヘルスチェック を参照してください。
エンドポイントヘルスチェックは Cloudflare API でのみ設定できます。ダッシュボードでは利用できません。現時点では、ヘルスチェックの設定はベータ機能です。
エンドポイントヘルスチェックの作成、一覧表示、削除の方法は API ドキュメント を参照してください。次の例は、新しいエンドポイントヘルスチェックを作成します。
curl "https://api.cloudflare.com/client/v4/accounts/account_id/diagnostics/endpoint-healthchecks" \
--request POST \
--json '{
"check_type": "icmp",
"endpoint": "8.31.160.1",
"name": "Datacenter 1 - primary"
}'{
"result": {
"id": "<HEALTH_CHECK_ID>",
"check_type": "icmp",
"endpoint": "8.31.160.1",
"name": "Datacenter 1 - primary"
},
"success": true,
"errors": [],
"messages": []
}アカウントのエンドポイント ヘルスチェック結果を照会するには、GraphQL Analytics API を使います。magicEndpointHealthCheckAdaptiveGroups データセットは、指定したディメンションと時間間隔で集計したプローブ結果を返します。
GraphQL クエリはすべて、HTTP POST リクエストとして https://api.cloudflare.com/client/v4/graphql に送信します。
エンドポイント ヘルスチェックのデータを照会するには、次のものが必要です。
- アカウント ID
Account > Account Analytics > Read権限を持つ API トークン。詳細は Analytics API トークンの設定 を参照してください。
filter オブジェクトでよく使うパラメーターは次のとおりです。
| パラメーター | 説明 |
|---|---|
date_geq |
クエリの開始日です。YYYY-MM-DD 形式(例: 2026-01-01)です。日付ベースの切り捨てディメンションと一緒に使うと、この日以降の結果を返します。ISO 8601 の完全なタイムスタンプ(例: 2026-01-01T00:00:00Z)も使えます。 |
date_leq |
(任意) クエリの終了日です。形式は date_geq と同じです。 |
datetime_geq |
(任意) ISO 8601 形式の開始タイムスタンプです(例: 2026-01-01T00:00:00Z)。時間ベースの切り捨てディメンションでは、date_geq の代わりに使います。 |
datetime_leq |
(任意) ISO 8601 形式の終了タイムスタンプです。 |
limit |
返す結果グループの最大数です。 |
利用できるディメンション の表に載っているディメンションでもフィルタできます。ディメンション名に演算子のサフィックスを付けるとフィルタになります。たとえば、endpoint_in はエンドポイントのリストで絞り込み、checkType_neq は特定のチェック種別を除外します。サフィックスなしのディメンション名は等価フィルタです。対応する演算子の一覧は Filtering を参照してください。
dimensions フィールドでは、次のディメンションを照会できます。
| ディメンション | 説明 |
|---|---|
checkId |
設定したヘルスチェックの一意の ID です。 |
checkType |
ヘルスチェックの種別です(例: icmp)。 |
endpoint |
チェック対象エンドポイントの IP アドレスです。 |
name |
設定時にヘルスチェックへ付けた名前です(未設定の場合は空になることがあります)。 |
date |
日単位に切り捨てたイベントのタイムスタンプです。 |
datetime |
イベントの完全なタイムスタンプです。 |
datetimeMinute |
分単位に切り捨てたイベントのタイムスタンプです。 |
datetimeFiveMinutes |
5 分間隔に切り捨てたイベントのタイムスタンプです。 |
datetimeFifteenMinutes |
15 分間隔に切り捨てたイベントのタイムスタンプです。 |
datetimeHalfOfHour |
30 分間隔に切り捨てたイベントのタイムスタンプです。 |
datetimeHour |
時間単位に切り捨てたイベントのタイムスタンプです。 |
| メトリクス | 説明 |
|---|---|
count |
グループ内のヘルスチェックイベントの総数です。 |
sum.total |
送信したヘルスチェックプローブの総数です。 |
sum.failures |
失敗したヘルスチェックプローブの数です。 |
avg.lossPercentage |
算出した損失率の平均です(0〜100)。 |
次の例は、特定アカウントのエンドポイント ヘルスチェック結果を照会し、5 分間隔で集計したプローブ数を返します。<ACCOUNT_ID> を アカウント ID に、<API_TOKEN> を API トークン に置き換えてください。
echo '{ "query":
"query GetEndpointHealthCheckResults($accountTag: string, $datetimeStart: string) {
viewer {
accounts(filter: {accountTag: $accountTag}) {
magicEndpointHealthCheckAdaptiveGroups(
filter: {
datetime_geq: $datetimeStart
}
limit: 10
) {
count
dimensions {
checkId
checkType
endpoint
datetimeFiveMinutes
}
sum {
failures
total
}
}
}
}
}",
"variables": {
"accountTag": "<ACCOUNT_ID>",
"datetimeStart": "2026-01-21T00:00:00Z"
}
}' | tr -d '\n' | curl --silent \
https://api.cloudflare.com/client/v4/graphql \
--header "Authorization: Bearer <API_TOKEN>" \
--header "Accept: application/json" \
--header "Content-Type: application/json" \
--data @-JSON レスポンスを読みやすくするには、出力を jq にパイプして整形します。
... | curl --silent \
https://api.cloudflare.com/client/v4/graphql \
--header "Authorization: Bearer <API_TOKEN>" \
--header "Accept: application/json" \
--header "Content-Type: application/json" \
--data @- | jq .{
"data": {
"viewer": {
"accounts": [
{
"magicEndpointHealthCheckAdaptiveGroups": [
{
"count": 288,
"dimensions": {
"checkId": "90b478c7-bb51-4640-b94b-2c3050e9fa00",
"checkType": "icmp",
"datetimeFiveMinutes": "2026-01-21T12:00:00Z",
"endpoint": "103.21.244.100"
},
"sum": {
"failures": 0,
"total": 288
}
},
{
"count": 288,
"dimensions": {
"checkId": "90b478c7-bb51-4640-b94b-2c3050e9fa00",
"checkType": "icmp",
"datetimeFiveMinutes": "2026-01-21T12:05:00Z",
"endpoint": "103.21.244.100"
},
"sum": {
"failures": 2,
"total": 288
}
}
]
}
]
}
},
"errors": null
}このレスポンスでは、sum.total はその間隔中に送信したプローブ数、sum.failures は応答がなかったプローブ数です。failures が 0 なら、その期間中エンドポイントは完全に到達可能だったことを示します。
エンドポイントの健全性が、自分で定義したしきい値を下回ったときに通知を受け取るアラートを設定できます。
- 設定済みのエンドポイントヘルスチェックすべての ID 一覧を取得するため、
GETリクエストを送ります。
curl "https://api.cloudflare.com/client/v4/accounts/account_id/diagnostics/endpoint-healthchecks" \
--request GET{
"result": [
{
"id": "<HEALTH_CHECK_ID>",
"check_type": "icmp",
"endpoint": "8.31.160.1",
"name": "Datacenter 1 - primary"
}
],
"success": true,
"errors": [],
"messages": []
}- アラートを受け取りたいエンドポイントの
id値を控えます。 - Cloudflare ダッシュボードで Notifications ページを開きます。
- Add を選択します。
- ドロップダウンメニューから Magic Transit を選択します。
- Magic Endpoint Health Check Alert を選択します。
- 新しい通知の名前を入力し、必要に応じて説明を入力します。
- Service Level Objective (SLO) のドロップダウンメニューで、通知の SLO しきい値を選びます。SLO は、合格しなければならないエンドポイントヘルスチェックの割合を定義します。合格したエンドポイントヘルスチェックの数が SLO を下回ると、Cloudflare はアラートを生成します。
- High - 99%
- Medium - 98%
- Low - 97%
- SLO の下のドロップダウンメニューで、ステップ 1 の API で取得した
idと一致するid値を選びます。このidは、通知を受け取りたいエンドポイントヘルスチェックと一致している必要があります。 - 希望する通知方法(メールや webhook など)を選びます。
- Save を選択します。
これで、エンドポイントヘルスチェックの SLO が選んだしきい値を下回るたびに、希望する方法で通知を受け取れます。