上下文与策略匹配器
这些 matcher 使用 mark、环境、时间、概率、速率限制或字符串表达式决定策略分支。
mark
作用
匹配上下文中的 mark 集合。
配置示例
- tag: marked_100
type: mark
args:
- "100"
- "200"
说明:
- 参数会被解析为整数 mark。
- 支持使用逗号或空白分隔多个 mark。
- 只要上下文 marks 与配置 marks 有交集就算命中。
配置项
mark 的 args 为 mark 列表。
- 类型:
array;必填:是;默认值:无 - 作用:定义可命中的上下文标记集合。
- 支持取值:
- 无符号整数形式的 mark 值
- 运行影响:
- 只要上下文 marks 与配置 marks 存在交集,即返回
true。
- 只要上下文 marks 与配置 marks 存在交集,即返回
quick setup
- matches: "mark 100 200"
典型用途
- 在多个 sequence 间传递分支状态。
env
作用
匹配进程环境变量。
配置示例
- tag: env_profile_prod
type: env
args:
- "PROFILE=prod"
- "FEATURE_X"
或只校验存在:
args:
- "FEATURE_X"
配置项
env 的 args 为环境变量条件列表。
- 类型:
array;必填:是;默认值:无 - 元素定义:
KEY=VALUE:环境变量必须存在且值完全匹配,推荐用于环境变量等值匹配。KEY:VALUE:与KEY=VALUE等价,作为规则表达式风格的别名保留。KEY:环境变量存在即命中。KEY:或KEY=:显式存在性检查。
- 数组中的每个字符串都会作为一个完整表达式解析,不会再按逗号或空白拆分;因此
NO_PROXY=localhost,127.0.0.1、GREETING=hello world这类值应写成单独的带引号数组项。 - 运行影响:
- 所有环境变量条件都满足时才返回
true。 - 环境变量值在插件
init阶段缓存,运行中不会动态重新读取。
- 所有环境变量条件都满足时才返回
quick setup
- matches: "env PROFILE=prod FEATURE_X"
行为说明
KEY=VALUE和KEY:VALUE要求值完全匹配。KEY、KEY:和KEY=只检查变量是否存在。["PROFILE", "prod"]表示同时检查PROFILE和prod两个环境变量存在,不表示PROFILE == prod。- quick setup 使用空白分隔多个表达式;如果值本身包含空格,请使用完整
args数组配置。
典型用途
- 同一配置在不同部署环境下启用不同分支。
time
作用
按当前墙上时间匹配日内时间段、星期和每月日期。
配置示例
- tag: work_hours
type: time
args:
timezone: Asia/Shanghai
periods:
- start: "09:00"
end: "18:00"
weekdays: [mon, tue, wed, thu, fri]
- start: "22:00"
end: "02:00"
weekdays: [sat, sun]
- monthdays: [1, 15]
配置项
timezone
- 类型:
string;必填:否;默认值:系统时区 - 使用 IANA 时区名称,例如
Asia/Shanghai、UTC。 - 未配置时会解析系统时区;无法解析时插件初始化失败,不会静默退回 UTC。
periods
- 类型:
array;必填:是;数量:1..=64 - 每项可配置
start、end、weekdays与monthdays。 - 多项之间为 OR;同一项内所有已配置条件为 AND。
start与end均为HH:MM,必须同时填写或同时省略;同时省略表示全天,但此时必须配置星期或月日条件。- 区间使用
[start, end);相同起止时间无效。end早于start时表示跨午夜,星期和月日条件归属于开始日。 weekdays支持大小写不敏感的mon至sun,也支持 ISO 周序数字1..=7(1=周一,7=周日);monthdays支持1..=31。不存在该日期的月份不会命中。
quick setup
- matches: "time 09:00-18:00"
quick setup 仅支持系统时区下的单个每日窗口;星期、月日和显式时区请使用完整配置。
行为说明
- matcher 在执行时读取真实墙上时间;系统校时会立即影响后续判断。
- 夏令时跳过的本地时间不会出现;重复小时中的两个实际时刻都会按相同钟面规则判断。
- 独立 Linux 或精简容器中配置 IANA 时区时,应确保系统提供
tzdata。
典型用途
- 工作日办公时段走特定上游。
- 夜间或周末切换缓存、分流或家长控制策略。
random
作用
按概率命中。
配置示例
- tag: rollout_10p
type: random
args:
- "0.1"
配置项
random 的 args 只接受一个概率值。
- 类型:
array;必填:是;默认值:无 - 取值范围:
0.0到1.0 - 作用:定义本次匹配返回
true的概率。 - 运行影响:
0.0表示始终不命中。1.0表示始终命中。
quick setup
- matches: "random 0.05"
典型用途
- 灰度放量。
- 抽样日志或观测。
rate_limiter
作用
基于客户端 IP 的令牌桶限流。
配置示例
- tag: qps_guard
type: rate_limiter
args:
qps: 20
burst: 40
mask4: 32
mask6: 48
配置项
qps
- 类型:
number;必填:否;默认值:20 - 作用:定义每秒令牌补充速率。
- 运行影响:
- 值越大,单位时间内允许通过的请求越多。
burst
- 类型:
integer;必填:否;默认值:40 - 作用:定义令牌桶容量上限。
- 运行影响:
- 值越大,短时间内允许的突发请求越多。
mask4
- 类型:
integer;必填:否;默认值:32 - 作用:定义 IPv4 客户端聚合粒度。
- 运行影响:
- 值越小,多个 IPv4 客户端越容易共享同一个限流桶。
mask6
- 类型:
integer;必填:否;默认值:48 - 作用:定义 IPv6 客户端聚合粒度。
- 运行影响:
- 值越小,多个 IPv6 客户端越容易共享同一个限流桶。
quick setup
推荐使用完整配置,以便显式控制 qps、burst 和 mask。
行为说明
- 命中含义是“允许通过并消费一个令牌”。
- 返回
false表示当前限流,不允许通过。
Metrics
通过全局 GET /api/metrics 导出:
ratelimit_allowed_totalratelimit_rejected_total
典型用途
- 源地址维度的入口保护。