Privacy Proxy は、Cloudflare の GraphQL Analytics API でメトリクスを公開します。すべてのメトリクスは、次の単一エンドポイントでクエリできます。
POST https://api.cloudflare.com/client/v4/graphql始める前に、次のものが必要です。
- API トークン — Account Analytics の読み取り権限を持つトークンを作成します。詳細は、Analytics API トークンのドキュメント Analytics API トークンを設定する を参照してください。
- アカウント ID — Cloudflare のアカウント ID です。クエリでは
accountTagとして渡します。詳細は アカウント ID とゾーン ID を確認する を参照してください。
次の例では、curl で Privacy Proxy メトリクスの日次リクエスト量をクエリします。プレースホルダーは自分の値に置き換えます。
curl https://api.cloudflare.com/client/v4/graphql \
--header "Authorization: Bearer <API_TOKEN>" \
--header "Content-Type: application/json" \
--data '{
"query": "query DailyRequestVolume($accountTag: String!, $startDate: Date!, $endDate: Date!) { viewer { accounts(filter: { accountTag: $accountTag }) { privacyProxyRequestMetricsAdaptiveGroups(filter: { date_geq: $startDate, date_leq: $endDate }, limit: 10000, orderBy: [date_ASC]) { count dimensions { date } } } } }",
"variables": {
"accountTag": "<YOUR_ACCOUNT_TAG>",
"startDate": "2026-04-04",
"endDate": "2026-04-06"
}
}'GraphQL ノードは 4 つあります。いずれも集計データのみを返し、接続単位の生レコードは公開しません。
privacyProxyRequestMetricsAdaptiveGroups— 集計したリクエスト量とエラー率をクエリします。時間、場所、エンドポイント、ステータスコード、プロキシステータスのディメンションでフィルターできます。privacyProxyIngressConnMetricsAdaptiveGroups— クライアントからプロキシへの接続数、転送バイト数、レイテンシのパーセンタイルをクエリします。時間、場所、エンドポイント、トランスポートのディメンションでフィルターできます。privacyProxyEgressConnMetricsAdaptiveGroups— プロキシからオリジンへの接続数、転送バイト数、レイテンシのパーセンタイルをクエリします。時間、場所、エンドポイント、トランスポートのディメンションでフィルターできます。privacyProxyAuthMetricsAdaptiveGroups— 認証試行回数をクエリします。時間、場所、エンドポイント、認証方式、認証結果のディメンションでフィルターできます。
メトリクス
合計フィールド
| フィールド | 型 | 説明 | ノード |
|---|---|---|---|
bytesSentToClient |
uint64 |
プロキシからクライアントへ送信した合計バイト数。 | イングレス接続 |
bytesRecvdFromClient |
uint64 |
プロキシがクライアントから受信した合計バイト数。 | イングレス接続 |
bytesSentToOrigin |
uint64 |
プロキシから上流オリジンへ送信した合計バイト数。 | エグレス接続 |
bytesRecvdFromOrigin |
uint64 |
プロキシが上流オリジンから受信した合計バイト数。 | エグレス接続 |
packetsSentToClient |
uint64 |
プロキシからクライアントへ送信した合計パケット数。 | イングレス接続 |
packetsRecvdFromClient |
uint64 |
プロキシがクライアントから受信した合計パケット数。 | イングレス接続 |
packetsSentToOrigin |
uint64 |
プロキシから上流オリジンへ送信した合計パケット数。 | エグレス接続 |
packetsRecvdFromOrigin |
uint64 |
プロキシが上流オリジンから受信した合計パケット数。 | エグレス接続 |
カウントフィールド
4 つのノードすべてに count フィールドがあり、クエリフィルターに一致するサンプリング済みイベント(リクエスト、接続、または認証試行)の総数を返します。
分位フィールド
| フィールド | 型 | 説明 | ノード |
|---|---|---|---|
durationMsP50 |
float64 |
接続存続時間の中央値(ミリ秒)。 | イングレス接続とエグレス接続 |
durationMsP95 |
float64 |
接続存続時間の 95 パーセンタイル(ミリ秒)。 | イングレス接続とエグレス接続 |
durationMsP99 |
float64 |
接続存続時間の 99 パーセンタイル(ミリ秒)。 | イングレス接続とエグレス接続 |
handshakeDurationUsP50 |
float64 |
TCP+TLS/QUIC ハンドシェイク時間の中央値(マイクロ秒)。 | イングレス接続とエグレス接続 |
handshakeDurationUsP95 |
float64 |
ハンドシェイク時間の 95 パーセンタイル(マイクロ秒)。 | イングレス接続とエグレス接続 |
handshakeDurationUsP99 |
float64 |
ハンドシェイク時間の 99 パーセンタイル(マイクロ秒)。 | イングレス接続とエグレス接続 |
connectRequestHandlingDurationUsP50 |
float64 |
CONNECT リクエストの処理時間の中央値(マイクロ秒)。まだ利用できません。 | リクエスト |
connectRequestHandlingDurationUsP95 |
float64 |
CONNECT リクエストの処理時間の 95 パーセンタイル(マイクロ秒)。まだ利用できません。 | リクエスト |
connectRequestHandlingDurationUsP99 |
float64 |
CONNECT リクエストの処理時間の 99 パーセンタイル(マイクロ秒)。まだ利用できません。 | リクエスト |
connectTunnelSetupDurationUsP50 |
float64 |
CONNECT リクエスト受信後にトンネルを確立する時間の中央値(マイクロ秒)。まだ利用できません。 | リクエスト |
connectTunnelSetupDurationUsP95 |
float64 |
トンネルセットアップ時間の 95 パーセンタイル(マイクロ秒)。まだ利用できません。 | リクエスト |
connectTunnelSetupDurationUsP99 |
float64 |
トンネルセットアップ時間の 99 パーセンタイル(マイクロ秒)。まだ利用できません。 | リクエスト |
ディメンション
すべてのノード
| フィールド | 型 | 説明 |
|---|---|---|
date |
Date |
カレンダー日付(日単位)。 |
datetimeMinute |
Time |
分単位に切り捨てたタイムスタンプ。 |
datetimeFiveMinutes |
Time |
5 分間隔に切り捨てたタイムスタンプ。 |
datetimeFifteenMinutes |
Time |
15 分間隔に切り捨てたタイムスタンプ。 |
datetimeHour |
Time |
時間単位に切り捨てたタイムスタンプ。 |
coloCode |
string |
リクエストを処理した Cloudflare データセンター。 |
endpoint |
string |
トラフィックを生成した appId。 |
タイムスタンプのディメンションは、接続またはリクエストの開始ではなく終了を指します。
リクエストノードのみ
| フィールド | 型 | 説明 |
|---|---|---|
statusCode |
uint16 |
プロキシがクライアントに返した HTTP ステータスコード。 |
proxyStatus |
string |
プロキシレベルのエラー分類。プロキシレベルのエラーがなければ null です。取りうる値は プロキシステータスのリファレンス を参照してください。 |
tunnelType |
string |
使用したトンネルプロトコル(connect-tcp、connect-udp、connect-ip)。まだ利用できません。 |
イングレス接続ノードのみ
| フィールド | 型 | 説明 |
|---|---|---|
transport |
string |
クライアントからプロキシへの接続のトランスポートプロトコル(tcp、quic)。 |
tlsVersion |
string |
クライアントからプロキシへの接続でネゴシエートした TLS バージョン。まだ利用できません。 |
エグレス接続ノードのみ
| フィールド | 型 | 説明 |
|---|---|---|
transport |
string |
プロキシからオリジンへの接続のトランスポートプロトコル(tcp、quic)。 |
認証ノードのみ
| フィールド | 型 | 説明 |
|---|---|---|
authMethod |
string |
使用した認証方式(例: Token、Psk)。 |
authResult |
string |
認証結果(success、failure)。 |
引数
4 つのノードは、同じ引数シグネチャを共有します。
filterrequired — データをフィルターします。フィルター内では常にaccountTagが必要です。limitoptional — 返すレコードの最大数です。orderByoptional — 結果の並び順です。
privacyProxyRequestMetricsAdaptiveGroups ノード
リクエスト量の概要
日付範囲における日次リクエスト量の概要を取得します。
query DailyRequestVolume(
$accountTag: String!
$startDate: Date!
$endDate: Date!
) {
viewer {
accounts(filter: { accountTag: $accountTag }) {
privacyProxyRequestMetricsAdaptiveGroups(
filter: {
date_geq: $startDate
date_leq: $endDate
}
limit: 10000
orderBy: [date_ASC]
) {
count
dimensions {
date
}
}
}
}
}{
"accountTag": "<YOUR_ACCOUNT_TAG>",
"startDate": "2026-04-04",
"endDate": "2026-04-06"
}ステータスコードとプロキシステータス別のエラー内訳
発生している HTTP ステータスコードとプロキシレベルのエラーを特定し、障害の原因を絞り込みます。
query ErrorBreakdown(
$accountTag: String!
$start: Time!
$end: Time!
) {
viewer {
accounts(filter: { accountTag: $accountTag }) {
privacyProxyRequestMetricsAdaptiveGroups(
filter: {
datetimeFifteenMinutes_geq: $start
datetimeFifteenMinutes_leq: $end
statusCode_geq: 400
}
limit: 10000
orderBy: [datetimeFifteenMinutes_ASC]
) {
count
dimensions {
datetimeFifteenMinutes
statusCode
proxyStatus
}
}
}
}
}{
"accountTag": "<YOUR_ACCOUNT_TAG>",
"start": "2026-04-04T00:00:00Z",
"end": "2026-04-06T23:59:59Z"
}頻度順の主なプロキシエラー
最も多いプロキシエラータイプを順位付けし、調査の優先度を決めます。
query TopProxyErrors(
$accountTag: String!
$start: Date!
$end: Date!
) {
viewer {
accounts(filter: { accountTag: $accountTag }) {
privacyProxyRequestMetricsAdaptiveGroups(
filter: {
date_geq: $start
date_leq: $end
proxyStatus_neq: ""
}
limit: 10000
orderBy: [count_DESC]
) {
count
dimensions {
proxyStatus
statusCode
}
}
}
}
}{
"accountTag": "<YOUR_ACCOUNT_TAG>",
"start": "2026-04-04",
"end": "2026-04-06"
}トンネルタイプの分布
connect-tcp、connect-udp、connect-ip の割合を時系列で監視し、クライアントの接続方法を把握します。
query TunnelTypeDistribution(
$accountTag: String!
$startDate: Date!
$endDate: Date!
) {
viewer {
accounts(filter: { accountTag: $accountTag }) {
privacyProxyRequestMetricsAdaptiveGroups(
filter: {
date_geq: $startDate
date_leq: $endDate
}
limit: 10000
orderBy: [date_ASC]
) {
count
dimensions {
date
tunnelType
}
}
}
}
}{
"accountTag": "<YOUR_ACCOUNT_TAG>",
"startDate": "2026-04-04",
"endDate": "2026-04-06"
}privacyProxyIngressConnMetricsAdaptiveGroups ノード
接続量とイングレスバイト数の概要
日次のイングレス接続数と転送バイト数の概要を取得します。
query IngressTrafficOverview(
$accountTag: String!
$startDate: Date!
$endDate: Date!
) {
viewer {
accounts(filter: { accountTag: $accountTag }) {
privacyProxyIngressConnMetricsAdaptiveGroups(
filter: {
date_geq: $startDate
date_leq: $endDate
}
limit: 10000
orderBy: [date_ASC]
) {
count
sum {
bytesSentToClient
bytesRecvdFromClient
}
dimensions {
date
}
}
}
}
}{
"accountTag": "<YOUR_ACCOUNT_TAG>",
"startDate": "2026-04-04",
"endDate": "2026-04-06"
}データセンター別の接続存続時間
データセンター間でクライアントからプロキシへの接続存続時間を比較し、長時間接続や停滞した接続があるリージョンを特定します。
query IngressDurationByColo(
$accountTag: String!
$startDate: Date!
$endDate: Date!
) {
viewer {
accounts(filter: { accountTag: $accountTag }) {
privacyProxyIngressConnMetricsAdaptiveGroups(
filter: {
date_geq: $startDate
date_leq: $endDate
}
limit: 10000
orderBy: [quantiles_durationMsP50_DESC]
) {
quantiles {
durationMsP50
durationMsP95
durationMsP99
}
dimensions {
coloCode
}
}
}
}
}{
"accountTag": "<YOUR_ACCOUNT_TAG>",
"startDate": "2026-04-04",
"endDate": "2026-04-06"
}プロトコルと TLS バージョンの分布
クライアントが使うトランスポートプロトコル(QUIC と TCP)と TLS バージョンを把握すると、廃止計画、設定ミスのあるクライアントの検出、トラフィックがセキュリティ要件を満たしているかの確認に役立ちます。
query IngressProtocolDistribution(
$accountTag: String!
$start: Time!
$end: Time!
) {
viewer {
accounts(filter: { accountTag: $accountTag }) {
privacyProxyIngressConnMetricsAdaptiveGroups(
filter: {
datetimeFifteenMinutes_geq: $start
datetimeFifteenMinutes_leq: $end
}
limit: 10000
orderBy: [datetimeFifteenMinutes_ASC]
) {
count
dimensions {
datetimeFifteenMinutes
transport
tlsVersion
}
}
}
}
}{
"accountTag": "<YOUR_ACCOUNT_TAG>",
"start": "2026-04-04T00:00:00Z",
"end": "2026-04-06T23:59:59Z"
}privacyProxyEgressConnMetricsAdaptiveGroups ノード
エグレスバイト数の概要
プロキシと上流オリジン間の日次バイト流量の概要を取得します。
query EgressBytesOverview(
$accountTag: String!
$startDate: Date!
$endDate: Date!
) {
viewer {
accounts(filter: { accountTag: $accountTag }) {
privacyProxyEgressConnMetricsAdaptiveGroups(
filter: {
date_geq: $startDate
date_leq: $endDate
}
limit: 10000
orderBy: [date_ASC]
) {
count
sum {
bytesSentToOrigin
bytesRecvdFromOrigin
}
dimensions {
date
}
}
}
}
}{
"accountTag": "<YOUR_ACCOUNT_TAG>",
"startDate": "2026-04-04",
"endDate": "2026-04-06"
}データセンター別のプロキシからオリジンへのレイテンシ
データセンター間でプロキシからオリジンへのハンドシェイク時間を比較し、オリジン到達性が低下しているリージョンを特定します。
query EgressLatencyByColo(
$accountTag: String!
$startDate: Date!
$endDate: Date!
) {
viewer {
accounts(filter: { accountTag: $accountTag }) {
privacyProxyEgressConnMetricsAdaptiveGroups(
filter: {
date_geq: $startDate
date_leq: $endDate
}
limit: 10000
orderBy: [quantiles_handshakeDurationUsP50_DESC]
) {
quantiles {
handshakeDurationUsP50
handshakeDurationUsP95
handshakeDurationUsP99
}
dimensions {
coloCode
}
}
}
}
}{
"accountTag": "<YOUR_ACCOUNT_TAG>",
"startDate": "2026-04-04",
"endDate": "2026-04-06"
}エグレス性能の推移
特定の時間窓で、プロキシからオリジンへのハンドシェイクレイテンシを細かい粒度で追跡します。
query EgressPerformanceTrend(
$accountTag: String!
$start: Time!
$end: Time!
) {
viewer {
accounts(filter: { accountTag: $accountTag }) {
privacyProxyEgressConnMetricsAdaptiveGroups(
filter: {
datetimeFiveMinutes_geq: $start
datetimeFiveMinutes_leq: $end
}
limit: 10000
orderBy: [datetimeFiveMinutes_ASC]
) {
quantiles {
handshakeDurationUsP50
handshakeDurationUsP95
handshakeDurationUsP99
}
count
dimensions {
datetimeFiveMinutes
}
}
}
}
}{
"accountTag": "<YOUR_ACCOUNT_TAG>",
"start": "2026-04-04T08:00:00Z",
"end": "2026-04-06T14:00:00Z"
}privacyProxyAuthMetricsAdaptiveGroups ノード
方式別の認証量
方式ごとの日次認証量を追跡し、導入状況の把握と異常の検出に使います。
query AuthVolumeByMethod(
$accountTag: String!
$startDate: Date!
$endDate: Date!
) {
viewer {
accounts(filter: { accountTag: $accountTag }) {
privacyProxyAuthMetricsAdaptiveGroups(
filter: {
date_geq: $startDate
date_leq: $endDate
}
limit: 10000
orderBy: [date_ASC]
) {
count
dimensions {
date
authMethod
}
}
}
}
}{
"accountTag": "<YOUR_ACCOUNT_TAG>",
"startDate": "2026-04-04",
"endDate": "2026-04-06"
}認証失敗の急増検出
認証失敗の急増を検出し、どの認証方式が失敗しているかを特定します。
query AuthFailureSpike(
$accountTag: String!
$start: Time!
$end: Time!
) {
viewer {
accounts(filter: { accountTag: $accountTag }) {
privacyProxyAuthMetricsAdaptiveGroups(
filter: {
datetimeMinute_geq: $start
datetimeMinute_leq: $end
authResult: "failure"
}
limit: 10000
orderBy: [datetimeFiveMinutes_ASC]
) {
count
dimensions {
datetimeFiveMinutes
authMethod
}
}
}
}
}{
"accountTag": "<YOUR_ACCOUNT_TAG>",
"start": "2026-04-04T10:00:00Z",
"end": "2026-04-06T14:00:00Z"
}認証成功率
時間ごとの成功数と失敗数を比較し、認証成功率の算出と劣化傾向の把握に使います。
query AuthSuccessRate(
$accountTag: String!
$start: Time!
$end: Time!
) {
viewer {
accounts(filter: { accountTag: $accountTag }) {
privacyProxyAuthMetricsAdaptiveGroups(
filter: {
datetimeHour_geq: $start
datetimeHour_leq: $end
}
limit: 10000
orderBy: [datetimeHour_ASC]
) {
count
dimensions {
datetimeHour
authResult
}
}
}
}
}{
"accountTag": "<YOUR_ACCOUNT_TAG>",
"start": "2026-04-04T00:00:00Z",
"end": "2026-04-06T23:59:59Z"
}- GraphQL Analytics API — はじめに
- GraphQL Analytics API — フィルター
- プロキシステータスのリファレンス — 取りうるすべての
proxyStatus値とその意味。