## 报表 (`reports`)

站点与四层转发的实时曲线、排行、用量,节点监控曲线与排行,未配置域名 Top、临时白名单与访问日志;租户只见本租户数据。

鉴权: 用户（部分参数仅管理员） · 文档: https://www-demo.kuxitong.com/zh/docs/api/reports

### GET `/api/v2/reports/access-log-export-quota`

查看今天的访问日志下载额度 · 鉴权: 用户

```sh
curl "https://panel.example.com/api/v2/reports/access-log-export-quota" \
  -H "X-API-Key: $GOCDN_API_KEY"
```

### GET `/api/v2/reports/access-log-exports`

列出访问日志下载申请 · 鉴权: 用户

查询参数:

| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
| `page` | integer |  | 页码,从 1 开始。 默认: 1 |
| `page_size` | integer |  | 每页条数。 默认: 20 |

```sh
curl "https://panel.example.com/api/v2/reports/access-log-exports" \
  -H "X-API-Key: $GOCDN_API_KEY"
```

### POST `/api/v2/reports/access-log-exports`

申请下载访问日志 · 鉴权: 用户（部分参数仅管理员）

查询参数:

| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
| `tenant_id` | integer |  | 仅管理员可用:按租户过滤。租户凭据调用时忽略,只返回本租户数据。 |
| `start` | string | 有 | 起始时间(含),RFC 3339。 |
| `end` | string | 有 | 结束时间(不含),RFC 3339。 |
| `site_ids` | string |  | 只看这些站点:逗号分隔的正整数,去重后至多 200 个(超了 422);超过 200 个站点时改传 group_id / upid / tenant_ids 等筛选条件。与 group_id、upid、tenant_ids 取交集;租户看不到的站点没有数据。 |
| `group_id` | integer |  | 只看该站点分组里的站点(服务端展开成站点集合,与其他范围条件取交集;租户只展开自己的站点)。 |
| `upid` | integer |  | 只看该用户套餐下的站点。 |
| `tenant_ids` | string |  | 仅管理员:只看这些租户,逗号分隔的正整数,去重后至多 200 个(超了 422);租户凭据带它回 403。 |
| `host` | string |  | 按请求 Host 精确过滤(不分大小写)。 |
| `server_port` | integer |  | 按接入端口过滤。 |
| `ip` | string |  | 按客户端地址精确过滤。 |
| `uri` | string |  | 按请求 URI 前缀过滤(须以 / 开头)。 |
| `referer` | string |  | 按来源页(Referer 请求头)精确过滤,区分大小写;给空值(referer=)= 只看没带来源的直接访问。 |
| `http_ver` | string |  | 按 HTTP 协议版本过滤(与响应的 http_ver 同写法)。 可选值: ["1.0","1.1","2","3"] |
| `method` | string |  | 按请求方法过滤(大写,如 GET、POST)。 |
| `status` | integer |  | 按状态码过滤。 |
| `node_id` | integer |  | 按节点过滤。 |
| `cache_status` | string |  | 按缓存状态过滤。 可选值: ["NONE","HIT","MISS","EXPIRED","STALE","UPDATING","REVALIDATED","BYPASS"] |
| `country` | string |  | 按客户端归属国家过滤(ISO 3166-1 两位码,如 CN)。 |
| `prov` | string |  | 按客户端归属省份过滤(GB/T 2260 前两位,如 44)。 |
| `isp` | string |  | 按客户端运营商过滤(telecom、unicom、mobile、cbn、edu、cloud、other)。 |
| `blocked` | boolean |  | true = 只看被拦截的请求(action = block)。 |
| `block_reason` | string |  | 按拦截原因过滤,口径同日志行的 block_reason:region = 地区限制拦截、region_log = 地区限制只记录(未拦)、acl = ACL 拦截、other = 其他防护拦截。 可选值: ["region","region_log","acl","other"] |
| `status_class` | string |  | 按状态码类别过滤:1xx / 2xx / 3xx / 4xx / 5xx;error = 出错(状态码 ≥ 400 且不是被拦截的请求)。与 status 同给时取交集。 可选值: ["1xx","2xx","3xx","4xx","5xx","error"] |
| `slow_ms` | integer |  | 只看慢请求:请求耗时(request_time_ms)大于该毫秒数。 |
| `cache_status_not` | string |  | 排除该缓存状态(cache_status 的取反);facets 的 miss 就是 cache_status_not=HIT。与 cache_status 同给时取交集。 可选值: ["NONE","HIT","MISS","EXPIRED","STALE","UPDATING","REVALIDATED","BYPASS"] |
| `q` | string |  | 包含搜索:状态码(恰为 3 位数字时按状态码相等;1xx~5xx 按类别)、客户端 IP(包含)、URL(包含)、域名(包含,不分大小写)任一命中即算;与其他条件取交集。 |

```sh
curl -X POST "https://panel.example.com/api/v2/reports/access-log-exports" \
  -H "X-API-Key: $GOCDN_API_KEY"
```

### GET `/api/v2/reports/access-log-exports/{id}`

查看访问日志下载申请 · 鉴权: 用户

```sh
curl "https://panel.example.com/api/v2/reports/access-log-exports/{id}" \
  -H "X-API-Key: $GOCDN_API_KEY"
```

### GET `/api/v2/reports/access-log-exports/{id}/file`

下载访问日志文件 · 鉴权: 用户

```sh
curl "https://panel.example.com/api/v2/reports/access-log-exports/{id}/file" \
  -H "X-API-Key: $GOCDN_API_KEY"
```

### GET `/api/v2/reports/access-logs`

列出访问日志 · 鉴权: 用户（部分参数仅管理员）

查询参数:

| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
| `page` | integer |  | 页码,从 1 开始。 默认: 1 |
| `page_size` | integer |  | 每页条数。 默认: 20 |
| `sort` | string |  | 排序字段,逗号分隔,前缀 `-` 表示降序,如 `-created_at,id`。 |
| `tenant_id` | integer |  | 仅管理员可用:按租户过滤。租户凭据调用时忽略,只返回本租户数据。 |
| `start` | string | 有 | 起始时间(含),RFC 3339。 |
| `end` | string | 有 | 结束时间(不含),RFC 3339。 |
| `cursor` | string |  | 时间游标:上一页响应的 next_cursor 原样带回(须同一 sort 与筛选),从那条之后续读;带上时忽略 page。 |
| `site_ids` | string |  | 只看这些站点:逗号分隔的正整数,去重后至多 200 个(超了 422);超过 200 个站点时改传 group_id / upid / tenant_ids 等筛选条件。与 group_id、upid、tenant_ids 取交集;租户看不到的站点没有数据。 |
| `group_id` | integer |  | 只看该站点分组里的站点(服务端展开成站点集合,与其他范围条件取交集;租户只展开自己的站点)。 |
| `upid` | integer |  | 只看该用户套餐下的站点。 |
| `tenant_ids` | string |  | 仅管理员:只看这些租户,逗号分隔的正整数,去重后至多 200 个(超了 422);租户凭据带它回 403。 |
| `host` | string |  | 按请求 Host 精确过滤(不分大小写)。 |
| `server_port` | integer |  | 按接入端口过滤。 |
| `ip` | string |  | 按客户端地址精确过滤。 |
| `uri` | string |  | 按请求 URI 前缀过滤(须以 / 开头)。 |
| `referer` | string |  | 按来源页(Referer 请求头)精确过滤,区分大小写;给空值(referer=)= 只看没带来源的直接访问。 |
| `http_ver` | string |  | 按 HTTP 协议版本过滤(与响应的 http_ver 同写法)。 可选值: ["1.0","1.1","2","3"] |
| `method` | string |  | 按请求方法过滤(大写,如 GET、POST)。 |
| `status` | integer |  | 按状态码过滤。 |
| `node_id` | integer |  | 按节点过滤。 |
| `cache_status` | string |  | 按缓存状态过滤。 可选值: ["NONE","HIT","MISS","EXPIRED","STALE","UPDATING","REVALIDATED","BYPASS"] |
| `country` | string |  | 按客户端归属国家过滤(ISO 3166-1 两位码,如 CN)。 |
| `prov` | string |  | 按客户端归属省份过滤(GB/T 2260 前两位,如 44)。 |
| `isp` | string |  | 按客户端运营商过滤(telecom、unicom、mobile、cbn、edu、cloud、other)。 |
| `blocked` | boolean |  | true = 只看被拦截的请求(action = block)。 |
| `block_reason` | string |  | 按拦截原因过滤,口径同日志行的 block_reason:region = 地区限制拦截、region_log = 地区限制只记录(未拦)、acl = ACL 拦截、other = 其他防护拦截。 可选值: ["region","region_log","acl","other"] |
| `status_class` | string |  | 按状态码类别过滤:1xx / 2xx / 3xx / 4xx / 5xx;error = 出错(状态码 ≥ 400 且不是被拦截的请求)。与 status 同给时取交集。 可选值: ["1xx","2xx","3xx","4xx","5xx","error"] |
| `slow_ms` | integer |  | 只看慢请求:请求耗时(request_time_ms)大于该毫秒数。 |
| `cache_status_not` | string |  | 排除该缓存状态(cache_status 的取反);facets 的 miss 就是 cache_status_not=HIT。与 cache_status 同给时取交集。 可选值: ["NONE","HIT","MISS","EXPIRED","STALE","UPDATING","REVALIDATED","BYPASS"] |
| `q` | string |  | 包含搜索:状态码(恰为 3 位数字时按状态码相等;1xx~5xx 按类别)、客户端 IP(包含)、URL(包含)、域名(包含,不分大小写)任一命中即算;与其他条件取交集。 |
| `facets` | boolean |  | true / 1 = 响应带 facets(快捷筛选各项的条数)。条数在除快捷筛选(status_class、slow_ms、cache_status_not、blocked、block_reason)外的其余条件下统计,不受快捷筛选影响。 |
| `total` | boolean |  | false / 0 = 不统计总条数(响应不带 total,省一次全表计数);缺省 true。 |

