fault-injection插件
更新时间 2026-04-21 15:48:56
最近更新时间: 2026-04-21 15:48:56
本文将详细介绍fault-injection插件功能、配置和使用。
功能说明
fault-injection 插件是故障注入插件,用于模拟服务故障。它可以在特定条件下人为引入延迟、返回错误状态码或自定义响应,从而帮助开发者和测试人员测试系统的容错能力和服务在异常情况下的表现。该插件可以和其他插件一起使用,并在其他插件执行前被执行。
配置字段
| 名称 | 类型 | 填写要求 | 默认值 | 有效值 | 描述 |
|---|---|---|---|---|---|
| abort | object | abort与delay至少配置一个 | abort 属性将直接返回给客户端指定的响应码并且终止其他插件的执行。 | ||
| delay | object | abort与delay至少配置一个 | delay 属性将延迟某个请求,并且还会执行配置的其他插件。 |
子项abort中每一项的配置字段说明如下。
| 名称 | 类型 | 填写要求 | 默认值 | 有效值 | 描述 |
|---|---|---|---|---|---|
| http_status | integer | 必填 | [200, ...] | 返回给客户端的 HTTP 状态码 | |
| body | string | 可选 | 返回给客户端的响应数据。支持使用 NGINX 变量,如 client addr: $remote_addr | ||
| headers | object | 可选 | 返回给客户端的响应头,可以包含 NGINX 变量,如 $remote_addr | ||
| percentage | integer | 可选 | [0, 100] | 将被中断的请求占比 | |
| vars | array[] | 可选 | 执行故障注入的规则,当规则匹配通过后才会执行故障注。vars 是一个表达式的列表,来自 lua-resty-expr。 |
子项delay中每一项的配置字段说明如下。
| 名称 | 类型 | 填写要求 | 默认值 | 有效值 | 描述 |
|---|---|---|---|---|---|
| duration | number | 必填 | 延迟时间,可以指定小数 | ||
| percentage | integer | 可选 | [0, 100] | 将被延迟的请求占比 | |
| vars | array[] | 可选 | 执行请求延迟的规则,当规则匹配通过后才会执行故障注。vars 是一个表达式的列表,来自 lua-resty-expr。 |
注:vars 是由 lua-resty-expr 的表达式组成的列表,它可以灵活的实现规则之间的 AND/OR 关系,示例如下:
[
[
[ "arg_name","==","jack" ],
[ "arg_age","==",18 ]
],
[
[ "arg_name2","==","allen" ]
]
]以上示例表示前两个表达式之间的关系是 AND,而前两个和第三个表达式之间的关系是 OR。
配置示例
场景1:故障注入
abort:
http_status: 503
body: "Fault Injection!"根据该配置,路由请求时会被拦截,返回自定义的状态码和响应体。
场景2:请求延迟
delay:
duration: 3根据该配置,路由请求时会延迟3秒后再执行
场景3:带条件的故障注入和请求延迟
abort:
http_status: 504
body: "Fault Injection!"
vars: [
[
[ "arg_name","==","jack" ]
]
]
delay:
duration: 3
vars: [
[
[ "http_age","==","18" ]
]
]根据该配置,当请求参数中name值为jack的路由时会被拦截
curl http://example.com/test?name=jack
HTTP/1.1 503 Service Temporarily Unavailable
......
Fault Injection!当请求header中age值为18的路由时会延迟3秒执行
time curl http://example.com/test -H 'age: 18'
HTTP/1.1 200
......
real 0m3.008s
user 0m0.003s
sys 0m0.003s配置模板
#abort和delay属性至少要配置其中一个
#abort属性直接返回给客户端指定的响应码并且终止其他插件的执行
abort:
#[必填]返回客户端的HTTP状态码,有效范围[200,...]
http_status: 503
#[可选]返回给客户端的响应数据
#body: "Fault Injection!"
#headers: {"X-Error-Code": "12345","X-Reason": "Invalid request"}
#[可选]将被中断的请求占比,有效范围[0,100]
#percentage: 100
#[可选]执行故障注入的规则,当规则匹配通过后才会执行故障
#vars: [[[ "arg_name","==","jack" ]]]
#delay属性将延迟某个请求,并且会执行配置的其他插件
delay:
#[必填]延迟时间,可以指定小数
duration: 3
#[可选]将被延迟的请求占比,有效范围[0,100]
#percentage: 100
#[可选]执行请求延迟的规则,当规则匹配通过后才会执行故障
#vars: [[[ "http_age","==","18" ]]]