← Privacy Proxy / privacy-proxy / reference / metrics
GraphQL Analytics API
Privacy Proxy предоставляет метрики через Cloudflare GraphQL Analytics API. Все метрики доступны для запроса через единую конечную точку:
POST https://api.cloudflare.com/client/v4/graphqlПрежде чем начать, вам потребуется:
- API-токен : создайте токен с Account Analytics разрешения на чтение. Дополнительную информацию см. в документации по токенам Analytics API: Настройте токен Analytics API.
- Account ID : идентификатор вашего аккаунта Cloudflare, передаваемый как
accountTagв запросах. Дополнительную информацию см. в Найдите ID аккаунта и зоны.
Отправка запроса
В следующем примере показано, как запросить суточный объем запросов по метрикам 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. Все четыре возвращают только агрегированные данные: необработанные записи об отдельных подключениях не предоставляются.
privacyProxyRequestMetricsAdaptiveGroups: запрашивает агрегированный объём запросов и частоту ошибок с фильтрацией по времени, местоположению, конечной точке, коду состояния и статусу прокси.privacyProxyIngressConnMetricsAdaptiveGroups: запрашивает количество соединений от клиента к прокси, объём переданных байт и процентили задержки с фильтрацией по времени, местоположению, конечной точке и транспорту.privacyProxyEgressConnMetricsAdaptiveGroups: запрашивает количество соединений от прокси к источнику, объём переданных байт и процентили задержки с фильтрацией по времени, местоположению, конечной точке и транспорту.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). |
Аргументы
Все четыре узла используют одинаковую сигнатуру аргументов.
filterобязательно : фильтрует ваши данные.accountTagвсегда обязателен внутри фильтра.limitнеобязательно : Максимальное количество записей для возврата.orderByнеобязательно : порядок сортировки результатов.
Примеры запросов
узел 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"
}Дополнительные материалы
- GraphQL Analytics API: начало работы
- GraphQL Analytics API: фильтрация
- Справочник по статусам прокси : все возможные
proxyStatusзначения и их описание.