```sh
curl "https://panel.example.com/api/v2/reports/access-logs" \
  -H "X-API-Key: $GOCDN_API_KEY"
```

### GET `/api/v2/reports/checkup`

网站体检总览 · 鉴权: 用户（部分参数仅管理员）

查询参数:

| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
| `tenant_id` | integer |  | 仅管理员可用:按租户过滤。租户凭据调用时忽略,只返回本租户数据。 |
| `q` | string |  | 按网站名称或域名搜索(包含匹配)。 |
| `sort` | string |  | 排序:score 按得分升序(最差在前,缺省),name 按名称。 可选值: ["score","name"] |
| `page` | integer |  | 页码,从 1 开始。 默认: 1 |
| `page_size` | integer |  | 每页条数。 默认: 20 |

```sh
curl "https://panel.example.com/api/v2/reports/checkup" \
  -H "X-API-Key: $GOCDN_API_KEY"
```

### GET `/api/v2/reports/checkup/history`

体检历史得分 · 鉴权: 用户（部分参数仅管理员）

查询参数:

| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
| `tenant_id` | integer |  | 仅管理员可用:按租户过滤。租户凭据调用时忽略,只返回本租户数据。 |
| `site_id` | integer |  | 按站点过滤。 |

```sh
curl "https://panel.example.com/api/v2/reports/checkup/history" \
  -H "X-API-Key: $GOCDN_API_KEY"
```

### GET `/api/v2/reports/checkup/ignores`

体检忽略项 · 鉴权: 用户（部分参数仅管理员）

查询参数:

| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
| `tenant_id` | integer |  | 仅管理员可用:按租户过滤。租户凭据调用时忽略,只返回本租户数据。 |
| `site_id` | integer |  | 按站点过滤。 |

```sh
curl "https://panel.example.com/api/v2/reports/checkup/ignores" \
  -H "X-API-Key: $GOCDN_API_KEY"
```

### POST `/api/v2/reports/checkup/ignores/batch`

批量增减体检忽略项 · 鉴权: 用户（部分参数仅管理员）

请求体:

| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
| `keys` | string[] | 有 | 检查项键。 |
| `op` | string | 有 | add 补上 keys(已有的不动);remove 去掉 keys。 可选值: ["add","remove"] |
| `site_ids` | integer[] | 有 | 要处理的网站,最多 500 个。 |

```sh
curl -X POST "https://panel.example.com/api/v2/reports/checkup/ignores/batch" \
  -H "X-API-Key: $GOCDN_API_KEY"
```

### GET `/api/v2/reports/checkup/issues`

体检问题汇总 · 鉴权: 用户（部分参数仅管理员）

查询参数:

| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
| `tenant_id` | integer |  | 仅管理员可用:按租户过滤。租户凭据调用时忽略,只返回本租户数据。 |
| `q` | string |  | 按网站名称或域名搜索(包含匹配),汇总只算匹配的网站。 |

```sh
curl "https://panel.example.com/api/v2/reports/checkup/issues" \
  -H "X-API-Key: $GOCDN_API_KEY"
```

### GET `/api/v2/reports/checkup/issues/{key}/sites`

受某类体检问题影响的网站 · 鉴权: 用户（部分参数仅管理员）

查询参数:

| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
| `tenant_id` | integer |  | 仅管理员可用:按租户过滤。租户凭据调用时忽略,只返回本租户数据。 |
| `q` | string |  | 按网站名称或域名搜索(包含匹配)。 |
| `sort` | string |  | 排序:score 体检得分从低到高(缺省);attacks 近 7 天攻击数从多到少(WAF 类与 CC 默认档的问题带这个数,其余检查项都按 0,同数再按得分)。 可选值: ["score","attacks"] |
| `type` | string |  | 只用于 rec_type:按网站类型筛选;undecided 是判不出类型的网站(体检只给了说明、不算问题,只能在这里列出)。key 不是 rec_type 时给了 422。 可选值: ["corporate","shop","content","api","admin","download","undecided"] |
| `page` | integer |  | 页码,从 1 开始。 默认: 1 |
| `page_size` | integer |  | 每页条数。 默认: 20 |

```sh
curl "https://panel.example.com/api/v2/reports/checkup/issues/{key}/sites" \
  -H "X-API-Key: $GOCDN_API_KEY"
```

### POST `/api/v2/reports/checkup/recheck`

重新体检 · 鉴权: 用户（部分参数仅管理员）

请求体:

| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
| `site_ids` | integer[] |  | 要处理的网站,最多 500 个。 |

```sh
curl -X POST "https://panel.example.com/api/v2/reports/checkup/recheck" \
  -H "X-API-Key: $GOCDN_API_KEY"
```

### GET `/api/v2/reports/checkup/runs/active`

进行中的体检批次 · 鉴权: 用户（部分参数仅管理员）

查询参数:

| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
| `tenant_id` | integer |  | 仅管理员可用:按租户过滤。租户凭据调用时忽略,只返回本租户数据。 |

```sh
curl "https://panel.example.com/api/v2/reports/checkup/runs/active" \
  -H "X-API-Key: $GOCDN_API_KEY"
```

### GET `/api/v2/reports/checkup/runs/{id}`

体检批次进度 · 鉴权: 用户（部分参数仅管理员）

```sh
curl "https://panel.example.com/api/v2/reports/checkup/runs/{id}" \
  -H "X-API-Key: $GOCDN_API_KEY"
```

### GET `/api/v2/reports/checkup/settings`

读体检设置 · 鉴权: 用户（部分参数仅管理员）

```sh
curl "https://panel.example.com/api/v2/reports/checkup/settings" \
  -H "X-API-Key: $GOCDN_API_KEY"
```

### PUT `/api/v2/reports/checkup/settings`

保存体检设置 · 鉴权: 用户（部分参数仅管理员）

请求体:

| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
| `frequency` | string | 有 | 检查频率:每天 03:00、每周一 03:00、仅手动。 可选值: ["daily","weekly","manual"] |
| `notify_critical` | boolean | 有 | 出现严重问题时告警(用告警设置里的渠道)。 |

```sh
curl -X PUT "https://panel.example.com/api/v2/reports/checkup/settings" \
  -H "X-API-Key: $GOCDN_API_KEY"
```

### GET `/api/v2/reports/checkup/sites/{id}`

网站体检报告 · 鉴权: 用户（部分参数仅管理员）

```sh
curl "https://panel.example.com/api/v2/reports/checkup/sites/{id}" \
  -H "X-API-Key: $GOCDN_API_KEY"
```

### PUT `/api/v2/reports/checkup/sites/{id}/app`

改写网站识别到的程序 · 鉴权: 用户（部分参数仅管理员）

请求体:

| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
| `name` | string |  | 网站名称。 |
| `reset` | boolean |  | true = 撤销人工改写、回到自动识别(此时忽略 name 与 version)。 |
| `version` | string |  | 程序版本;不知道可留空。 |

```sh
curl -X PUT "https://panel.example.com/api/v2/reports/checkup/sites/{id}/app" \
  -H "X-API-Key: $GOCDN_API_KEY"
```

### PUT `/api/v2/reports/checkup/sites/{id}/ignores`

设置网站的体检忽略项 · 鉴权: 用户（部分参数仅管理员）

请求体:

| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
| `keys` | string[] | 有 | 检查项键。 |

```sh
curl -X PUT "https://panel.example.com/api/v2/reports/checkup/sites/{id}/ignores" \
  -H "X-API-Key: $GOCDN_API_KEY"
```

