ホスト名によるHTTPイベントのクエリ(GraphQL)
この例では、GraphQL Analytics APIを使用して、特定の期間にわたるホスト名ごとのHTTPイベントに関する集約メトリクスをクエリします。
以下のAPIコールは、カスタムホスト名hostname.example.comに対する訪問数とエッジレスポンスバイト数を4日間の期間でリクエストします。CLOUDFLARE_ZONE_IDおよびAPI_TOKENをあなたのゾーンIDとAPI認証情報に置き換え、必要に応じてdatetime_geqおよびdatetime_leqの値を調整してください。
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_ID>", "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}GraphQL Analytics APIを使用して、ゾーンからの上位10の消費URLをクエリし、リソース使用量が最も高いURLを特定します。以下は設定手順です:
- 特定のホスト名でフィルタリングするには、
"requestSource"の下に"clientRequestHTTPHost": "'$2'"の行を追加します。 API_TOKENをRead all resources権限を使用して生成したAPIトークンに置き換えます。このスクリプトは、トークンの作成者がアクセスできるゾーンのみを取得します。- ゾーンID(
zoneTag)をパラメータARG=$1として渡します。 - 現在の日付と30日前の日付を計算するには、Macで
gdateを使用します:CURRENTDATE=$(gdate -u +'%FT%TZ')OLDDATE=$(gdate -d '-30 days' -u +'%FT%TZ')。
- 過去30日間の特定の日付については、
CURRENTDATEとOLDDATE変数を"YYYY-MM-DDTHH:MM:SSZ"形式で設定します。
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