跳转到内容
搜索文档

Zone Analytics 到 GraphQL Analytics

最后更新 查看 MarkdownAgent 设置

Zone Analytics API 允许你按 zone 获取请求数据。它提供可选的 sinceuntil 参数来指定请求时间段,以及 continuous 参数来指示是否应将时间段向后移动以找到具有完全聚合数据的时段。

例如,以下是获取两分钟时段数据的示例 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
			}
		}
	}
}

从响应可以看出,Zone Analytics 会沿许多维度返回指标,且无法控制接收哪些字段。使用 GraphQL Analytics,你可以只请求需要的数据。不过,若希望获得与 Zone Analytics 完全相同的指标和维度,可以使用如下查询:

query ZoneAnalyticsMigrationSample($zoneTag: string, $start: Time, $end: Time) {
	viewer {
		zones(filter: { zoneTag: $zoneTag }) {
			httpRequests1mGroups(
				orderBy: [datetimeFiveMinutes_ASC]
				limit: 100
				filter: { datetime_geq: $start, datetime_lt: $end }
			) {
				dimensions {
					datetimeFiveMinutes
				}
				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": {
								"datetimeFiveMinutes": "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": {
								"datetimeFiveMinutes": "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 Analytics 设计为在数据可用时立即提供。

另外,若希望获取某一时段的总计,而不是按时间段细分,只需移除 dimensions 下的 datetimeFiveMinutes 字段即可。

这篇文档对您有帮助吗?