ゾーン分析からGraphQL分析へ
ゾーン分析APIを使用すると、ゾーンごとのリクエストデータを取得できます。リクエストの期間を指定するためのオプションのsinceおよびuntilパラメータと、完全に集約されたデータを見つけるために期間を遡るべきかどうかを示すcontinuousパラメータを提供します。
例えば、2分間のデータを取得するためのcurlコールのサンプルは以下の通りです:
curl "https://api.cloudflare.com/client/v4/zones/<ZONE_ID>/analytics/dashboard?since=2019-09-08T20:00:00Z&until=2019-09-08T20:02:00Z&continuous=false" \--header "Authorization: Bearer <API_TOKEN>" --silent | jq .レスポンス
{ "success": true, "query": { "since": "2019-09-08T20:00:00Z", "until": "2019-09-08T20:02:00Z", "time_delta": 1 }, "errors": [], "messages": [], "result": { "timeseries": [ { "since": "2019-09-08T20:00:00Z", "until": "2019-09-08T20:01:00Z", "requests": { "all": 15, "cached": 12, "uncached": 3, "ssl": { "encrypted": 13, "unencrypted": 2 }, "http_status": { "200": 4, "403": 11 }, "content_type": { "html": 12, "png": 3 }, "country": { "CN": 6, "IE": 1, "US": 3, "VN": 5 }, "ip_class": { "monitoringService": 4, "noRecord": 11 }, "ssl_protocol": { "TLSv1.2": 13, "none": 2 } }, "bandwidth": { "all": 312740, "cached": 309930, "uncached": 2810, "ssl": { "encrypted": 309276, "unencrypted": 3464 }, "ssl_protocol": { "TLSv1.2": 13, "none": 2 }, "content_type": { "html": 32150, "png": 280590 }, "country": { "CN": 10797, "IE": 98224, "US": 185176, "VN": 18543 } }, "threats": { "all": 6, "type": { "user.ban.ctry": 6 }, "country": { "CN": 6 } }, "pageviews": { "all": 1, "search_engine": { "pingdom": 1 } }, "uniques": { "all": 11 } }, { "since": "2019-09-08T20:01:00Z", "until": "2019-09-08T20:02:00Z", "requests": { "all": 4, "cached": 1, "uncached": 3, "ssl": { "encrypted": 4, "unencrypted": 0 }, "http_status": { "200": 4 }, "content_type": { "html": 1, "png": 3 }, "country": { "CA": 2, "US": 2 }, "ip_class": { "monitoringService": 4 }, "ssl_protocol": { "TLSv1.2": 4 } }, "bandwidth": { "all": 283399, "cached": 280590, "uncached": 2809, "ssl": { "encrypted": 283399, "unencrypted": 0 }, "ssl_protocol": { "TLSv1.2": 4 }, "content_type": { "html": 2809, "png": 280590 }, "country": { "CA": 101033, "US": 182366 } }, "threats": { "all": 0, "type": {}, "country": {} }, "pageviews": { "all": 1, "search_engine": { "pingdom": 1 } }, "uniques": { "all": 4 } } ], "totals": { "since": "2019-09-08T20:00:00Z", "until": "2019-09-08T20:02:00Z", "requests": { "all": 19, "cached": 13, "uncached": 6, "ssl": { "encrypted": 17, "unencrypted": 2 }, "http_status": { "200": 8, "403": 11 }, "content_type": { "html": 13, "png": 6 }, "country": { "CA": 2, "CN": 6, "IE": 1, "US": 5, "VN": 5 }, "ip_class": { "monitoringService": 8, "noRecord": 11 }, "ssl_protocol": { "TLSv1.2": 17, "none": 2 } }, "bandwidth": { "all": 596139, "cached": 590520, "uncached": 5619, "ssl": { "encrypted": 592675, "unencrypted": 3464 }, "ssl_protocol": { "TLSv1.2": 17, "none": 2 }, "content_type": { "html": 34959, "png": 561180 }, "country": { "CA": 101033, "CN": 10797, "IE": 98224, "US": 367542, "VN": 18543 } }, "threats": { "all": 6, "type": { "user.ban.ctry": 6 }, "country": { "CN": 6 } }, "pageviews": { "all": 2, "search_engine": { "pingdom": 2 } }, "uniques": { "all": 15 } } }}レスポンスからわかるように、ゾーン分析は多くの次元に沿ったメトリクスを返し、受け取る内容を制御するオプションは提供されていません。GraphQL分析では、必要なデータのみを要求できます。ただし、ゾーン分析から得られるのとまったく同じメトリクスと次元を取得したい場合は、以下のクエリを実行します:
{ viewer { zones(filter: {zoneTag: <ZONE_ID>}) { httpRequests1mGroups(orderBy: [datetimeMinute_ASC], limit: 100, filter: {datetime_geq: "2019-09-08T20:00:00Z", datetime_lt: "2019-09-08T20:02:00Z"}) { dimensions { datetimeMinute } sum { browserMap { pageViews uaBrowserFamily } bytes cachedBytes cachedRequests contentTypeMap { bytes requests edgeResponseContentTypeName } clientSSLMap { requests clientSSLProtocol } countryMap { bytes requests threats clientCountryName } encryptedBytes encryptedRequests ipClassMap { requests ipType } pageViews requests responseStatusMap { requests edgeResponseStatus } threats threatPathingMap { requests threatPathingName } } uniq { uniques } } } }}レスポンス
{ "data": { "viewer": { "zones": [ { "httpRequests1mGroups": [ { "dimensions": { "datetimeMinute": "2019-09-08T20:00:00Z" }, "sum": { "browserMap": [ { "pageViews": 1, "uaBrowserFamily": "PingdomBot" } ], "bytes": 312740, "cachedBytes": 309930, "cachedRequests": 12, "clientSSLMap": [ { "clientSSLProtocol": "none", "requests": 2 }, { "clientSSLProtocol": "TLSv1.2", "requests": 13 } ], "contentTypeMap": [ { "bytes": 280590, "edgeResponseContentTypeName": "png", "requests": 3 }, { "bytes": 32150, "edgeResponseContentTypeName": "html", "requests": 12 } ], "countryMap": [ { "bytes": 10797, "clientCountryName": "CN", "requests": 6, "threats": 6 }, { "bytes": 98224, "clientCountryName": "IE", "requests": 1, "threats": 0 }, { "bytes": 185176, "clientCountryName": "US", "requests": 3, "threats": 0 }, { "bytes": 18543, "clientCountryName": "VN", "requests": 5, "threats": 0 } ], "encryptedBytes": 309276, "encryptedRequests": 13, "ipClassMap": [ { "ipType": "monitoringService", "requests": 4 }, { "ipType": "noRecord", "requests": 11 } ], "pageViews": 1, "requests": 15, "responseStatusMap": [ { "edgeResponseStatus": 200, "requests": 4 }, { "edgeResponseStatus": 403, "requests": 11 } ], "threatPathingMap": [ { "requests": 6, "threatPathingName": "user.ban.ctry" } ], "threats": 6 }, "uniq": { "uniques": 11 } }, { "dimensions": { "datetimeMinute": "2019-09-08T20:01:00Z" }, "sum": { "browserMap": [ { "pageViews": 1, "uaBrowserFamily": "PingdomBot" } ], "bytes": 283399, "cachedBytes": 280590, "cachedRequests": 1, "clientSSLMap": [ { "clientSSLProtocol": "TLSv1.2", "requests": 4 } ], "contentTypeMap": [ { "bytes": 280590, "edgeResponseContentTypeName": "png", "requests": 3 }, { "bytes": 2809, "edgeResponseContentTypeName": "html", "requests": 1 } ], "countryMap": [ { "bytes": 101033, "clientCountryName": "CA", "requests": 2, "threats": 0 }, { "bytes": 182366, "clientCountryName": "US", "requests": 2, "threats": 0 } ], "encryptedBytes": 283399, "encryptedRequests": 4, "ipClassMap": [ { "ipType": "monitoringService", "requests": 4 } ], "pageViews": 1, "requests": 4, "responseStatusMap": [ { "edgeResponseStatus": 200, "requests": 4 } ], "threatPathingMap": [], "threats": 0 }, "uniq": { "uniques": 4 } } ] } ] } }, "errors": null}リクエストの期間を指定するには、データセットフィルターを使用できます(フィルタリングを参照)。continuousパラメータはもはや必要ありません。なぜなら、GraphQL分析はデータが利用可能になるとすぐに提供されるように設計されているからです。
また、特定の期間の合計を取得したい場合は、dimensionsの下のdatetimeMinuteフィールドを単に削除すればよいです。