Vector 如何用 sample 转换器按采样率丢弃事件以降低数据量
【免费下载链接】vectorA high-performance observability data pipeline.项目地址: https://gitcode.com/GitHub_Trending/vect/vector
日志、trace 流量过大时,可以先在管道里按比例丢弃大部分事件,只把采样后的数据送到下游 sink。Vector 的sample转换器就干这件事:按你配置的采样率转发事件,未命中采样策略的事件被直接丢弃。它的开发状态为 stable,支持 log 和 trace 事件(不支持 metrics),见 sample 组件元数据。
选择采样策略:rate还是ratio
配置sample转换器时,rate和ratio必须且只能设置其中一个:
rate:以1/N表达。例如rate = 1500表示每 1500 个事件转发 1 个,其余丢弃。ratio:以百分比表达。例如ratio = 0.13表示转发流中 13% 的事件,其余丢弃。它支持比rate更精确的取值,也能保留超过 50% 的事件。
最简配置如下(取自仓库生成的示例配置 minimal.yaml):
transforms: my_transform_id: type: sample inputs: - my-source-or-transform-id ratio: 0.13inputs中的my-source-or-transform-id是占位符,需要替换为你管道里真实存在的 source 或 transform 的 ID,替换后配置即可被vector validate校验。
如果想让下游知道每个事件实际按什么速率被采样,可以配置sample_rate_key:命中的事件会被写入这个字段,默认值为sample_rate;设为空字符串则不把采样率写进事件。
完整配置示例
下面是一条完整的采样管道示例,rate: 100表示只保留约 1/100 的事件,保留的事件写入sample_rate字段;inputs和 sink 的type按你的实际组件替换:
transforms: sample-100: type: sample inputs: - my-source-or-transform-id # 替换为真实的 source/transform ID rate: 100 sample_rate_key: sample_rate sinks: my-sink: type: blackhole inputs: - sample-100验证采样是否生效
校验配置。用 validate 命令检查配置,路径换成你自己的配置文件:
vector validate /etc/vector/vector.yaml启动 Vector:
vector --config /etc/vector/vector.yaml(同样替换为你的配置路径)。检查保留事件。下游收到的每个事件都会带有
sample_rate字段,值为该事件实际生效的采样率(例如配置ratio = 0.1时字段值为"0.1",配置rate = 25时为"25",以上为 测试代码 中的示例值)。如果你的日志里出现带sample_rate字段、且数量约为原来的 1/100 的事件,说明采样在正常工作。确认丢弃行为。每个被丢弃的事件都会触发一个内部指标:
ComponentEventsDropped,reason 为Sample discarded.,标记为 intentional(见 src/internal_events/sample.rs)。在 Vector 的遥测输出里能看到该指标持续计数,即可确认事件确实被按预期丢弃,而不是卡住或误路由。
可选:按字段分组或按键采样
基础配置之外,sample还有几个可选配置项,来自 sample 生成配置定义:
group_by:模板字符串,如"{{ service }}"或"{{ hostname }}-{{ service }}"。每个渲染后的取值形成一个独立桶,采样率独立地在每个桶内应用,适合让每个 service 各自按同一比例采样。key_field:指定一个字段名(示例值message)。该字段的每个唯一值会哈希成一个桶,采样率作用在桶上而不是单个事件上——例如可以让同一笔交易的所有日志要么全保留、要么全丢弃。注意:如果字段取值分布不均匀,整体采样率可能与配置值有偏差;key_field不能与rate_field/ratio_field同时使用。exclude:一个逻辑条件,命中该条件的事件不做采样、直接放行。通过exclude放行的事件不会写入sample_rate字段,适合保留少量必须全量留存的关键事件(如错误日志)。
可选:按事件字段动态调整采样率
如果希望采样率随事件内容变化,可以用rate_field或ratio_field指定事件中的字段名,逐事件取值作为采样率:
rate_field:字段值必须是正整数(或可解析为正整数的字符串),按1/N生效;浮点数会被拒绝。ratio_field:字段值必须是(0, 1]区间内的数字(例如0.25保留 25%)。
两者只能选一个,且字段缺失或取值非法时会回退到静态的rate/ratio配置。group_by也可以与它们组合,让不同分组各自独立应用动态采样率。
配置错误的识别方式
以下错误信息在配置校验阶段(vector validate或启动时)直接给出,对应实现见 src/transforms/sample/config.rs:
| 错误信息 | 触发条件 |
|---|---|
Only one value can be provided for either 'rate' or 'ratio', but not both | rate和ratio同时配置 |
Exactly one value must be provided for either 'rate' or 'ratio' to configure static sampling | rate和ratio都未配置 |
Only non-zero numbers are allowed values for 'rate' | rate为 0 |
Only positive, non-zero numbers are allowed values for 'ratio', value: ... | ratio小于或等于 0 |
Only one value can be provided for either 'ratio_field' or 'rate_field', but not both | 两个动态字段同时配置 |
'key_field' cannot be combined with 'ratio_field' or 'rate_field' because dynamic values can vary per event and break key-based coherence | key_field与动态字段混用 |
限制
- 输入输出只支持 log 和 trace 事件,metrics 事件不能进入
sample转换器。 - 使用
key_field时,若字段取值分布不均匀,整体保留率可能与配置值不一致;未配置key_field或事件缺少该字段时,事件按独立方式采样。 exclude命中事件全量保留,会部分抵消采样率,配置时要预估这部分流量。
参考文档:sample 转换器参考、sample 配置生成定义、配置校验。
【免费下载链接】vectorA high-performance observability data pipeline.项目地址: https://gitcode.com/GitHub_Trending/vect/vector
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考