API7 网关 AI Agent Skill:fault-injection 插件
概览
fault-injection 插件可以在 API7 企业版请求处理中注入故障,包括延迟和 HTTP 中断。该插件可用于混沌工程和弹性测试。它在 rewrite 阶段以 11000 的优先级(非常早)运行,因此会在包括身份认证和限流在内的大多数其他插件之前执行。
**执行顺序:**先执行 delay,再执行 abort。如果 abort 触发,则不会执行后续插件。
适用场景
- 混沌工程:模拟上游故障和响应变慢。
- 弹性测试:验证超时处理和熔断器行为。
- 负载测试:增加人为延迟以衡量性能下降。
- 灰度故障测试:针对特定用户或条件注入故障。
插件配置参考
必须至少指定 abort 或 delay 其中一项。
abort 对象
| 字段 | 类型 | 是否必填 | 默认值 | 说明 |
|---|---|---|---|---|
http_status | integer | 是 | — | HTTP 状态码(≥ 200) |
body | string | 否 | — | 响应体;支持 NGINX 变量($remote_addr) |
headers | object | 否 | — | 响应头;值支持 NGINX 变量 |
percentage | integer | 否 | 100(始终) | 触发中断的请求比例(0–100) |
vars | array | 否 | — | 使用表达式语法的条件规则(最多 20 项) |
delay 对象
| 字段 | 类型 | 是否必填 | 默认值 | 说明 |
|---|---|---|---|---|
duration | number | 是 | — | 延迟时间(秒;支持小数,例如 0.5、1.5) |
percentage | integer | 否 | 100(始终) | 触发延迟的请求比例(0–100) |
vars | array | 否 | — | 使用表达式语法的条件规则(最多 20 项) |
vars 表达式语法
vars 字段使用逻辑表达式执行条件故障注入。
结构
[
[["condition1a"], ["condition1b"]],
[["condition2a"]]
]
每个内层数组中的条件通过 AND 连接;外层各组通过 OR 连接。第一个匹配的组会触发故障。
变量访问
| 前缀 | 来源 | 示例 |
|---|---|---|
arg_* | 查询参数 | arg_name → ?name=value |
http_* | 请求头 | http_apikey → X-Api-Key 请求头 |
| (无) | NGINX 内置变量 | remote_addr、uri、request_method |
运算符
| 运算符 | 示例 |
|---|---|
== | ["arg_name", "==", "jack"] |
~= | ["arg_env", "~=", "prod"] |
>, >=, <, <= | ["arg_age", ">", 18] |
~~ | ["arg_env", "~~", "[Dd]ev"](正则表达式) |
~* | ["arg_env", "~*", "dev"](不区分大小写的正则表达式) |
in | ["arg_ver", "in", ["v1","v2"]] |
! | ["arg_age", "!", "<", 18](否定 → >=) |
ipmatch | ["remote_addr", "ipmatch", ["10.0.0.0/8"]] |
分步示例
1. 固定延迟(3 秒)
a7 route create --gateway-group default -f - <<'EOF'
{
"id": "delay-test",
"uri": "/api/*",
"plugins": {
"fault-injection": {
"delay": {
"duration": 3
}
}
},
"upstream": {
"type": "roundrobin",
"nodes": [{"host": "backend", "port": 8080, "weight": 1}]
}
}
EOF