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

GraphQL Analytics API

Privacy Proxy предоставляет метрики через Cloudflare GraphQL Analytics API. Все метрики доступны для запроса через единую конечную точку:

POST https://api.cloudflare.com/client/v4/graphql

Прежде чем начать, вам потребуется:


Отправка запроса

В следующем примере показано, как запросить суточный объем запросов по метрикам Privacy Proxy с помощью curl. Замените значения заполнителей на свои собственные.

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. Все четыре возвращают только агрегированные данные: необработанные записи об отдельных подключениях не предоставляются.

  1. privacyProxyRequestMetricsAdaptiveGroups : запрашивает агрегированный объём запросов и частоту ошибок с фильтрацией по времени, местоположению, конечной точке, коду состояния и статусу прокси.
  2. privacyProxyIngressConnMetricsAdaptiveGroups : запрашивает количество соединений от клиента к прокси, объём переданных байт и процентили задержки с фильтрацией по времени, местоположению, конечной точке и транспорту.
  3. privacyProxyEgressConnMetricsAdaptiveGroups : запрашивает количество соединений от прокси к источнику, объём переданных байт и процентили задержки с фильтрацией по времени, местоположению, конечной точке и транспорту.
  4. privacyProxyAuthMetricsAdaptiveGroups : запрашивает количество попыток аутентификации с фильтрацией по времени, местоположению, конечной точке, методу аутентификации и результату аутентификации.

Схема

Метрики

Суммируемые поля

Поле Тип Описание Node
bytesSentToClient uint64 Всего байт отправлено прокси обратно клиенту. Входящее соединение
bytesRecvdFromClient uint64 Всего байт получено прокси от клиента. Входящее соединение
bytesSentToOrigin uint64 Всего байт отправлено прокси вышестоящему источнику. Исходящее соединение
bytesRecvdFromOrigin uint64 Всего байт получено прокси от вышестоящего источника. Исходящее соединение
packetsSentToClient uint64 Всего пакетов отправлено прокси обратно клиенту. Входящее соединение
packetsRecvdFromClient uint64 Всего пакетов получено прокси от клиента. Входящее соединение
packetsSentToOrigin uint64 Всего пакетов отправлено прокси вышестоящему источнику. Исходящее соединение
packetsRecvdFromOrigin uint64 Всего пакетов получено прокси от вышестоящего источника. Исходящее соединение

Поля счётчиков

Все четыре узла предоставляют count поле, которое возвращает общее количество выбранных событий (запросов, соединений или попыток аутентификации), соответствующих фильтру запроса.

Поля квантилей

Поле Тип Описание Node
durationMsP50 float64 Медианное время жизни соединения, в миллисекундах. Входящее и исходящее соединение
durationMsP95 float64 95-й процентиль времени жизни соединения, в миллисекундах. Входящее и исходящее соединение
durationMsP99 float64 99-й процентиль времени жизни соединения, в миллисекундах. Входящее и исходящее соединение
handshakeDurationUsP50 float64 Медианное время TCP+TLS/QUIC handshake, в микросекундах. Входящее и исходящее соединение
handshakeDurationUsP95 float64 95-й процентиль времени рукопожатия, в микросекундах. Входящее и исходящее соединение
handshakeDurationUsP99 float64 99-й процентиль времени рукопожатия, в микросекундах. Входящее и исходящее соединение
connectRequestHandlingDurationUsP50 float64 Медианное время обработки запроса CONNECT, в микросекундах. Пока недоступно. Запрос
connectRequestHandlingDurationUsP95 float64 95-й процентиль времени обработки запроса CONNECT, в микросекундах. Пока недоступно. Запрос
connectRequestHandlingDurationUsP99 float64 99-й процентиль времени обработки запроса CONNECT, в микросекундах. Пока недоступно. Запрос
connectTunnelSetupDurationUsP50 float64 Медианное время установки туннеля после получения запроса CONNECT, в микросекундах. Пока недоступно. Запрос
connectTunnelSetupDurationUsP95 float64 95-й процентиль времени установки туннеля, в микросекундах. Пока недоступно. Запрос
connectTunnelSetupDurationUsP99 float64 99-й процентиль времени установки туннеля, в микросекундах. Пока недоступно. Запрос

Измерения

Все узлы

Поле Тип Описание
date Date Календарная дата (с точностью до дня).
datetimeMinute Time Метка времени, округленная до минуты.
datetimeFiveMinutes Time Метка времени, округленная до пятиминутных интервалов.
datetimeFifteenMinutes Time Метка времени, округленная до пятнадцатиминутных интервалов.
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).

Аргументы

Все четыре узла используют одинаковую сигнатуру аргументов.


Примеры запросов

узел 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

Обзор объёма исходящего трафика

Общий обзор объёма данных, ежедневно передаваемых между прокси и вышестоящим сервером origin.

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