跳转至

查询 DDoS 攻击数据

1. 接口描述

接口请求路径:POST /prod-api/cdn/layer7/attackStatistic/describeL7DDOSAttack

describeL7DDOSAttack 用于按套餐查询 DDoS 攻击峰值趋势与攻击事件。一次请求可在 action 中声明多个指标,返回的 dataaction 顺序一一对应。

仅支持查询最近 360 天内的数据,单次查询时间跨度不超过 40 天。

Token 获取方式见 密钥鉴权

2. 输入参数

以下请求参数列表仅列出了接口请求参数和部分公共参数,完整公共参数列表见 公共请求参数

参数名称 必选 类型 描述
action Array of Object 统计指标列表,不能为空
action.metricName String 统计指标。取值:ddosAttackTread(DDoS 攻击统计图)、ddosAttackEvent(攻击事件)。示例值:ddosAttackTread
oid String 套餐号。须属于当前账号且类型为安全加速相关套餐。示例值:2022012543408922
interval String 时间粒度。取值:1m(1 分钟)、5m(5 分钟)、1h(1 小时)、1d(1 天)。空值时按时间跨度自动选择。示例值:1m
params.beginTime String 开始时间,格式 yyyy-MM-dd HH:mm:ss,仅支持查询最近 360 天。示例值:2023-08-24 04:49:18
params.endTime String 结束时间,格式 yyyy-MM-dd HH:mm:ss,单次跨度不超过 40 天。示例值:2023-08-24 10:49:18

3. 输出参数

参数名称 类型 描述
code Integer 状态码。示例值:200
msg String 提示信息。示例值:操作成功
data Array of Object 指标结果列表,顺序与请求 action 一致
data[].metricName String 指标名称,如 ddosAttackTreadddosAttackEvent
data[].maxDDOS Number 区间内最大攻击峰值,仅 ddosAttackTread 返回
data[].data Array ddosAttackTread 时为时间序列,每个点为 [毫秒时间戳, 峰值]ddosAttackEvent 时为攻击事件列表

4. 示例

示例1 查询攻击趋势与事件

输入示例

{
  "action": [
    {
      "metricName": "ddosAttackTread"
    },
    {
      "metricName": "ddosAttackEvent"
    }
  ],
  "oid": "2022012543408922",
  "params": {
    "beginTime": "2023-08-24 04:49:18",
    "endTime": "2023-08-24 10:49:18"
  },
  "interval": "1m"
}

代码调用

请将 {登录域名}token 替换为实际值。

curl -X POST 'https://{登录域名}/prod-api/cdn/layer7/attackStatistic/describeL7DDOSAttack' \
  -H 'Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.xxxxxx' \
  -H 'Content-Type: application/json' \
  -d '{
  "action": [
    {
      "metricName": "ddosAttackTread"
    },
    {
      "metricName": "ddosAttackEvent"
    }
  ],
  "oid": "2022012543408922",
  "params": {
    "beginTime": "2023-08-24 04:49:18",
    "endTime": "2023-08-24 10:49:18"
  },
  "interval": "1m"
}'
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.ContentType;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;

public class DescribeL7DDOSAttackTest {

    public static void main(String[] args) throws Exception {
        String url = "https://{登录域名}/prod-api/cdn/layer7/attackStatistic/describeL7DDOSAttack";
        String token = "eyJhbGciOiJIUzUxMiJ9.xxxxxx";

        String requestBody = "{"
                + "\"action\":["
                + "{\"metricName\":\"ddosAttackTread\"},"
                + "{\"metricName\":\"ddosAttackEvent\"}"
                + "],"
                + "\"oid\":\"2022012543408922\","
                + "\"params\":{"
                + "\"beginTime\":\"2023-08-24 04:49:18\","
                + "\"endTime\":\"2023-08-24 10:49:18\""
                + "},"
                + "\"interval\":\"1m\""
                + "}";

        try (CloseableHttpClient httpClient = HttpClients.createDefault()) {
            HttpPost httpPost = new HttpPost(url);
            httpPost.setHeader("Authorization", "Bearer " + token);
            httpPost.setEntity(new StringEntity(requestBody, ContentType.APPLICATION_JSON));

            try (CloseableHttpResponse response = httpClient.execute(httpPost)) {
                int statusCode = response.getStatusLine().getStatusCode();
                String body = EntityUtils.toString(response.getEntity(), "UTF-8");
                System.out.println("Status Code: " + statusCode);
                System.out.println("Body: " + body);
            }
        }
    }
}
package main

import (
    "bytes"
    "fmt"
    "io"
    "net/http"
)

func main() {
    url := "https://{登录域名}/prod-api/cdn/layer7/attackStatistic/describeL7DDOSAttack"
    token := "eyJhbGciOiJIUzUxMiJ9.xxxxxx"

    requestBody := []byte(`{
  "action": [
    {"metricName": "ddosAttackTread"},
    {"metricName": "ddosAttackEvent"}
  ],
  "oid": "2022012543408922",
  "params": {
    "beginTime": "2023-08-24 04:49:18",
    "endTime": "2023-08-24 10:49:18"
  },
  "interval": "1m"
}`)

    req, err := http.NewRequest(http.MethodPost, url, bytes.NewReader(requestBody))
    if err != nil {
        panic(err)
    }
    req.Header.Set("Authorization", "Bearer "+token)
    req.Header.Set("Content-Type", "application/json")

    resp, err := http.DefaultClient.Do(req)
    if err != nil {
        panic(err)
    }
    defer resp.Body.Close()

    body, err := io.ReadAll(resp.Body)
    if err != nil {
        panic(err)
    }
    fmt.Println("Status Code:", resp.StatusCode)
    fmt.Println("Body:", string(body))
}

输出示例

{
  "msg": "操作成功",
  "code": 200,
  "data": [
    {
      "maxDDOS": 0,
      "metricName": "ddosAttackTread",
      "data": [
        [1692823758000, 0],
        [1692823818000, 0]
      ]
    },
    {
      "metricName": "ddosAttackEvent",
      "data": []
    }
  ]
}

5. 错误码

HTTP 状态码 / 业务提示 描述
200 成功
401 未鉴权或 Token 无效
403 无权限
操作失败,套餐信息不存在 oid 不属于当前账号或不存在
请选择时间范围 未传 params 或缺少 beginTime / endTime
请选择查询内容 未传 action 或为空
只能查询最近360天的数据 开始时间超出限制
一次只能查询40天的数据 时间跨度超过 40 天