跳到主要内容

上下文与策略匹配器

这些 matcher 使用 mark、环境、时间、概率、速率限制或字符串表达式决定策略分支。

mark

作用

匹配上下文中的 mark 集合。

配置示例

- tag: marked_100
type: mark
args:
- "100"
- "200"

说明:

  • 参数会被解析为整数 mark。
  • 支持使用逗号或空白分隔多个 mark。
  • 只要上下文 marks 与配置 marks 有交集就算命中。

配置项

markargs 为 mark 列表。

  • 类型:array;必填:是;默认值:无
  • 作用:定义可命中的上下文标记集合。
  • 支持取值:
    • 无符号整数形式的 mark 值
  • 运行影响:
    • 只要上下文 marks 与配置 marks 存在交集,即返回 true

quick setup

- matches: "mark 100 200"

典型用途

  • 在多个 sequence 间传递分支状态。

env

作用

匹配进程环境变量。

配置示例

- tag: env_profile_prod
type: env
args:
- "PROFILE=prod"
- "FEATURE_X"

或只校验存在:

args:
- "FEATURE_X"

配置项

envargs 为环境变量条件列表。

  • 类型:array;必填:是;默认值:无
  • 元素定义:
    • KEY=VALUE:环境变量必须存在且值完全匹配,推荐用于环境变量等值匹配。
    • KEY:VALUE:与 KEY=VALUE 等价,作为规则表达式风格的别名保留。
    • KEY:环境变量存在即命中。
    • KEY:KEY=:显式存在性检查。
  • 数组中的每个字符串都会作为一个完整表达式解析,不会再按逗号或空白拆分;因此 NO_PROXY=localhost,127.0.0.1GREETING=hello world 这类值应写成单独的带引号数组项。
  • 运行影响:
    • 所有环境变量条件都满足时才返回 true
    • 环境变量值在插件 init 阶段缓存,运行中不会动态重新读取。

quick setup

- matches: "env PROFILE=prod FEATURE_X"

行为说明

  • KEY=VALUEKEY:VALUE 要求值完全匹配。
  • KEYKEY:KEY= 只检查变量是否存在。
  • ["PROFILE", "prod"] 表示同时检查 PROFILEprod 两个环境变量存在,不表示 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/ShanghaiUTC
  • 未配置时会解析系统时区;无法解析时插件初始化失败,不会静默退回 UTC。

periods

  • 类型:array;必填:是;数量:1..=64
  • 每项可配置 startendweekdaysmonthdays
  • 多项之间为 OR;同一项内所有已配置条件为 AND。
  • startend 均为 HH:MM,必须同时填写或同时省略;同时省略表示全天,但此时必须配置星期或月日条件。
  • 区间使用 [start, end);相同起止时间无效。end 早于 start 时表示跨午夜,星期和月日条件归属于开始日。
  • weekdays 支持大小写不敏感的 monsun,也支持 ISO 周序数字 1..=71=周一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"

配置项

randomargs 只接受一个概率值。

  • 类型:array;必填:是;默认值:无
  • 取值范围:0.01.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

推荐使用完整配置,以便显式控制 qpsburstmask

行为说明

  • 命中含义是“允许通过并消费一个令牌”。
  • 返回 false 表示当前限流,不允许通过。

Metrics

通过全局 GET /api/metrics 导出:

  • ratelimit_allowed_total
  • ratelimit_rejected_total

典型用途

  • 源地址维度的入口保护。