### GET `/api/v2/reports/host-not-found/top`

未配置域名 Top · 鉴权: 仅管理员

查询参数:

| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
| `page` | integer |  | 页码,从 1 开始。 默认: 1 |
| `page_size` | integer |  | 每页条数。 默认: 20 |
| `start` | string | 有 | 起始时间(含),RFC 3339。 |
| `end` | string | 有 | 结束时间(不含),RFC 3339。 |
| `node_id` | integer |  | 只看这个节点上报的。 |
| `domain` | string |  | 按 host 子串过滤(不分大小写,字面匹配)。 |
| `kind` | HostNotFoundKind |  | 只看这一类(类型由主控判定、不在库里:先取次数最高的 500 个域名判定、按类型过滤后再分页,total 为过滤后行数)。 可选值: ["site","pointed_here","not_pointed","typo","scanner","unknown"] |
| `order` | string |  | 按次数排序方向,缺省 desc。 可选值: ["desc","asc"] |

```sh
curl "https://panel.example.com/api/v2/reports/host-not-found/top" \
  -H "X-API-Key: $GOCDN_API_KEY"
```

### GET `/api/v2/reports/ip-seen`

访客 IP 的首次与最近出现 · 鉴权: 用户（部分参数仅管理员）

查询参数:

| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
| `site_ids` | string |  | 只看这些站点:逗号分隔的正整数,去重后至多 200 个(超了 422);超过 200 个站点时改传 group_id / upid / tenant_ids 等筛选条件。与 group_id、upid、tenant_ids 取交集;租户看不到的站点没有数据。 |
| `group_id` | integer |  | 只看该站点分组里的站点(服务端展开成站点集合,与其他范围条件取交集;租户只展开自己的站点)。 |
| `upid` | integer |  | 只看该用户套餐下的站点。 |
| `tenant_ids` | string |  | 仅管理员:只看这些租户,逗号分隔的正整数,去重后至多 200 个(超了 422);租户凭据带它回 403。 |
| `ip` | string | 有 | 要查的客户端地址(IPv4 或 IPv6)。 |

```sh
curl "https://panel.example.com/api/v2/reports/ip-seen" \
  -H "X-API-Key: $GOCDN_API_KEY"
```

### GET `/api/v2/reports/nodes/realtime`

节点实时曲线 · 鉴权: 仅管理员

查询参数:

| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
| `start` | string | 有 | 起始时间(含),RFC 3339。 |
| `end` | string | 有 | 结束时间(不含),RFC 3339。 |
| `node_id` | integer | 有 | 节点。给子 IP 的 id 时取它所属主节点的曲线(指标按主节点采集)。 |
| `metric` | string | 有 | 节点指标(同 node_metrics.metric)。tls_hs_reject 为握手洪水防御拦掉的 TLS 握手数;worker_drain_killed 为被强关(SIGTERM)的排空中旧 nginx worker 数。 可选值: ["nic_in_bps","nic_out_bps","cpu_pct","mem_pct","load1","disk_space_pct","disk_inode_pct","tcp_conn","nginx_active","nginx_reading","nginx_writing","nginx_waiting","log_dropped","tls_hs_reject","worker_drain_killed"] |
| `interval` | string |  | 桶宽;缺省按时间跨度自动取。 可选值: ["1m","2m","5m","10m","30m","1h"] |

```sh
curl "https://panel.example.com/api/v2/reports/nodes/realtime" \
  -H "X-API-Key: $GOCDN_API_KEY"
```

### GET `/api/v2/reports/nodes/realtime-batch`

节点实时曲线(多指标一次取) · 鉴权: 仅管理员

查询参数:

| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
| `start` | string | 有 | 起始时间(含),RFC 3339。 |
| `end` | string | 有 | 结束时间(不含),RFC 3339。 |
| `node_id` | integer | 有 | 节点。给子 IP 的 id 时取它所属主节点的曲线(指标按主节点采集)。 |
| `metrics` | string | 有 | 节点指标列表,逗号分隔。 |
| `interval` | string |  | 桶宽;缺省按时间跨度自动取。 可选值: ["1m","2m","5m","10m","30m","1h"] |

```sh
curl "https://panel.example.com/api/v2/reports/nodes/realtime-batch" \
  -H "X-API-Key: $GOCDN_API_KEY"
```

### GET `/api/v2/reports/nodes/summary`

节点排行总表 · 鉴权: 仅管理员

查询参数:

| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
| `window` | integer |  | 取均值的窗口(分钟),缺省 5。 可选值: [1,5,30,60] |

```sh
curl "https://panel.example.com/api/v2/reports/nodes/summary" \
  -H "X-API-Key: $GOCDN_API_KEY"
```

### GET `/api/v2/reports/nodes/top`

节点排行 · 鉴权: 仅管理员

查询参数:

| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
| `start` | string | 有 | 起始时间(含),RFC 3339。 |
| `end` | string | 有 | 结束时间(不含),RFC 3339。 |
| `metric` | string | 有 | 节点指标(同 node_metrics.metric)。tls_hs_reject 为握手洪水防御拦掉的 TLS 握手数;worker_drain_killed 为被强关(SIGTERM)的排空中旧 nginx worker 数。 可选值: ["nic_in_bps","nic_out_bps","cpu_pct","mem_pct","load1","disk_space_pct","disk_inode_pct","tcp_conn","nginx_active","nginx_reading","nginx_writing","nginx_waiting","log_dropped","tls_hs_reject","worker_drain_killed"] |

```sh
curl "https://panel.example.com/api/v2/reports/nodes/top" \
  -H "X-API-Key: $GOCDN_API_KEY"
```

### GET `/api/v2/reports/nodes/visitor-rtt`

节点访客时延 · 鉴权: 仅管理员

```sh
curl "https://panel.example.com/api/v2/reports/nodes/visitor-rtt" \
  -H "X-API-Key: $GOCDN_API_KEY"
```

### GET `/api/v2/reports/security/overview`

安全总览 · 鉴权: 用户（部分参数仅管理员）

查询参数:

| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
| `start` | string | 有 | 起始时间(含),RFC 3339。 |
| `end` | string | 有 | 结束时间(不含),RFC 3339。 |
| `site_id` | integer |  | 按站点过滤。 |
| `tenant_id` | integer |  | 仅管理员可用:按租户过滤。租户凭据调用时忽略,只返回本租户数据。 |

```sh
curl "https://panel.example.com/api/v2/reports/security/overview" \
  -H "X-API-Key: $GOCDN_API_KEY"
```

### GET `/api/v2/reports/security/screen`

安全大屏聚合 · 鉴权: 用户（部分参数仅管理员）

查询参数:

| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
| `start` | string | 有 | 起始时间(含),RFC 3339。 |
| `end` | string | 有 | 结束时间(不含),RFC 3339。 |
| `site_id` | integer |  | 按站点过滤。 |
| `tenant_id` | integer |  | 仅管理员可用:按租户过滤。租户凭据调用时忽略,只返回本租户数据。 |

```sh
curl "https://panel.example.com/api/v2/reports/security/screen" \
  -H "X-API-Key: $GOCDN_API_KEY"
```

### GET `/api/v2/reports/sites/geo`

访问归属地统计 · 鉴权: 用户（部分参数仅管理员）

查询参数:

| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
| `start` | string | 有 | 起始时间(含),RFC 3339。 |
| `end` | string | 有 | 结束时间(不含),RFC 3339。 |
| `site_ids` | string |  | 只看这些站点:逗号分隔的正整数,去重后至多 200 个(超了 422);超过 200 个站点时改传 group_id / upid / tenant_ids 等筛选条件。与 group_id、upid、tenant_ids 取交集;租户看不到的站点没有数据。 |
| `group_id` | integer |  | 只看该站点分组里的站点(服务端展开成站点集合,与其他范围条件取交集;租户只展开自己的站点)。 |
| `upid` | integer |  | 只看该用户套餐下的站点。 |
| `tenant_ids` | string |  | 仅管理员:只看这些租户,逗号分隔的正整数,去重后至多 200 个(超了 422);租户凭据带它回 403。 |
| `tenant_id` | integer |  | 仅管理员可用:按租户过滤。租户凭据调用时忽略,只返回本租户数据。 |
| `ip` | string |  | 按客户端地址精确过滤。 |

```sh
curl "https://panel.example.com/api/v2/reports/sites/geo" \
  -H "X-API-Key: $GOCDN_API_KEY"
```

### GET `/api/v2/reports/sites/overview`

站点流量概览 · 鉴权: 用户（部分参数仅管理员）

查询参数:

| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
| `start` | string | 有 | 起始时间(含),RFC 3339。 |
| `end` | string | 有 | 结束时间(不含),RFC 3339。 |
| `tenant_id` | integer |  | 仅管理员可用:按租户过滤。租户凭据调用时忽略,只返回本租户数据。 |
| `site_ids` | string |  | 只看这些站点:逗号分隔的正整数,去重后至多 200 个(超了 422);超过 200 个站点时改传 group_id / upid / tenant_ids 等筛选条件。与 group_id、upid、tenant_ids 取交集;租户看不到的站点没有数据。 |
| `group_id` | integer |  | 只看该站点分组里的站点(服务端展开成站点集合,与其他范围条件取交集;租户只展开自己的站点)。 |
| `upid` | integer |  | 只看该用户套餐下的站点。 |
| `tenant_ids` | string |  | 仅管理员:只看这些租户,逗号分隔的正整数,去重后至多 200 个(超了 422);租户凭据带它回 403。 |
| `interval` | string |  | 桶宽;缺省按时间跨度自动取。 可选值: ["1m","2m","5m","10m","30m","1h"] |
| `include_noconfig` | boolean |  | 仅管理员:把未配置流量(site_id = 0)也算上。 |
| `compare` | string |  | prev = 同时返回上一周期同长度的点列与合计(compare 字段);缺省不返回。 可选值: ["prev"] |

```sh
curl "https://panel.example.com/api/v2/reports/sites/overview" \
  -H "X-API-Key: $GOCDN_API_KEY"
```

### GET `/api/v2/reports/sites/protocol-config`

站点协议配置分布 · 鉴权: 用户（部分参数仅管理员）

查询参数:

| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
| `tenant_id` | integer |  | 仅管理员可用:按租户过滤。租户凭据调用时忽略,只返回本租户数据。 |

```sh
curl "https://panel.example.com/api/v2/reports/sites/protocol-config" \
  -H "X-API-Key: $GOCDN_API_KEY"
```

### GET `/api/v2/reports/sites/realtime`

站点实时曲线 · 鉴权: 用户（部分参数仅管理员）

查询参数:

| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
| `start` | string | 有 | 起始时间(含),RFC 3339。 |
| `end` | string | 有 | 结束时间(不含),RFC 3339。 |
| `site_ids` | string |  | 只看这些站点:逗号分隔的正整数,去重后至多 200 个(超了 422);超过 200 个站点时改传 group_id / upid / tenant_ids 等筛选条件。与 group_id、upid、tenant_ids 取交集;租户看不到的站点没有数据。 |
| `group_id` | integer |  | 只看该站点分组里的站点(服务端展开成站点集合,与其他范围条件取交集;租户只展开自己的站点)。 |
| `upid` | integer |  | 只看该用户套餐下的站点。 |
| `tenant_ids` | string |  | 仅管理员:只看这些租户,逗号分隔的正整数,去重后至多 200 个(超了 422);租户凭据带它回 403。 |
| `tenant_id` | integer |  | 仅管理员可用:按租户过滤。租户凭据调用时忽略,只返回本租户数据。 |
| `metric` | string | 有 | 指标。 可选值: ["bandwidth","bandwidth_in","traffic","traffic_in","backend_bandwidth","backend_traffic","req","qps","req_hit_ratio","byte_hit_ratio","status_4xx","status_5xx","backend_resp_time","backend_timeout","blocked","challenged"] |
| `interval` | string |  | 桶宽;缺省按时间跨度自动取。 可选值: ["1m","2m","5m","10m","30m","1h"] |
| `include_noconfig` | boolean |  | 仅管理员:不带站点范围(site_ids / group_id) 时把未配置流量(site_id = 0)也算上。 |

```sh
curl "https://panel.example.com/api/v2/reports/sites/realtime" \
  -H "X-API-Key: $GOCDN_API_KEY"
```

### GET `/api/v2/reports/sites/realtime-batch`

站点实时曲线(多指标一次取) · 鉴权: 用户（部分参数仅管理员）

查询参数:

| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
| `start` | string | 有 | 起始时间(含),RFC 3339。 |
| `end` | string | 有 | 结束时间(不含),RFC 3339。 |
| `site_ids` | string |  | 只看这些站点:逗号分隔的正整数,去重后至多 200 个(超了 422);超过 200 个站点时改传 group_id / upid / tenant_ids 等筛选条件。与 group_id、upid、tenant_ids 取交集;租户看不到的站点没有数据。 |
| `group_id` | integer |  | 只看该站点分组里的站点(服务端展开成站点集合,与其他范围条件取交集;租户只展开自己的站点)。 |
| `upid` | integer |  | 只看该用户套餐下的站点。 |
| `tenant_ids` | string |  | 仅管理员:只看这些租户,逗号分隔的正整数,去重后至多 200 个(超了 422);租户凭据带它回 403。 |
| `tenant_id` | integer |  | 仅管理员可用:按租户过滤。租户凭据调用时忽略,只返回本租户数据。 |
| `metrics` | string | 有 | 指标列表,逗号分隔。 |
| `interval` | string |  | 桶宽;缺省按时间跨度自动取。 可选值: ["1m","2m","5m","10m","30m","1h"] |
| `include_noconfig` | boolean |  | 仅管理员:不带站点范围(site_ids / group_id) 时把未配置流量(site_id = 0)也算上。 |

```sh
curl "https://panel.example.com/api/v2/reports/sites/realtime-batch" \
  -H "X-API-Key: $GOCDN_API_KEY"
```

### GET `/api/v2/reports/sites/top`

站点排行 · 鉴权: 用户（部分参数仅管理员）

查询参数:

| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
| `start` | string | 有 | 起始时间(含),RFC 3339。 |
| `end` | string | 有 | 结束时间(不含),RFC 3339。 |
| `site_ids` | string |  | 只看这些站点:逗号分隔的正整数,去重后至多 200 个(超了 422);超过 200 个站点时改传 group_id / upid / tenant_ids 等筛选条件。与 group_id、upid、tenant_ids 取交集;租户看不到的站点没有数据。 |
| `group_id` | integer |  | 只看该站点分组里的站点(服务端展开成站点集合,与其他范围条件取交集;租户只展开自己的站点)。 |
| `upid` | integer |  | 只看该用户套餐下的站点。 |
| `tenant_ids` | string |  | 仅管理员:只看这些租户,逗号分隔的正整数,去重后至多 200 个(超了 422);租户凭据带它回 403。 |
| `tenant_id` | integer |  | 仅管理员可用:按租户过滤。租户凭据调用时忽略,只返回本租户数据。 |
| `dim` | string |  | 排行维度;与 dims 二选一。 可选值: ["ip","prefix","url","referer","site","status","http_ver","scheme","cache_status","ctype","country","prov","isp","port","block_reason"] |
| `dims` | string |  | 一次取多个维度的前 limit 名,逗号分隔的维度名(取值同 dim,至多 12 个);与 dim 二选一。 |
| `limit` | integer |  | 每个维度取前几名,缺省与上限为系统配置 reports.top_size。 |
| `metric` | string |  | 排序与 value 取哪一项,缺省 count。 可选值: ["count","bytes"] |
| `action` | string |  | 只算该处置动作的请求(pass 放行、challenge 质询、block 拦截)。 可选值: ["pass","challenge","block"] |
| `server_port` | integer |  | 只算该监听端口的请求;prefix 维度不支持(422)。 |

```sh
curl "https://panel.example.com/api/v2/reports/sites/top" \
  -H "X-API-Key: $GOCDN_API_KEY"
```

### GET `/api/v2/reports/streams/realtime`

四层转发实时曲线 · 鉴权: 用户（部分参数仅管理员）

查询参数:

| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
| `start` | string | 有 | 起始时间(含),RFC 3339。 |
| `end` | string | 有 | 结束时间(不含),RFC 3339。 |
| `tenant_id` | integer |  | 仅管理员可用:按租户过滤。租户凭据调用时忽略,只返回本租户数据。 |
| `port` | integer |  | 按四层监听端口过滤。 |
| `metric` | string | 有 | 指标。 可选值: ["bandwidth","bandwidth_in","traffic","traffic_in","req","conn_peak"] |
| `interval` | string |  | 桶宽;缺省按时间跨度自动取。 可选值: ["1m","2m","5m","10m","30m","1h"] |

```sh
curl "https://panel.example.com/api/v2/reports/streams/realtime" \
  -H "X-API-Key: $GOCDN_API_KEY"
```

### GET `/api/v2/reports/streams/top`

四层转发排行 · 鉴权: 用户（部分参数仅管理员）

查询参数:

| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
| `start` | string | 有 | 起始时间(含),RFC 3339。 |
| `end` | string | 有 | 结束时间(不含),RFC 3339。 |
| `tenant_id` | integer |  | 仅管理员可用:按租户过滤。租户凭据调用时忽略,只返回本租户数据。 |
| `dim` | string |  | 排行维度,缺省 port。 可选值: ["port","ip"] |
| `metric` | string |  | 排序与 value 取哪一项,缺省 count。 可选值: ["count","bytes"] |

```sh
curl "https://panel.example.com/api/v2/reports/streams/top" \
  -H "X-API-Key: $GOCDN_API_KEY"
```

### GET `/api/v2/reports/tmp-whitelist`

列出节点临时白名单记录 · 鉴权: 用户（部分参数仅管理员）

查询参数:

| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
| `page` | integer |  | 页码,从 1 开始。 默认: 1 |
| `page_size` | integer |  | 每页条数。 默认: 20 |
| `tenant_id` | integer |  | 仅管理员可用:按租户过滤。租户凭据调用时忽略,只返回本租户数据。 |
| `site_id` | integer |  | 按站点过滤。 |
| `ip` | string |  | 按客户端地址精确过滤(IPv6 为 /64 前缀地址)。 |
| `active` | boolean |  | true = 只看未到期的。 |

```sh
curl "https://panel.example.com/api/v2/reports/tmp-whitelist" \
  -H "X-API-Key: $GOCDN_API_KEY"
```

### GET `/api/v2/reports/usage`

用量曲线 · 鉴权: 用户（部分参数仅管理员）

查询参数:

| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
| `start` | string | 有 | 起始时间(含),RFC 3339。 |
| `end` | string | 有 | 结束时间(不含),RFC 3339。 |
| `site_ids` | string |  | 只看这些站点:逗号分隔的正整数,去重后至多 200 个(超了 422);超过 200 个站点时改传 group_id / upid / tenant_ids 等筛选条件。与 group_id、upid、tenant_ids 取交集;租户看不到的站点没有数据。 |
| `group_id` | integer |  | 只看该站点分组里的站点(服务端展开成站点集合,与其他范围条件取交集;租户只展开自己的站点)。 |
| `upid` | integer |  | 只看该用户套餐下的站点。 |
| `tenant_ids` | string |  | 仅管理员:只看这些租户,逗号分隔的正整数,去重后至多 200 个(超了 422);租户凭据带它回 403。 |
| `tenant_id` | integer |  | 仅管理员可用:按租户过滤。租户凭据调用时忽略,只返回本租户数据。 |
| `kind` | string |  | site(缺省)= 站点;stream = 四层转发。 可选值: ["site","stream"] |
| `metric` | string | 有 | 指标。 可选值: ["bandwidth","traffic","req","qps","req_hit_ratio","status_5xx_ratio","status_4xx_ratio","backend_bandwidth","backend_traffic","backend_resp_time","blocked"] |
| `interval` | string |  | auto(缺省)、5m 或 1h。 可选值: ["auto","5m","1h"] |
| `port` | integer |  | 按四层监听端口过滤。 |
| `include_noconfig` | boolean |  | 仅管理员:不带站点范围(site_ids / group_id) 时把未配置流量(site_id = 0)也算上。 |

```sh
curl "https://panel.example.com/api/v2/reports/usage" \
  -H "X-API-Key: $GOCDN_API_KEY"
```

### GET `/api/v2/reports/waf-events`

列出 WAF 事件 · 鉴权: 用户（部分参数仅管理员）

查询参数:

| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
| `page` | integer |  | 页码,从 1 开始。 默认: 1 |
| `page_size` | integer |  | 每页条数。 默认: 20 |
| `tenant_id` | integer |  | 仅管理员可用:按租户过滤。租户凭据调用时忽略,只返回本租户数据。 |
| `start` | string |  | 起始时间(含),RFC 3339;缺省不限(事件只保留 7 天)。 |
| `end` | string |  | 结束时间(不含),RFC 3339;缺省不限。 |
| `site_id` | integer |  | 按站点过滤。 |
| `ip` | string |  | 按客户端地址过滤:单个 IPv4/IPv6 地址精确匹配,或 CIDR 网段(含 IPv4 映射写法)按地址区间匹配;网段前缀 IPv4 不短于 /8、IPv6 不短于 /32,否则 422。 |
| `url` | string |  | URL 包含(区分大小写的子串,匹配已脱敏的 路径 + 查询串)。 |
| `ja4` | string |  | 按客户端 TLS 指纹 JA4 精确过滤(事件没取到指纹的不匹配)。 |
| `rule_id` | integer |  | 按命中规则号过滤。 |
| `action` | string |  | 按处置过滤:block 拦截、log 只记录、challenge 验证、mask 打码、replace 替换。 可选值: ["block","log","challenge","mask","replace"] |
| `type` | string[] |  | 按事件类型过滤,可重复多选,不给 = 全部。 |
| `country` | string |  | 按国家过滤(节点归属地库给的名称,精确匹配)。 |
| `province` | string |  | 按省份过滤(精确匹配)。 |
| `node_id` | integer |  | 按上报节点过滤;租户看不到节点编号,传了当没传(不报错)。 |
| `observe` | boolean |  | true = 只看观察期(只记录不处置)的事件;false 或不给 = 不按此过滤。 |
| `blocked` | boolean |  | true = 只看拦截模式的拦截(action = block 且非观察);false = 只看其余。 |
| `disposition` | string |  | other = 只看处置不在「已拦截 / 验证 / 仅观察」里的事件(非观察期且 action 不是 block、challenge,即只记录、打码、替换);不给 = 不按此过滤。 可选值: ["other"] |

```sh
curl "https://panel.example.com/api/v2/reports/waf-events" \
  -H "X-API-Key: $GOCDN_API_KEY"
```

### GET `/api/v2/reports/waf-events/export`

导出 WAF 事件 CSV · 鉴权: 用户（部分参数仅管理员）

查询参数:

| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
| `tenant_id` | integer |  | 仅管理员可用:按租户过滤。租户凭据调用时忽略,只返回本租户数据。 |
| `start` | string |  | 起始时间(含),RFC 3339;缺省不限(事件只保留 7 天)。 |
| `end` | string |  | 结束时间(不含),RFC 3339;缺省不限。 |
| `site_id` | integer |  | 按站点过滤。 |
| `ip` | string |  | 按客户端地址过滤:单个 IPv4/IPv6 地址精确匹配,或 CIDR 网段(含 IPv4 映射写法)按地址区间匹配;网段前缀 IPv4 不短于 /8、IPv6 不短于 /32,否则 422。 |
| `url` | string |  | URL 包含(区分大小写的子串,匹配已脱敏的 路径 + 查询串)。 |
| `ja4` | string |  | 按客户端 TLS 指纹 JA4 精确过滤(事件没取到指纹的不匹配)。 |
| `rule_id` | integer |  | 按命中规则号过滤。 |
| `action` | string |  | 按处置过滤:block 拦截、log 只记录、challenge 验证、mask 打码、replace 替换。 可选值: ["block","log","challenge","mask","replace"] |
| `type` | string[] |  | 按事件类型过滤,可重复多选,不给 = 全部。 |
| `country` | string |  | 按国家过滤(节点归属地库给的名称,精确匹配)。 |
| `province` | string |  | 按省份过滤(精确匹配)。 |
| `node_id` | integer |  | 按上报节点过滤;租户看不到节点编号,传了当没传(不报错)。 |
| `observe` | boolean |  | true = 只看观察期(只记录不处置)的事件;false 或不给 = 不按此过滤。 |
| `blocked` | boolean |  | true = 只看拦截模式的拦截(action = block 且非观察);false = 只看其余。 |
| `disposition` | string |  | other = 只看处置不在「已拦截 / 验证 / 仅观察」里的事件(非观察期且 action 不是 block、challenge,即只记录、打码、替换);不给 = 不按此过滤。 可选值: ["other"] |

```sh
curl "https://panel.example.com/api/v2/reports/waf-events/export" \
  -H "X-API-Key: $GOCDN_API_KEY"
```

### GET `/api/v2/reports/waf-events/summary`

WAF 事件汇总 · 鉴权: 用户（部分参数仅管理员）

查询参数:

| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
| `tenant_id` | integer |  | 仅管理员可用:按租户过滤。租户凭据调用时忽略,只返回本租户数据。 |
| `start` | string | 有 | 时间窗起点(含),RFC 3339。 |
| `end` | string | 有 | 时间窗终点(不含),RFC 3339;须晚于 start,跨度最长 31 天。 |
| `site_id` | integer |  | 按站点过滤。 |
| `ip` | string |  | 按客户端地址过滤:单个 IPv4/IPv6 地址精确匹配,或 CIDR 网段(含 IPv4 映射写法)按地址区间匹配;网段前缀 IPv4 不短于 /8、IPv6 不短于 /32,否则 422。 |
| `url` | string |  | URL 包含(区分大小写的子串,匹配已脱敏的 路径 + 查询串)。 |
| `ja4` | string |  | 按客户端 TLS 指纹 JA4 精确过滤(事件没取到指纹的不匹配)。 |
| `rule_id` | integer |  | 按命中规则号过滤。 |
| `action` | string |  | 按处置过滤:block 拦截、log 只记录、challenge 验证、mask 打码、replace 替换。 可选值: ["block","log","challenge","mask","replace"] |
| `type` | string[] |  | 按事件类型过滤,可重复多选,不给 = 全部。 |
| `country` | string |  | 按国家过滤(节点归属地库给的名称,精确匹配)。 |
| `province` | string |  | 按省份过滤(精确匹配)。 |
| `node_id` | integer |  | 按上报节点过滤;租户看不到节点编号,传了当没传(不报错)。 |
| `observe` | boolean |  | true = 只看观察期(只记录不处置)的事件;false 或不给 = 不按此过滤。 |
| `blocked` | boolean |  | true = 只看拦截模式的拦截(action = block 且非观察);false = 只看其余。 |
| `disposition` | string |  | other = 只看处置不在「已拦截 / 验证 / 仅观察」里的事件(非观察期且 action 不是 block、challenge,即只记录、打码、替换);不给 = 不按此过滤。 可选值: ["other"] |

```sh
curl "https://panel.example.com/api/v2/reports/waf-events/summary" \
  -H "X-API-Key: $GOCDN_API_KEY"
```

### GET `/api/v2/reports/waf-events/{event_id}`

获取 WAF 事件详情 · 鉴权: 用户（部分参数仅管理员）

查询参数:

| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
| `tenant_id` | integer |  | 仅管理员可用:按租户过滤。租户凭据调用时忽略,只返回本租户数据。 |

```sh
curl "https://panel.example.com/api/v2/reports/waf-events/{event_id}" \
  -H "X-API-Key: $GOCDN_API_KEY"
```

### POST `/api/v2/reports/waf-events/{event_id}/allow`

一键加白 WAF 事件 · 鉴权: 用户（部分参数仅管理员）

查询参数:

| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
| `tenant_id` | integer |  | 仅管理员可用:按租户过滤。租户凭据调用时忽略,只返回本租户数据。 |

请求体:

| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
| `param` | string |  | 命中的参数名/请求头名/Cookie 名;无名部位为空。 |
| `path` | string |  | 仅限该路径前缀;须等于事件 URL 路径,或是以 / 结尾的前缀(如 /api/);单独的 / 须同时选规则号或参数。不给 = 不限路径。 |
| `rule` | boolean |  | 仅跳过事件命中的这条规则(rule_ids);非规则类事件(规则号 0)与语义事件不能勾。 默认: false |

```sh
curl -X POST "https://panel.example.com/api/v2/reports/waf-events/{event_id}/allow" \
  -H "X-API-Key: $GOCDN_API_KEY"
```

报表对象:

| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
| `action` | string |  | 防护处置:pass 放行、challenge 验证、block 拦截。 |
| `advice` | integer |  | 建议数。 |
| `app` | string |  | 识别到的程序名;空串 = 没识别出。 |
| `app_manual` | boolean |  | 程序是用户人工改写的。 |
| `app_version` | string |  | 程序版本;读不到时为空串。 |
| `approx` | boolean |  | 本榜取自节点每分钟前 K(ip、prefix、url、referer),各节点只上报自己的前 K,合计为近似值;带 action 或 server_port 改读访问日志时为 false。 |
| `at` | string |  | 发生时刻(窗口内最后一次命中)。 |
| `attack_types` | WafEventCount[] |  | 攻击类型分布(sqli、xss、scanner、rce、traversal、other 与 semantic、bot、upload、tamper、leak),按行数降序;之和等于 total。 |
| `attacked_sites` | integer |  | 被攻击网站去重数。 |
| `ban_hits` | integer |  | 封禁 IP 挡下的复访次数:blocked_by_feature 里 auto_ban 与 status_ban 两项之和。节点开始给封禁拦截打标之前恒为 0。 |
| `block` | integer |  | 拦截模式的拦截(action = block 且非观察)。 |
| `block_reason` | string |  | 拦截原因:region = 地区限制拦截、region_log = 地区限制只记录(未拦)、acl = ACL 拦截、other = 其他防护拦截;没拦也没命中地区限制不回。 可选值: ["region","region_log","acl","other"] |
| `blocked` | integer |  | 被拦截(action = block)的请求数。 |
| `blocked_acl` | integer |  | 被 ACL 拦截的请求数(含不带地区条件的 ACL)。 |
| `blocked_by_feature` | SecurityFeatureCount[] |  | 按防护功能的拦截次数(被拦截请求按采样权重折算,不含挑战验证)。固定 12 项(只含真拦截类,防泄露、防篡改是换体不在此列,见 handled_by_feature),次数降序、同次数按固定顺序;各项 count 之和等于同一时间窗、同一网站范围的 summary.blocked。功能归类看节点写进访问日志的 rule_ref,旧节点没打标的拦截记在 waf_rule。 |
| `blocked_region` | integer |  | 被地区限制拦截的请求数。 |
| `body_trunc` | boolean |  | 请求体超过检查上限,只查了前一段。 |
| `bot_score` | integer |  | Bot 行为评分 0–100;仅 Bot 事件(type = bot)有,其余类型没有此字段(score 是 WAF 异常分,含义不同)。 |
| `bytes_sent` | integer |  | 原始下行字节。 |
| `cache_status` | string |  | 缓存状态,如 HIT、MISS、BYPASS。 |
| `category` | string |  | 规则分类(sqli xss scanner rce php nodejs java lfi rfi protocol 等);查不到为空。 |
| `challenge` | integer |  | 非观察的验证(action = challenge)。 |
| `checked_at` | string |  | 体检时刻。 |
| `checkup` | object |  | 网站体检接入:防护评分(各网站体检分按流量加权)与待处理建议;随 site_id 过滤,不随时间窗。 |
| `client_ip` | string |  | 客户端 IP;IPv4 按原样。 |
| `combo` | object |  | HTTP/2 与 HTTP/3 的组合分布(站点数)。 |
| `compare` | SitesOverviewCompare |  | 上一周期(compare=prev):窗口 [start, end) 与按桶点列、合计;点列与当前周期逐点对齐。不含 h3_ratio、backend_resp_time_p95、noconfig_req(恒为 null)。 |
| `content_encoding` | string |  | 响应的 Content-Encoding。 |
| `count` | integer |  | 时间窗内 530 次数(各节点之和)。 |
| `countries` | SecurityCountryCount[] |  | 攻击来源国(被拦截与被挑战的请求数,按采样权重折算),次数降序;country 为空串 = 归属地未识别。 |
| `country` | string |  | 客户端归属国家(ISO 3166-1 两位码);未识别不回。 |
| `covered` | integer |  | 按识别到的程序对照防护清单,节点内置规则已防护的已知漏洞数;没有识别到程序或清单里没有该产品为 0。 |
| `created_at` | string |  | 创建时间 |
| `critical` | integer |  | 严重问题数(不含已忽略与未开通)。 |
| `ctype` | string |  | 响应的 Content-Type(去参数小写)。 |
| `current_site_id` | integer |  | 正在保存结果的网站 id;只在阶段 5 有值(阶段 1-4 是整批执行,没有单个当前站),没有时缺省。 |
| `cves` | SecurityCve[] |  | 最近 7 天命中的 CVE(规则包 meta 节对照),按命中次数降序,最多 50 条;没接入规则包时为空。 |
| `dims` | object |  | dims 请求的结果:键为维度名,值为该维度的排行(其中不再有 dims);单维度请求不带。 |
| `domain` | string |  | 第一个域名。 |
| `done_rows` | integer |  | 已写入文件的行数。 |
| `done_site_ids` | integer[] |  | 本批次已保存体检结果的网站 id(升序);不在其中的网站还没体检完(或没体检成功)。重试时清空重来。 |
| `done_sites` | integer |  | 已保存结果的网站数;完成后小于 total_sites 表示有网站没体检成功。 |
| `error` | string |  | 最近一次失败的原因(重试期间保留,导出成功后清空;failed 时即最终失败原因)。 |
| `exception` | WafEventAllowException |  | 这次加白写入(或本站已有)的站点例外。 |
| `expires_at` | string |  | 文件到期被清理的时刻(完成时刻 + 保留小时数)。 |
| `extra` | integer |  | 同上口径下,开通 WAF 规则更新后可再防护的已知漏洞数。 |
| `facets` | object |  | 筛选按钮上的分面计数。 |
| `file_bytes` | integer |  | 压缩后文件大小(字节,完成后才有)。 |
| `file_count` | integer |  | 本请求已扫的上传文件数。 |
| `file_ctype` | string |  | 上传文件的 Content-Type(客户端给的)。 |
| `file_field` | string |  | 上传文件的表单字段名。 |
| `file_magic` | string |  | 按文件头识别的类型;认不出为空。 |
| `file_name` | string |  | 上传文件名(客户端给的原名);仅上传事件(type = upload)有。 |
| `file_sha256` | string |  | 上传文件 sha256;没算为空。 |
| `file_size` | integer |  | 上传文件大小(字节);仅上传事件(type = upload)有。 |
| `filter` | AccessLogExportFilter |  | 申请时的筛选条件(同列表查询参数)。 |
| `findings` | CheckupFinding[] |  | 有问题的检查项(通过的项不列出),按检查项顺序。 |
| `finished_at` | string |  | 完成时刻。 |
| `first_seen` | string |  | 该问题本轮连续出现的起点;首次体检、旧结果没记的不返回。 |
| `first_seen_at` | string |  | 保留期内最早一条访问日志的时间;没有记录时不回。 |
| `flows` | SecurityFlow[] |  | 攻击流向 Top 50(来源国 → 节点所在国家/城市,被拦截与被挑战的请求数,按采样权重折算),次数降序;其余与位置未知的节点合并成排在最后的一条 node_country 为空串的「其他」行(不画);总和等于 countries 的总和。属 WAF 增强,未开通时为空数组;只收流向表建好之后写入的数据,更早的时间窗为空。 |
| `foreign` | integer |  | 中国大陆以外(已识别国家且不是 CN)的请求数;运营商分布不含这部分。 |
| `frequency` | string |  | 检查频率:每天 03:00、每周一 03:00、仅手动。 可选值: ["daily","weekly","manual"] |
| `geo_summary` | TopGeoSummary |  | 地区维度(country、prov、isp)的汇总,按整个时间窗与同样的筛选条件统计,不受榜单行数限制。 |
| `handled_by_feature` | SecurityHandledCount[] |  | 已处理(替换内容)次数:防泄露、防篡改在响应体上替换内容,状态码不变、记为放行,不算拦截,所以不进 blocked_by_feature 也不进 summary.blocked,也不应算拦截百分比。只列次数大于 0 的功能,次数降序、同次数先 leak 后 tamper;没有数据(含节点尚未给换体打标)返回空数组,前端据此隐藏。同样按采样权重折算,随时间窗与网站范围。 |
| `headers` | string[] |  | 前 20 个请求头,每个「小写名: 值」,值截取 256 字节;Cookie 与 Authorization 类只留名。 |
| `history` | CheckupHistoryPoint[] |  | 该网站近 8 周得分。 |
| `hit_layer` | string |  | 上传扫描命中层;没命中为空。 |
| `host` | string |  | 请求的 Host。 |
| `http2` | ProtocolSwitch |  | 某项协议开关的站点数分布(开启、关闭、未设置)。 |
| `http3` | ProtocolSwitch |  | 某项协议开关的站点数分布(开启、关闭、未设置)。 |
| `http_ver` | string |  | HTTP 协议版本(HTTP/x.y 归一为 1.0、1.1、2、3)。 |
| `https_off` | integer |  | 未开启 HTTPS 的站点数。 |
| `https_on` | integer |  | 开启 HTTPS 的站点数。 |
| `id` | integer |  | 记录 ID |
| `intel_hit` | boolean |  | 该 IP 当前是否在平台高危 IP 库(按当前库现查);null = 库没在下发,未判定。 |
| `interval` | integer |  | 桶宽(秒)。 |
| `invalid` | integer |  | 配置解不开或开关取值不是布尔的站点数。 |
| `ip` | string |  | 查询的地址(规范写法)。 |
| `isp` | string |  | 客户端运营商编号;未识别不回。 |
| `isps` | GeoCount[] |  | 中国大陆各运营商请求数,从多到少(key 为空 = 运营商未识别)。 |
| `items` | CheckupHistoryPoint[] |  | 本页条目 |
| `ja4` | string |  | 客户端 TLS 指纹 JA4(节点在 TLS 握手时算,同连接各请求相同);明文 HTTP 或取不到不回。 |
| `keys` | string[] | 有 | 检查项键。 |
| `kind` | string |  | 站点类型:domain 域名站、ip IP 站(编辑页不同)。 可选值: ["domain","ip"] |
| `last_seen` | string |  | 最近出现的分钟。 |
| `last_seen_at` | string |  | 保留期内最近一条访问日志的时间;没有记录时不回。 |
| `level` | string |  | 命中时站点的防护等级:basic / standard / strict。 |
| `limit` | integer |  | 每天可申请的次数(reports.access_log_export_daily;0 = 不许下载)。 |
| `max` | number |  | bandwidth、backend_bandwidth:时间窗内 5 分钟带宽峰值。 |
| `medium` | integer |  | 中等问题数。 |
| `message` | string |  | 兼容旧版的说明串(处置与累计分),新界面用 type/action/category 自行组文案。 |
| `method` | string |  | HTTP 请求方法。 |
| `metrics` | NodeRealtimeMetric[] |  | 各指标的曲线,顺序同请求。 |
| `name` | string |  | 网站名称。 |
| `next_retry_at` | string |  | 下次重试时刻(失败后等退避重试的 pending 申请才有)。 |
| `node_city` | string |  | 上报的节点所在城市名;只知道国家、没有城市或位置未知时为空串。 |
| `node_id` | integer |  | 处理该请求的节点 ID。 |
| `node_ids` | integer[] |  | 上报过它的节点(最多 50 个,升序)。 |
| `node_ips` | string[] |  | 该网站实际调度到的线路分组内节点的对外地址(去重排序,最多 500 个;内网/管理出口地址不出),源站防火墙放行它们即可只允许经 CDN 访问;仅在有「源站可被直连」问题时返回,否则为空数组。 |
| `node_lat` | number |  | 节点落点纬度,含义同 node_lon。 |
| `node_lon` | number |  | 节点落点经度(城市坐标,没有城市时为国家质心);位置未知时没有此字段。 |
| `node_names` | string[] |  | 与 node_ids 同序的节点名;节点没名字或已删为 "#<id>"。 |
| `node_spots` | SecurityNodeSpot[] |  | 节点落点分布(落点国家/城市 → 在用节点台数),仅管理员返回,租户恒为空数组;口径同 flows 的落点(启用的主节点、位置未知的不计),不随 WAF 增强开通与否、时间窗或 site_id 变化;台数降序,同台数按国家、城市升序。 |
| `node_unknown` | integer |  | 位置未知的在用节点台数(启用的主节点里国家定不下来的,不在 node_spots 中),仅管理员返回,租户响应不含该字段;不随 WAF 增强开通与否、时间窗或 site_id 变化。 |
| `nodes` | integer |  | 上报过它的节点数。 |
| `notify_critical` | boolean |  | 出现严重问题时告警(用告警设置里的渠道)。 |
| `observe` | boolean |  | 站点当时在观察期(只记录不处置)。 |
| `observe_rule` | boolean |  | true = 命中的是观察期内的新规则,只记录没有拦(此时 observe 也为 true);应急规则无观察期,恒为 false。 |
| `op` | string | 有 | add 补上 keys(已有的不动);remove 去掉 keys。 可选值: ["add","remove"] |
| `open_url` | string |  | 这条请求的可点开地址(该条日志自己的协议 + 域名 + 非默认端口 + 路径与查询串);只放 http/https、域名或 IP 合法、长度不到 2048 的,否则不回。 |
| `other` | integer |  | 其余(非观察的 log、mask、replace)。 |
| `p95` | number |  | bandwidth、backend_bandwidth:95 值(interval=5m 按 5 分钟带宽、否则按小时峰值;只算有数据的样本,降序第 n×5/100+1 个,n=1 时等于峰值)。 |
| `param` | string |  | 命中的参数名/请求头名/Cookie 名;无名部位为空。 |
| `params` | object |  | 展示用的数字与名称,同体检结果里该项的 params(含 open_url)。 |
| `path` | string |  | 仅限该路径前缀;须等于事件 URL 路径,或是以 / 结尾的前缀(如 /api/);单独的 / 须同时选规则号或参数。不给 = 不限路径。 |
| `points` | SecurityPoint[] |  | 攻击趋势;桶宽随时间跨度自动取(约 288 个点以内),空桶补 0。 |
| `prefix_len` | integer |  | 32(IPv4)或 64(IPv6)。 |
| `prev_score` | integer |  | 上一次体检得分;第一次体检为 null。 |
| `previous` | object |  | 上一同长时间窗的对照。 |
| `probes` | CheckupProbeExtra[] |  | 近 7 天被探测里 WAF 事件之外的行(CC 已断开、源站返回 404);已拦截 / 只记录行由面板按 WAF 事件聚合。 |
| `progress` | integer |  | 进度百分比(已写行数 / 总行数)。 |
| `protocol` | string |  | HTTP 版本,如 HTTP/2.0。 |
| `prov` | string |  | 客户端归属省份(GB/T 2260 前两位,仅中国大陆);未识别不回。 |
| `province` | string |  | 省份;未识别时为空。 |
| `provinces` | SecurityProvinceCount[] |  | 中国大陆攻击来源省份(被拦截与被挑战的请求数,按采样权重折算),次数降序;省份未识别的不列。 |
| `provs` | GeoCount[] |  | 中国大陆各省请求数,从多到少(key 为空 = 省份未识别)。 |
| `publish_seq` | integer |  | 触发的重发布序号(result = added 时)。 |
| `reason_args` | object |  | 依据文案的参数(id 站点/证书 id、at 删除时间、domain 近似的站点域名、n 相差字符数、names 节点名、cname、ip、nodes、count)。 |
| `reason_code` | string |  | 判定依据(文案码,面板按语言出文案):site_unsynced 站点仍在但节点没有它的配置、site_disabled 站点已停用、 可选值: ["site_unsynced","site_disabled","site_deleted","cert_cover","bare_ip","bad_domain","typo","not_resolved","dns_error","nxdomain","nxdomain_random","pointed_a","pointed_cname","elsewhere_ip","elsewhere_cname","no_a","unavailable"] |
| `recent` | WafEventRecent |  | 同一 IP 近 1 小时的事件(总数、命中规则分布、最近若干条)。 |
| `referer` | string |  | 请求的 Referer。 |
| `referer_open_url` | string |  | 来源页的可点开地址;来源不是 http/https 页面(如 javascript:、android-app://)、地址不合法或长达 2048 字符以上时不回。 |
| `region_logged` | integer |  | 命中「只记录」地区限制(未拦截)的请求数。 |
| `remaining` | integer |  | 今天还能申请的次数。 |
| `request_id` | string |  | 请求 ID。 |
| `request_length` | integer |  | 请求长度,字节。 |
| `request_time_ms` | integer |  | 请求处理耗时,毫秒。 |
| `reset` | boolean |  | true = 撤销人工改写、回到自动识别(此时忽略 name 与 version)。 |
| `result` | string |  | added 已添加;exists 本站已有相同例外,未重复添加;full 本站例外已满,未添加。 可选值: ["added","exists","full"] |
| `retries` | integer |  | 已失败次数;pending/running 且大于 0 即在第 N 次重试。 |
| `rule` | boolean |  | 仅跳过事件命中的这条规则(rule_ids);非规则类事件(规则号 0)与语义事件不能勾。 默认: false |
| `rule_id` | integer |  | 命中的规则 ID。 |
| `rule_name` | string |  | 规则短名。 |
| `rules_ver` | string |  | 规则库版本;空 = 节点内置规则。 |
| `run` | object |  | 进行中的批次;没有时缺省。 |
| `sample_factor` | integer |  | 采样倍数 N(所读访问日志的最大 sample_weight);未采样为 1。 |
| `sample_weight` | integer |  | 采样权重(1 = 未采样)。 |
| `sampled` | boolean |  | 所读访问日志里有采样行(sample_weight > 1),计数按权重折算、结果不完整。 |
| `saved_bytes` | integer |  | 省下的回源流量(字节):时间窗内命中缓存、未被拦截的请求发给客户端的字节数,按采样权重折算。 |
| `scan_status` | string |  | 上传扫描结果(type = upload);其他类型为空。 |
| `scan_steps` | string[] |  | 上传扫描过程,按序每层一项「层:结果」。 |
| `scheme` | string |  | 请求协议(http 或 https)。 |
| `score` | integer |  | 体检得分(满分 100)。 |
| `series` | LabeledLine[] |  | 按子对象分组的时间序列。 |
| `server_port` | integer |  | 请求到达的端口。 |
| `severity` | string |  | 该问题在这个网站上的严重程度。 可选值: ["critical","medium","advice"] |
| `site_deleted` | boolean |  | 这条日志所属的网站已被删除时为 true;网站仍在(或没有所属网站)不回。 |
| `site_id` | integer |  | 网站 ID |
| `site_ids` | integer[] | 有 | 要处理的网站,最多 500 个。 |
| `site_name` | string |  | 所属站点名称(主域名,没有域名用站点名);站点已删取删除时审计里的域名,审计里没有再取近 7 天访问日志里最常见的域名,都没有则不回。 |
| `snippet` | string |  | 命中片段(节点已脱敏,命中参数或请求头的值);列表截取前 200 个字符,详情给完整。片段不带命中位置,不能据此定位高亮。Bot 事件为触发的信号名。 |
| `source_ips` | integer |  | 来源 IP 去重数。 |
| `stage` | integer |  | 当前阶段:0 排队,1 读取配置,2 统计日志,3 直连探测,4 逐项判定,5 保存并告警。站点多于 200 个时每 200 个一批,阶段号随批循环;逐项判定在后端是瞬时的。 |
| `started_at` | string |  | 批次建立时刻。 |
| `state` | string |  | 状态:pending 排队,running 运行,done 完成,failed 重试耗尽失败。 可选值: ["pending","running","done","failed"] |
| `status` | string |  | 状态:pending 排队、running 导出中、done 可下载、failed 失败、expired 文件已过保留期被清理。 可选值: ["pending","running","done","failed","expired"] |
| `step` | integer |  | series 的桶宽(秒)。 |
| `summary` | CheckupRunSummary |  | 各阶段的处理量摘要;某阶段还没走到时该键缺省。多批任务按批累加。 |
| `target` | string |  | 命中位置:uri / query_string / args / args_names / cookies / headers / body 等。 |
| `tenant_id` | integer |  | 站点所属租户(用户)ID。 |
| `top_rules` | SecurityRuleCount[] |  | 命中规则 Top 10(按命中次数降序)。 |
| `top_sites` | SecuritySiteCount[] |  | 被攻击网站 Top 10(按拦截与挑战数降序)。 |
| `total` | integer |  | 时间窗内请求数(按采样权重折算)。 |
| `total_rows` | integer |  | 符合筛选的总行数(开始导出时统计)。 |
| `total_sites` | integer |  | 本批次要体检的网站数;排队中可能还是 0。 |
| `totals` | SitesOverviewTotals |  | 时间窗内合计。 |
| `traffic_month` | integer |  | 本月累计流量(出口字节):end 所在月 1 日 0 点(Asia/Shanghai)到 end;已封账的小时取 5 分钟汇总,其后取实时数据。 |
| `traffic_today` | integer |  | 今日流量(出口字节):end 所在日的 0 点(Asia/Shanghai)到 end;口径同 totals.traffic(含不含未配置流量随 include_noconfig)。 |
| `ts` | string |  | 请求时刻。 |
| `type` | string |  | 事件类型:规则 / 语义 / Bot / 上传扫描 / 防篡改 / 防泄露。 可选值: ["waf","semantic","bot","upload","tamper","leak"] |
| `types` | SecurityTypeCount[] |  | 攻击类型分布(WAF 事件按类型折算命中次数),次数降序。 |
| `unavailable` | string[] |  | 本次没取到的补充项(规则库或 ClickHouse 暂时读失败时才有;其余内容照常返回,取不到的项按空值给)。coverage = covered / extra,probes = probes,node_ips = node_ips。缺省 = 全部取到。 |
| `unknown` | integer |  | 归属国家未识别的请求数(无库、内网或库里没有)。 |
| `unlimited` | boolean |  | true = 不限次数(管理员),此时不给 limit / remaining。 |
| `upid` | integer |  | 回源的源站 ID。 |
| `upstream_addr` | string |  | 回源实际连的源站「地址:端口」;换源站重试时逗号分隔多跳;未回源为空。 |
| `upstream_bytes` | integer |  | 从源站收到的字节数。 |
| `upstream_status` | string |  | 各跳源站回的状态码,与 upstream_addr 逐跳对应;未回源为空。 |
| `upstream_time_ms` | integer |  | 源站响应耗时,毫秒;未回源为 null。 |
| `uri` | string |  | 请求 URI(含查询串)。 |
| `url` | string |  | 请求路径 + 查询串(已脱敏)。 |
| `used` | integer |  | 今天已建成的申请数。 |
| `user_agent` | string |  | 请求的 User-Agent。 |
| `version` | string |  | 程序版本;不知道可留空。 |
| `window_min` | integer |  | 本次取均值的窗口(分钟)。 |
| `window_s` | integer |  | 统计窗口秒数。 |
