WAF3.0 API¶
POST 查询高级监控数据¶
POST /prod-api/waf/wafv3/statistic/describeMostData
按 WAF 访问日志,一次请求可在 action 中声明多个维度,每个维度独立分页。常用于控制台「概览」页的 IP、域名、URL、状态码等排行榜。
Body 请求参数
{
"action": [
{
"metricName": "oid",
"pageNo": 1,
"pageSize": 5
},
{
"metricName": "client_ip",
"pageNo": 1,
"pageSize": 5
},
{
"metricName": "http_user_agent",
"pageNo": 1,
"pageSize": 5
},
{
"metricName": "domain",
"pageNo": 1,
"pageSize": 5
}
],
"otherFilter": [
{
"oneVal": "oid",
"twoVal": "eq",
"threeVal": ["20240412279097884616"]
}
],
"params": {
"beginTime": "2026-05-17 17:40:32",
"endTime": "2026-05-20 17:40:32"
}
}
控制台通常固定
otherFilter中oid= 当前套餐 ID($route.query.oid),并分批每次提交 4 个metricName(与页面图表分组一致)。
Body 字段说明¶
| 字段 | 类型 | 必选 | 说明 |
|---|---|---|---|
action |
array | 是 | 要统计的维度列表,每项含 metricName、pageNo、pageSize |
otherFilter |
array | 否 | 日志筛选条件;不筛选可传 [] |
params |
object | 是 | 时间范围,必须包含 beginTime、endTime |
action[] 单项¶
| 字段 | 类型 | 必选 | 说明 |
|---|---|---|---|
metricName |
string | 是 | 统计维度,见下表「支持的 metricName」 |
pageNo |
integer | 是 | 页码,从 1 开始 |
pageSize |
integer | 是 | 每页条数(控制台常用 5) |
支持的 metricName¶
与后端 WafV3LogFieldEnums 一致(大小写不敏感,建议小写):
metricName |
含义 |
|---|---|
client_ip |
客户端 IP |
http_user_agent |
User-Agent |
domain |
请求 Host(域名) |
url |
请求 URI |
status |
HTTP 响应状态码 |
request_method |
请求方法 |
server_port |
服务端口 |
ua_os_name |
客户端操作系统 |
ua_name |
客户端/browser 名称 |
rule_tags |
命中规则标签 |
client_country_name |
客户端国家 |
client_city_name |
客户端城市 |
oid |
套餐/订单 ID |
otherFilter[] 单项¶
| 字段 | 类型 | 必选 | 说明 |
|---|---|---|---|
oneVal |
string | 是 | 日志字段名,与 metricName 使用同一套枚举(如 oid、domain、status、client_ip) |
twoVal |
string | 是 | 比较方式,本接口仅支持 eq(等于)、ne(不等于) |
threeVal |
string[] | 是 | 比较值列表 |
示例:仅统计某套餐日志 — oneVal: "oid", twoVal: "eq", threeVal: ["20240412279097884616"]。
params 时间范围¶
| 字段 | 类型 | 必选 | 说明 |
|---|---|---|---|
beginTime |
string | 是 | 开始时间,格式 yyyy-MM-dd HH:mm:ss |
endTime |
string | 是 | 结束时间,格式 yyyy-MM-dd HH:mm:ss |
- 未传
params或缺少时间字段时返回错误「请选择时间范围」。
请求参数¶
| 名称 | 位置 | 类型 | 必选 | 中文名 | 说明 |
|---|---|---|---|---|---|
| Authorization | header | string | 是 | 鉴权 | Bearer Token |
| body | body | object | 是 | 请求体 | 见上文 |
返回示例
200 Response
无命中数据时(各维度 list 为空):
{
"msg": "成功",
"code": 200,
"data": [
{
"metricName": "oid",
"list": [],
"total": 0,
"termsCount": 0
},
{
"metricName": "client_ip",
"list": [],
"total": 0,
"termsCount": 0
},
{
"metricName": "http_user_agent",
"list": [],
"total": 0,
"termsCount": 0
},
{
"metricName": "domain",
"list": [],
"total": 0,
"termsCount": 0
}
]
}
有数据时(示例):
{
"msg": "成功",
"code": 200,
"data": [
{
"metricName": "client_ip",
"list": [
{ "name": "203.0.113.10", "value": 1280 },
{ "name": "198.51.100.2", "value": 640 }
],
"total": 5000,
"termsCount": 42
}
]
}
返回结果¶
| 状态码 | 状态码含义 | 说明 |
|---|---|---|
| 200 | OK | 成功 |
| 401 | Unauthorized | 未授权 |
| 403 | Forbidden | 无权限 |
返回数据结构¶
状态码 200
| 名称 | 类型 | 说明 |
|---|---|---|
code |
integer | 200 表示成功 |
msg |
string | 提示信息 |
data |
array | 与请求 action 顺序对应的统计结果列表 |
data[] 单项(每个 metricName 一条)¶
| 字段 | 类型 | 说明 |
|---|---|---|
metricName |
string | 与请求中一致 |
list |
array | 当前页的 Top 排行项 |
total |
integer | 该维度下日志总命中数(文档计数) |
termsCount |
integer | 该维度去重后的桶数量(不同取值个数,用于分页 total) |