← Аналитика / analytics / graphql-api / tutorials
Запрос HTTP-событий по имени хоста с помощью GraphQL
Агрегированные метрики HTTP по имени хоста во времени
В этом примере мы используем GraphQL Analytics API, чтобы запросить агрегированные метрики HTTP-событий по имени хоста за определённый период времени.
Следующий вызов API запросит количество посещений и объём ответа в байтах на периферии сети для пользовательского имени хоста hostname.example.com за период в четыре дня. Обязательно замените CLOUDFLARE_ZONE_TAG и API_TOKEN1 на свой ID зоны и учётные данные API, а затем настройте datetime_geq и datetime_leq значения по необходимости.
Вызов API
echo '{ "query":
"query RequestsAndDataTransferByHostname($zoneTag: string, $filter:filter) {
viewer {
zones(filter: {zoneTag: $zoneTag}) {
httpRequestsAdaptiveGroups(limit: 10, filter: $filter) {
sum {
visits
edgeResponseBytes
}
dimensions {
datetimeHour
}
}
}
}
}",
"variables": {
"zoneTag": "<CLOUDFLARE_ZONE_TAG>",
"filter": {
"datetime_geq": "2022-07-20T11:00:00Z",
"datetime_lt": "2022-07-24T12:00:00Z",
"clientRequestHTTPHost": "hostname.example.com",
"requestSource": "eyeball"
}
}
}' | 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 @- | jq .Возвращённые результаты будут в формате JSON (как и было запрошено), поэтому вывод можно перенаправить по конвейеру в jq упростит их чтение, как в следующем примере:
{
"data": {
"viewer": {
"zones": [
{
"httpRequestsAdaptiveGroups": [
{
"dimensions": {
"datetimeHour": "2022-07-21T10:00:00Z"
},
"sum": {
"edgeResponseBytes": 19849385,
"visits": 4383
}
},
{
"dimensions": {
"datetimeHour": "2022-07-21T06:00:00Z"
},
"sum": {
"edgeResponseBytes": 20607204,
"visits": 4375
}
},
{
"dimensions": {
"datetimeHour": "2022-07-26T05:00:00Z"
},
"sum": {
"edgeResponseBytes": 20170839,
"visits": 4519
}
},
{
"dimensions": {
"datetimeHour": "2022-07-23T08:00:00Z"
},
"sum": {
"edgeResponseBytes": 20141860,
"visits": 4448
}
},
{
"dimensions": {
"datetimeHour": "2022-07-25T15:00:00Z"
},
"sum": {
"edgeResponseBytes": 21070367,
"visits": 4469
}
},
{
"dimensions": {
"datetimeHour": "2022-07-28T08:00:00Z"
},
"sum": {
"edgeResponseBytes": 19200774,
"visits": 4345
}
},
{
"dimensions": {
"datetimeHour": "2022-07-26T02:00:00Z"
},
"sum": {
"edgeResponseBytes": 20758067,
"visits": 4502
}
},
{
"dimensions": {
"datetimeHour": "2022-07-20T19:00:00Z"
},
"sum": {
"edgeResponseBytes": 22127811,
"visits": 4443
}
},
{
"dimensions": {
"datetimeHour": "2022-07-27T15:00:00Z"
},
"sum": {
"edgeResponseBytes": 20480644,
"visits": 4268
}
},
{
"dimensions": {
"datetimeHour": "2022-07-27T17:00:00Z"
},
"sum": {
"edgeResponseBytes": 19885704,
"visits": 4287
}
}
]
}
]
}
},
"errors": null
}10 URL-адресов, создающих наибольшую нагрузку в зоне
Чтобы определить URL-адреса с наибольшим потреблением ресурсов, мы используем GraphQL Analytics API и запрашиваем 10 URL-адресов зоны с наибольшей нагрузкой. Ниже приведены инструкции по настройке:
- Чтобы отфильтровать по конкретному имени хоста, добавьте строку
"clientRequestHTTPHost": "'$2'"ниже"requestSource"." - Замените
API_TOKENна сгенерированный вами API-токен с помощьюRead all resourcesразрешения. Скрипт будет обращаться только к зонам, доступным создателю токена. - Передайте ID зоны (
zoneTag) в качестве параметраARG=$1. - Чтобы вычислить текущую дату и дату 30 дней назад, используйте
gdateна Mac:CURRENTDATE=$(gdate -u +'%FT%TZ')OLDDATE=$(gdate -d '-30 days' -u +'%FT%TZ').
- Для конкретных дат за последние 30 дней задайте
CURRENTDATEиOLDDATEпеременные в формате"YYYY-MM-DDTHH:MM:SSZ".
Вызов API
curl --silent \
https://api.cloudflare.com/client/v4/graphql \
--header "Authorization: Bearer <API_TOKEN>" \
--header "Content-Type: application/json" \
--data '{
"query": "{viewer {zones(filter: {zoneTag: $zoneTag}) {topPaths: httpRequestsAdaptiveGroups(filter: $filter, limit: 10, orderBy: [sum_edgeResponseBytes_DESC]) {count sum {edgeResponseBytes} dimensions {metric: clientRequestPath}}}}}",
"variables": {
"zoneTag": "'$ARG'",
"filter": {
"AND": [
{
"datetime_geq": "'$OLDDATE'",
"datetime_leq": "'$CURRENTDATE'"
},
{
"requestSource": "eyeball"
}
]
}
}
}' | jq -r 'try .data.viewer.zones[].topPaths[] | "\"\(.dimensions.metric)\": \(.sum.edgeResponseBytes)"' | sortСноски
-
См. Настройте токен Analytics API , где приведены дополнительные сведения о настройке и разрешениях. ↩