关于 huawei-cloud-cdn-traffic-anomaly-analysis
面向华为云 CDN 运维人员的只读分析技能,根据计费模式选择指标,并将域名流量与三个月基线比较。它通过日级数据识别绝对阈值异常和相对流量激增。
主要功能
- 01识别计费模式并选择指标
- 02按日分析 CDN 域名流量
- 03与三个月基线比较
- 04检测绝对及相对异常
- 05生成含日明细的报告
适用场景
- 01排查域名是否疑似流量盗刷
- 02检查近期带宽是否激增
- 03将当前流量与历史水平比较
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ huaweicloud/ huaweicloud-skills --skill huawei-cloud-cdn-traffic-anomaly-analysis安装后在 Claude Code 中输入/huawei-cloud-cdn-traffic-anomaly-analysis确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
.markdownlint.jsonreferences/acceptance-criteria.mdcli-installation-guide.mddataflow-diagram.mdiam-policies.mdprohibited-operations.mdrelated-apis.mdtask-domain-validation.mdtask-list-domains.mdtask-query-metrics.mdtask-show-charge-modes.mdtask-threshold-judgment.mdtask-timestamp-calculation.mdtroubleshooting.mdverification-method.mdscripts/cdn_timestamp.py详细介绍
CDN 流量异常分析
概述
此技能通过查询计费方式及对应的流量/带宽指标,分析 CDN 域名流量异常。它会根据账户的计费方式(bw_95、flux、combine_flux、bw、bw_peak)自动确定适用的指标,查询可配置时间范围内的历史数据,建立 3 个月的基线进行对比,并结合绝对阈值和相对于基线的偏差,识别潜在的流量盗刷或滥用。
主要功能:
- 自动检测计费方式并选择指标
- 支持所有计费方式:bw_95、flux、combine_flux、bw、bw_peak
- 域名验证与流量分析
- 3 个月基线分析——检测相较历史常态的流量激增
- 双阈值异常检测——绝对阈值 + 相对基线对比
- 三级结论:正常/关注(相对激增)/异常(超过绝对阈值)
- 提供全面的分析报告,包含基线对比和每日明细
工具:hcloud CLI(KooCLI)
时间戳工具:内置工具 scripts/cdn_timestamp.py
分析范围:当前窗口为过去 7 天(可配置);基线为过去 3 个月
核心原则:只查询与计费方式对应的指标;高效利用 API 功能,以尽可能少的 API 调用覆盖当前窗口和基线窗口
触发条件
当用户请求符合以下任一模式时使用此技能(用户层级的示例输入):
| 用户输入示例 | 触发意图 |
|---|---|
| “example.com 的流量是否正在被盗刷或滥用?” | 流量盗刷检测 |
| “分析过去 7 天 CDN 带宽是否异常激增” | 带宽异常分析 |
| “将过去 3 个月的流量与当前时段对比,检查是否存在异常” | 3 个月基线对比 |
| “检查我们账户的 CDN 计费方式和域名列表” | 计费方式/域名查询 |
| “为什么 example.com 的 95 百分位带宽这么高?” | 95 百分位带宽分析 |
| “流量异常/带宽异常/CDN 流量分析” | 英文触发词 |
此外,frontmatter description 中列出的触发短语也会触发此技能(例如,CDN流量异常、流量盗刷、带宽异常、traffic anomaly)。
相近场景/请勿使用
以下情况请勿使用此技能:
- ❌ 任何 CDN 写入操作:创建/删除域名、修改域名配置、刷新/预热、启用/禁用域名、更改计费方式等——此技能严格只读,必须拒绝此类请求(请参阅 references/prohibited-operations.md 中列出的全部 55 项禁止操作)
- ❌ 需要按小时或更细粒度进行的流量分析——此技能按日粒度工作(interval=86400)
- ❌ 非 CDN 服务的流量/带宽分析(例如 ECS、ELB、OBS 流量)——此技能仅涵盖 CDN 域名
- ❌ 运维任务,例如更改域名配置、管理证书或配置防盗链
- ❌ 缺少 hcloud 凭证或 CDN 权限的场景(请先完成身份验证部分中的凭证检查)
- ❌ 跨境/海外区域分析——CDN CLI 仅接受
cn-north-1和ap-southeast-1;其他区域会返回[USE_ERROR]
⛔ 禁止的操作(安全限制)
此技能严格禁止所有非 GET(写入/修改/删除)CDN 操作,无论用户提出何种请求。
共计:55 项禁止的操作(24 项 POST + 25 项 PUT + 6 项 DELETE)。
如需查看全部 55 项禁止的非 GET 操作及其风险说明,请参阅 references/prohibited-operations.md。
具有代表性的禁止操作(完整列表请参阅参考文档):
| 禁止的操作 | API/命令 | 原因 |
|---|---|---|
| ❌ 创建域名 | CreateDomain (v1/v2), CreateDomainByDuplicate | 写入操作;会创建生产资源 |
| ❌ 删除域名 | DeleteDomain (v1/v2) | 不可逆;会从 CDN 中移除域名 |
| ❌ 修改域名配置 | UpdateDomainFullConfig (v1/v2), UpdateDomainOrigin, UpdateCacheRules 等 | 写入操作;可能影响生产流量 |
| ❌ 启用/禁用域名 | EnableDomain (v1/v2), DisableDomain (v1/v2) | 会影响生产流量 |
| ❌ 修改计费模式 | SetChargeModes | 会产生财务影响;需要明确授权 |
| ❌ 创建刷新/预热任务 | CreateRefreshTasks (v1/v2), CreatePreheatingTasks (v1/v2) | 写入操作;会影响边缘缓存 |
| ❌ 验证域名所有权 | VerifyDomainOwner | POST 操作;会触发验证流程 |
如果用户请求执行禁止的操作,你必须拒绝并告知: “根据安全限制,此技能不允许执行写入/删除/修改操作。此技能仅用于流量分析,不提供写入功能。请使用 Huawei Cloud CDN 控制台,或手动运行 hcloud CLI 进行配置更改。references/prohibited-operations.md 中记录了 55 项禁止操作的完整列表。”
架构
CDN Traffic Anomaly Analysis
├── ShowChargeModes (Query account billing mode)
├── ListDomains/v2 (List all CDN domains)
├── Domain Validation (Verify target domain exists)
├── TimestampCalculation (scripts/cdn_timestamp.py)
│ ├── Current window (default 7 days, UTC+8 midnight)
│ └── Baseline windows (3 × 30-day windows, non-overlapping)
├── QueryMetrics (Based on billing mode)
│ ├── bw_95 → ShowBandwidthCalc
│ │ ├── Current: 1 call (7-day single aggregate)
│ │ └── Baseline: 3 calls (30-day aggregates each)
│ └── flux/bw → ShowDomainStats/v2 (stat_type=flux or bw)
│ ├── Current: 1 call (7-day window, interval=86400)
│ └── Baseline: 3 calls (30-day windows each, interval=86400)
└── ThresholdJudgment (Dual-threshold: absolute + baseline-relative)
├── ⚠️ Anomalous: exceeds absolute threshold
├── 👀 Watch: exceeds baseline × multiplier (sub-threshold surge)
└── ✅ Normal: neither threshold triggered
API 调用预算
| 计费模式 | API 调用次数 | 速率限制 | 预计耗时 |
|---|---|---|---|
| bw_95 | 6(1 次计费 + 1 次域名 + 1 次当前值 + 3 次基准值) | 2/s (ShowBandwidthCalc) | ~3s |
| flux / bw | 6(1 次计费 + 1 次域名 + 1 次当前值 + 3 次基准值) | 15/s (ShowDomainStats) | ~1s |
KooCLI 命令格式规范
所有 hcloud CDN 命令均遵循以下标准格式:
hcloud CDN <Operation> --cli-region=cn-north-1 [--parameter=value ...]
格式规则:
- 服务名称:
CDN(大写) - 操作名称:PascalCase(例如:
ShowChargeModes、ListDomains、ShowBandwidthCalc) - 区域参数:
--cli-region=cn-north-1(必需,CDN 始终使用 cn-north-1) - 参数格式:
--key=value(使用等号,不加空格) - 索引参数:
--key.1=value1(用于数组参数)
示例:
# Correct
hcloud CDN ShowChargeModes --cli-region=cn-north-1 --product_type=base
hcloud CDN ListDomains/v2 --cli-region=cn-north-1 --page_size=100
# Incorrect (space instead of equals sign)
hcloud CDN ShowChargeModes --cli-region cn-north-1
前置条件
前置条件检查:需要 Huawei Cloud CLI(hcloud / KooCLI)>= 3.2.0 运行
hcloud version,确认版本 >= 3.2.0。如果尚未安装或版本过低,请参阅 references/cli-installation-guide.md 查看安装指南。
hcloud version
前置条件检查:需要 Python >= 3.8(用于时间戳计算) 运行
python --version,确认版本 >= 3.8。
python --version
前置条件检查:已配置 hcloud 凭证
执行 CDN 操作前,必须确认已配置 hcloud 凭证:
hcloud configure list如果没有有效凭证,请停止操作并引导用户配置凭证。
⚠️ hcloud 参数格式要求
hcloud(KooCLI)的所有参数都必须使用
--param=value格式(以等号连接);不支持以空格分隔的格式。✅ 正确:
hcloud CDN ShowChargeModes --cli-region=cn-north-1❌ 错误:
hcloud CDN ShowChargeModes --cli-region cn-north-1
⚠️ CDN API 区域要求
CDN 是一项全球服务(is_global=true)。CDN 的 hcloud CLI 仅接受
cn-north-1和ap-southeast-1(二者映射到同一端点cdn.myhuaweicloud.com);使用cn-north-4会被 拒绝并返回[USE_ERROR]。 建议:始终使用cn-north-1。
身份验证
前置条件检查:需要 Huawei Cloud 凭证
安全规则(必须遵守):
禁止读取、回显或打印 AK/SK 值
禁止要求用户在对话中直接输入 AK/SK
禁止使用
hcloud configure set传递明文凭证值禁止接受用户在对话中直接提供的 AK/SK
仅允许从环境变量或已配置的 CLI 配置文件中读取凭证
⚠️ 重要:处理用户提供的凭证
如果用户尝试直接提供 AK/SK(例如:“我的 AK 是 xxx,SK 是 yyy”):
- 立即停止——不要执行任何命令
- 礼貌地拒绝,并返回以下消息:
为保障账户安全,请勿在对话中直接提供 Huawei Cloud Access Key ID 和 Access Key Secret。 请使用以下任一安全方式配置凭证: 方法 1:交互式配置(推荐) hcloud configure # 按提示输入 AK/SK;凭证将安全地存储在本地配置文件中 方法 2:配置环境变量 export HUAWEICLOUD_SDK_AK=<your-access-key-id> export HUAWEICLOUD_SDK_SK=<your-secret-key> 配置完成后,请重试您的请求。
- 在凭证配置完成前,不要继续执行任何 Huawei Cloud 操作
检查 CLI 配置:
hcloud configure list检查输出中是否包含有效配置(AK/SK、IAM 等)。
如果没有有效凭证,请在此处停止。
IAM 权限策略
确保 IAM 用户具有所需权限。详情请参阅 references/iam-policies.md。
最低所需权限:
cdn:*:query*— 此技能使用的所有 CDN 查询类操作(ListDomains/v2、ShowChargeModes、ShowDomainStats/v2、ShowBandwidthCalc)cdn:configuration:queryDomains— 列出 CDN 域名(与通配符权限并列明确列出)cdn:configuration:queryChargeMode— 查询计费模式(与通配符权限并列明确列出)
核心命令
此技能中使用的所有 hcloud CDN 命令速查:
| 命令 | 用途 | 关键参数 |
|---|---|---|
hcloud CDN ShowChargeModes --cli-region=cn-north-1 --product_type=base | 查询账户计费模式 | --service_area(可选) |
hcloud CDN ListDomains/v2 --cli-region=cn-north-1 --page_size=100 | 列出所有 CDN 域名 | --page_size、--page_number |
hcloud CDN ShowBandwidthCalc --cli-region=cn-north-1 --domain_name=<domain> --calc_type=bw_95 --start_time=<ms> --end_time=<ms> | 查询 95 百分位带宽(当前 7 天或基准 30 天) | --service_area |
hcloud CDN ShowDomainStats/v2 --cli-region=cn-north-1 --domain_name=<domain> --stat_type=flux --interval=86400 --start_time=<ms> --end_time=<ms> --action=detail | 查询每日流量统计(针对 flux/bw 路径进行 1 次当前 7 天查询和 3 次 × 30 天基准查询) | --stat_type、--interval、--service_area |
注意:
- 所有命令都必须指定
--cli-region=cn-north-1 - 时间戳必须以毫秒为单位(例如
1785081600000) - 使用
scripts/cdn_timestamp.py计算时间戳 - 使用
scripts/cdn_timestamp.py --baseline生成 3 个 × 30 天的基准时间窗口 - ShowBandwidthCalc:最长查询范围为 31 天,只返回一个汇总值(不提供每日明细),调用频率限制为 2 次/秒
- ShowDomainStats/v2:interval=86400(1 天)时,最长查询范围为 31~32 天——一次查询 97 天会失败并返回
CDN.0202;每天返回一个数据点;调用频率限制为 15 次/秒;基准查询必须拆分为 3 次 × 30 天
参数确认
执行分析前,请与用户确认以下参数:
| 参数 | 必填 | 说明 | 默认值 | 示例 |
|---|---|---|---|---|
domain_name | 是 | 要分析的目标 CDN 域名 | 无 | example.com |
--days | 否 | 当前窗口分析的天数 | 7 | 14 |
--cli-region | 是 | 华为云区域 | cn-north-1 | cn-north-1 |
用户确认清单:
- 已提供目标域名,或已从域名列表中选定目标域名
- 已确认分析时间范围(默认:当前窗口为过去 7 天)
- 用户了解这是只读分析操作
- 用户了解基准对比范围为过去 3 个月
核心工作流
开始任何分析步骤前,必须指定目标域名。
- 如果用户未提供目标域名,请询问域名,并等待用户回复后再开始。
- 仅当用户不知道域名或要求你查询域名时,才通过
hcloud CDN ListDomains/v2(步骤 2)列出账户的域名,并请用户选择一个。- 未经用户明确提供域名,绝不要开始分析:不要猜测域名,不要回退到示例域名或默认域名,也不要自行从列表中选择域名。
步骤 1:查询账户计费模式
通过 hcloud CLI 查询计费模式,以确定要分析的指标。
📄 详细步骤 → references/task-show-charge-modes.md
步骤 2:列出所有 CDN 域名(仅在用户要求查询域名时)
列出当前账户下所有在线 CDN 域名,然后请用户从列表中选择目标域名。
📄 详细步骤 → references/task-list-domains.md
步骤 3:验证域名
确认用户提供的域名存在于域名列表中。
📄 详细步骤 → references/task-domain-validation.md
步骤 4:计算时间戳
计算当前窗口(默认 7 天)和 3 个基准窗口(各 30 天、互不重叠)的时间范围,并按 UTC+8 午夜对齐。
📄 详细步骤 → references/task-timestamp-calculation.md
步骤 5:查询当前窗口指标
根据计费模式,查询当前窗口(7 天)的对应指标。
📄 详细步骤 → references/task-query-metrics.md
步骤 6:查询基线指标
根据计费模式,查询基线窗口(过去 3 个月)的对应指标。
- bw_95:调用
ShowBandwidthCalc3 次,每次覆盖一个互不重叠的 30 天窗口(API 的最大范围为 31 天)。两次调用之间暂停 0.6 秒,以遵守每秒 2 次调用的速率限制。 - flux / bw:调用
ShowDomainStats/v24 次——1 次查询当前 7 天窗口(来自步骤 5),另 3 次查询 3 个 30 天基线窗口(interval=86400,按 UTC+8 午夜对齐)。 interval=86400 的 API 最大范围为 31–32 天,因此单次查询 97 天会失败(CDN.0202)。根据 3 个聚合后的 30 天窗口计算基线统计值(均值 / P95 / 最大值),与 bw_95 路径保持一致。
📄 详细步骤 → references/task-query-metrics.md
步骤 7:阈值判断
应用双重阈值逻辑:绝对阈值(硬性上限)+ 相对基线比较(流量激增检测)。生成三级分析报告。
📄 详细步骤 → references/task-threshold-judgment.md
阈值规则摘要
| 计费模式 | 指标 | 绝对阈值 | 相对基线 |
|---|---|---|---|
bw_95 | 7 天 P95 带宽(bit/s) | ≥ 8 Gbps → ⚠️ 异常 | 当前值 > baseline_max × 1.5 → 👀 关注 |
flux / combine_flux | 每日流量(Byte) | 任意一天 > 5 TB → ⚠️ 异常 | 任意一天 > baseline_P95 × 1.5 → 👀 关注 |
bw / bw_peak | 每日峰值带宽(bit/s) | 任意一天 ≥ 3 Gbps → ⚠️ 异常 | 任意一天 > baseline_P95 × 1.5 → 👀 关注 |
三级结论:
- ⚠️ 异常 — 超过绝对阈值;是流量盗用的强烈信号
- 👀 关注 — 未超过绝对阈值,但超过基线 × 1.5;可能存在值得调查的相对流量激增
- ✅ 正常 — 未超过绝对阈值和相对阈值
无数据的域名(result: {} 或 value: 0)一律视为正常。
输出格式
每次分析都会生成统一的 CDN 流量异常分析报告。三个级别(⚠️ 异常 / 👀 关注 / ✅ 正常)的完整模板见 references/task-threshold-judgment.md——必须严格遵循这些模板。
报告结构约定(必填字段):
| 字段 | 必填 | 说明 |
|---|---|---|
| 分析时间 | ✅ | 分析时间戳 |
| 目标域名 | ✅ | 分析的域名 |
| 计费模式 | ✅ | bw_95 / flux / combine_flux / bw / bw_peak |
| 指标 | ✅ | 7-Day P95 Bandwidth / Daily Traffic / Daily Peak Bandwidth |
| 当前窗口 | ✅ | 分析周期(默认 7 天) |
| 基线统计 | ✅ | 过去 3 个月的 mean / P95 / max / 相对限值 |
| 当前值 | ✅ | 每日值(或单个聚合值)及相对于基线的偏差百分比 |
| 状态 | ✅ | 三级结论枚举值之一 |
| 结论 | ✅ | 判定结果 + 建议 |
状态枚举(必须且只能使用以下一种):
| 状态 | 含义 |
|---|---|
⚠️ Anomalous | 超过绝对阈值;是流量盗用的强烈信号 |
👀 Watch | 低于绝对阈值,但高于基线 × 1.5;相对流量激增 |
✅ Normal | 未超过两个阈值 |
输出中禁止包含的内容(绝不可包含):
- ❌ AK/SK、令牌或任何凭据(参见身份验证规则)
- ❌ 原始 API 响应;仅包含解析或汇总后的值
- ❌ 与所分析目标域名无关的域名或数据
- ❌ 未经查询数据支持的推测性说法(例如“攻击者身份”)
故障模式
| 故障模式 | 触发条件 | 处理方式 |
|---|---|---|
| 没有有效凭据 | hcloud configure list 返回空配置或无效配置 | 立即停止;引导用户完成“身份验证”部分的操作 |
| 未找到域名 | 目标域名不在 ListDomains/v2 在线列表中 | 停止;告知用户并列出可用域名(参见 task-domain-validation.md) |
| 权限被拒绝 | API 返回权限错误 | 验证 IAM 策略(iam-policies.md);向用户报告失败 |
| 超出速率限制 | ShowBandwidthCalc 限制为 2 次调用/秒 | 在调用之间添加 sleep 0.6,然后重试(参见 troubleshooting.md) |
| 查询范围过大 | 单次查询超过 31 天(ShowBandwidthCalc)或超过 31–32 天(ShowDomainStats interval=86400,CDN.0202) | 将基线拆分为 3 个 30 天窗口;绝不进行单次 97 天查询 |
| 没有流量数据 | API 返回 result: {} 或 value: 0 | 视为正常;在报告中注明数据为空 |
| 时间戳未对齐 | interval=86400 查询未与 UTC+8 午夜对齐 | 始终使用 scripts/cdn_timestamp.py;手动设置时间戳容易出错 |
| hcloud CLI 参数错误 | [USE_ERROR](例如,参数之间使用空格分隔、区域错误) | 验证 --key=value 格式和 --cli-region=cn-north-1 |
各故障模式的恢复策略: 重试(速率限制/暂时性错误,最多重试 2 次,并使用退避策略)→ 降级处理(拆分查询范围,使用可用数据)→ 报告失败(停止并向用户说明)。绝不伪造数据,也绝不使用无效结果继续处理。
输出前自检: 验证(1)计费模式与所查询的指标一致,(2)3 个基线窗口彼此不重叠,且与当前窗口不重叠,(3)阈值比较使用了正确的单位(bit/s 与 Byte)和方向(≥ 与 >)。
常见问题
| 问题 | 答案 |
|---|---|
| 为什么 ShowBandwidthCalc 只返回一个值? | 这是预期行为:该 API 会返回查询时段内单个 P95 聚合值,不提供逐日明细,且最大查询范围为 31 天。要获取逐日数据,请使用 ShowDomainStats/v2。 |
| 为什么不能一次查询 97 天? | ShowDomainStats/v2 的 interval=86400 最大查询范围为 31–32 天;单次查询 97 天会因 CDN.0202 而失败。基线必须拆分为 3 个互不重叠的 30 天窗口。 |
没有流量数据(result: {} / value: 0)的域名是否算异常? | 不算。没有数据的域名始终视为正常(参见“阈值规则摘要”);你可以在报告中注明该域名在查询时段内没有流量。 |
为什么始终建议使用 --cli-region=cn-north-1? | CDN 是一项全球服务;CLI 仅接受 cn-north-1 和 ap-southeast-1(两者映射到同一端点),而 cn-north-4 会被拒绝([USE_ERROR])。 |
| 如果遇到速率限制错误怎么办? | ShowBandwidthCalc 限制为 2 次调用/秒:在命令之间添加 sleep 0.6;ShowDomainStats 限制为 15 次调用/秒,通常无需特殊处理。 |
| 域名不在账户的在线域名列表中怎么办? | 停止分析,并请用户核实域名拼写、状态和账户(参见 troubleshooting.md 中的“未找到域名”部分)。 |
| 用户请求执行写操作(例如刷新缓存、更改配置)怎么办? | 拒绝并说明此技能为只读(参见 prohibited-operations.md);请用户改用 CDN 控制台或手动执行 hcloud CLI。 |
如需了解更多问题和故障排查信息,请参见 references/troubleshooting.md。
变更日志 / 版本历史
| 版本 | 日期 | 变更 |
|---|---|---|
| 1.0.0 | 2026-08-09 | 初始版本:计费模式查询 + 流量/带宽统计 + 3 个月基线对比 + 双阈值异常检测 |
负责人:cdn-ops
维护:重大变更时,更新此表并递增版本号(SemVer)。弃用/退役须经 cdn-ops 团队审核,并记录在此表中。
参考资料
| 文档 | 描述 |
|---|---|
| task-show-charge-modes.md | 步骤 1:查询计费模式 |
| task-list-domains.md | 步骤 2:列出所有域名 |
| task-domain-validation.md | 步骤 3:域名验证 |
| task-timestamp-calculation.md | 步骤 4:时间戳计算 |
| task-query-metrics.md | 步骤 5-6:查询当前指标 + 基线指标 |
| task-threshold-judgment.md | 步骤 7:双阈值判断 + 报告 |
| prohibited-operations.md | 所有 55 个禁止的非 GET 操作(POST/PUT/DELETE) |
| dataflow-diagram.md | Mermaid 数据流图 |
| related-apis.md | API 和 CLI 命令参考 |
| iam-policies.md | IAM 权限策略 |
| verification-method.md | 输出格式和验证 |
| cli-installation-guide.md | CLI 安装指南 |
| troubleshooting.md | 故障排查和最佳实践 |
| acceptance-criteria.md | 验收标准清单 |