应用 - 网络
网络性能
获取应用的边缘与源站延迟百分位数,并按国家、colo 和路径进行细分。
GET
/
v2
/
apps
/
{app_id}
/
network
/
performance
网络性能
curl --request GET \
--url https://api.squarecloud.app/v2/apps/{app_id}/network/performance \
--header 'Authorization: <authorization>'import requests
url = "https://api.squarecloud.app/v2/apps/{app_id}/network/performance"
headers = {"Authorization": "<authorization>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: '<authorization>'}};
fetch('https://api.squarecloud.app/v2/apps/{app_id}/network/performance', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.squarecloud.app/v2/apps/{app_id}/network/performance",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: <authorization>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.squarecloud.app/v2/apps/{app_id}/network/performance"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "<authorization>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.squarecloud.app/v2/apps/{app_id}/network/performance")
.header("Authorization", "<authorization>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.squarecloud.app/v2/apps/{app_id}/network/performance")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = '<authorization>'
response = http.request(request)
puts response.read_body{
"status": "success",
"response": {
"summary": {
"edge": { "p50": 42, "p95": 180, "p99": 320 },
"origin": { "p50": 28, "p95": 150, "p99": 280 },
"requests": 12450
},
"timeseries": [
{
"date": "2025-12-01T12:00:00.000Z",
"requests": 540,
"edge": { "p50": 41, "p95": 175, "p99": 310 },
"origin": { "p50": 27, "p95": 148, "p99": 270 }
}
],
"countries": [
{ "type": "BR", "p50": 35, "p95": 160, "requests": 8200 },
{ "type": "US", "p50": 55, "p95": 210, "requests": 3100 }
],
"colos": [
{
"type": "GRU",
"city": "São Paulo",
"country": "BR",
"p50": 34,
"p95": 158,
"requests": 8100
}
],
"slowest_paths": [
{
"path": "/api/reports/generate",
"p95": 820,
"p99": 1500,
"requests": 230
}
]
}
}
返回应用在某个时间窗口内的边缘与源站响应时间百分位数(
边缘延迟(
p50、p95、p99),以及按国家、按 colo 和最慢路径的细分。适用于诊断延迟劣化并识别哪些路由或区域最慢。
仅在 Pro 和 Enterprise 套餐可用。缓存未命中速率限制:每个所有者每 60 秒 10 个请求。
edge)衡量的是在 Cloudflare 网络处的首字节时间;源站延迟(origin)衡量的是边缘触达应用后,应用自身响应所花费的时间。如果两者之间的差距在窗口期内不断扩大,通常说明问题出在应用或其所在的集群节点;如果两者同时上升,则说明问题出在客户端与边缘之间的网络状况。
这里衡量的是网络延迟,而不是容器资源使用情况;如需从容器本身采样的 CPU、RAM 和带宽数据,请参见 获取应用指标。在优先安排修复之前,可以结合 网站分析 查看 colos 和 countries,确认一个延迟较高的地区是否同时也是低流量地区。
参数
string
必填
应用的 ID。你可以在应用控制面板的 URL 中找到它。
string
必填
分析窗口的 ISO 8601 起始时间戳。
string
必填
ISO 8601 结束时间戳。必须晚于
start。响应
string
指示调用是否成功。成功时为
success,否则为 error。object
该窗口的延迟百分位数与细分。
显示 切换 response 对象
显示 切换 response 对象
object
array
array
array
{
"status": "success",
"response": {
"summary": {
"edge": { "p50": 42, "p95": 180, "p99": 320 },
"origin": { "p50": 28, "p95": 150, "p99": 280 },
"requests": 12450
},
"timeseries": [
{
"date": "2025-12-01T12:00:00.000Z",
"requests": 540,
"edge": { "p50": 41, "p95": 175, "p99": 310 },
"origin": { "p50": 27, "p95": 148, "p99": 270 }
}
],
"countries": [
{ "type": "BR", "p50": 35, "p95": 160, "requests": 8200 },
{ "type": "US", "p50": 55, "p95": 210, "requests": 3100 }
],
"colos": [
{
"type": "GRU",
"city": "São Paulo",
"country": "BR",
"p50": 34,
"p95": 158,
"requests": 8100
}
],
"slowest_paths": [
{
"path": "/api/reports/generate",
"p95": 820,
"p99": 1500,
"requests": 230
}
]
}
}
常见错误
| 代码 | HTTP | 说明 |
|---|---|---|
INVALID_TIME_RANGE | 400 | start/end 缺失、格式错误,或起止时间顺序颠倒。 |
UPGRADE_REQUIRED | 403 | 性能分析仅在 Pro 和 Enterprise 套餐上可用。 |
UNABLE_TO_FETCH_PERFORMANCE | 500 | 从边缘提供商获取性能数据失败。 |
⌘I
网络性能
curl --request GET \
--url https://api.squarecloud.app/v2/apps/{app_id}/network/performance \
--header 'Authorization: <authorization>'import requests
url = "https://api.squarecloud.app/v2/apps/{app_id}/network/performance"
headers = {"Authorization": "<authorization>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: '<authorization>'}};
fetch('https://api.squarecloud.app/v2/apps/{app_id}/network/performance', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.squarecloud.app/v2/apps/{app_id}/network/performance",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: <authorization>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.squarecloud.app/v2/apps/{app_id}/network/performance"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "<authorization>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.squarecloud.app/v2/apps/{app_id}/network/performance")
.header("Authorization", "<authorization>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.squarecloud.app/v2/apps/{app_id}/network/performance")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = '<authorization>'
response = http.request(request)
puts response.read_body{
"status": "success",
"response": {
"summary": {
"edge": { "p50": 42, "p95": 180, "p99": 320 },
"origin": { "p50": 28, "p95": 150, "p99": 280 },
"requests": 12450
},
"timeseries": [
{
"date": "2025-12-01T12:00:00.000Z",
"requests": 540,
"edge": { "p50": 41, "p95": 175, "p99": 310 },
"origin": { "p50": 27, "p95": 148, "p99": 270 }
}
],
"countries": [
{ "type": "BR", "p50": 35, "p95": 160, "requests": 8200 },
{ "type": "US", "p50": 55, "p95": 210, "requests": 3100 }
],
"colos": [
{
"type": "GRU",
"city": "São Paulo",
"country": "BR",
"p50": 34,
"p95": 158,
"requests": 8100
}
],
"slowest_paths": [
{
"path": "/api/reports/generate",
"p95": 820,
"p99": 1500,
"requests": 230
}
]
}
}

