Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Sink 配置

目录与文件组织

  • sink_root:用例内通常为 <case>/sink

    • business.d/**/*.toml:业务组路由(场景输出,支持子目录)
    • infra.d/**/*.toml:基础组路由(default/miss/residue/intercept/error/monitor,支持子目录)
    • defaults.toml:默认组级期望 [defaults.expect]
  • connectors/sink.d/*.toml:连接器定义(loader 自 sink_root 向上查找最近的该目录)

路由文件格式

  • 顶层
    • version(可选)
    • sink_group
      • name:组名(字符串)
      • oml / rule:推荐扁平写法;均可为字符串或字符串数组;用于匹配模型或规则。
      • expect:可选,组级期望(覆盖 defaults)
      • sinks:数组,每项为单个 sink 定义
  • 单个 sink 字段
    • name:该 sink 的名称(组内唯一);未提供则按 [index] 回退
    • connect:引用连接器 id(兼容读取 use/connector
    • params:对连接器默认参数的白名单覆盖(keys 必须在连接器 allow_override 列表中)
    • expect:可选,单 sink 期望(仅 ratio/tol/min/max,互斥关系:ratio/tol 与 min/max 不可混用)
    • filter:可选,拦截条件文件路径;命中 true 时丢弃该 sink 并发送至 intercept

配置示例:

基础组

version = "2.0"
[sink_group]
name = "intercept"

[[sink_group.sinks]]
name = "intercept"
connect = "file_kv_sink"
params = { base = "./out", file = "intercept.dat" }

业务组(filter)

version = "2.0"

[sink_group]
name = "/sink/filter"
oml  = ["/oml/sh*"]

[[sink_group.sinks]]
name = "all"
connect = "file_kv_sink"
params = { base = "./out/sink", file = "all.dat" }

[[sink_group.sinks]]
name = "safe"
connect = "file_kv_sink"
filter = "./sink/business.d/filter.conf"   # 命中 -> 拦截,不写 safe
params = { base = "./out/sink", file = "safe.dat" }

说明

  • 标识规则
    • 组名:sink_group.name(例如 /sink/example/simple)
    • sink 名:name(组内唯一;未显式提供时按索引回退为 [0]/[1]/…)
  • 过滤语义(filter)
    • filter 是“拦截条件”:表达式求值为 true 时,该条数据不写入该 sink,而是转发到基础组 intercept(framework/intercept)
    • 每个 sink 可独立设置 filter;与 expect 相互独立

校验提示

  • 分母决定:
    • basis = total_input:总输入
    • basis = group_input:该组各 sink 行数之和(或 stats 中该组输入)
    • basis = model:按模型粒度统计(目前以组内 sinks 行数之和替代)
  • min_samples:当分母为 0 或小于该值时,组校验被忽略(打印提示,不 fail)
  • 当 route 为非文件类写入 fmt 时,validate 会提示“fmt 由后端决定,已忽略”。

常见排错

  • 连接器未找到:检查 connectors/sink.d 是否存在对应 id;wproj sinks list 可查看引用关系
  • 覆盖参数不生效:检查 allow_override 白名单
  • filter 未生效:
    • 路径解析相对当前工作目录(建议写相对 sink_root 的相对路径)
    • 日志中会打印“found path/not found filter …”
    • 表达式语法需通过 TCondParser;可先用简单表达式试验