多彩编程 多彩编程MZPH · CODE BLOG
ARTICLE DETAIL

文章详情

深耕前端与后端开发技术的一线实战笔记与踩坑复盘。

如何用 Vector 的 aggregate 转换器对管道中的指标进行实时聚合

如何用 Vector 的 aggregate 转换器对管道中的指标进行实时聚合 如何用 Vector 的 aggregate 转换器对管道中的指标进行实时聚合【免费下载链接】vectorA high-performance observability data pipeline.项目地址: https://gitcode.com/GitHub_Trending/vect/vector当管道里的指标事件数量过多时——按量计费的成本上升、网络带宽吃紧、下游 sink 处理开销增大——可以在拓扑中插入一个aggregate转换器把同一指标序列name、namespace、tags 等相同的多个事件按固定时间窗口合并成一条输出用粒度换取体积。它适用于 Vector 拓扑中任何输出metric流的组件之后该转换器只接受 metrics 输入counter、gauge、distribution、histogram、set、summary 均支持不接受 logs 和 traces输出仍是 metrics。相关文档aggregate 转换器参考、元数据定义、示例配置。在拓扑中插入 aggregate 转换器在配置文件的transforms段中声明组件inputs指向输出指标的上游组件 id。最小可行配置只需要type、inputs和窗口大小transforms: my_transform_id: type: aggregate inputs: - my-source-or-transform-id interval_ms: 5000各字段说明interval_ms两次 flush 之间的间隔毫秒必须大于 0默认10000。窗口内属于同一序列的指标会被聚合窗口结束时聚合结果作为一条事件输出。mode聚合函数默认Auto增量指标求和、绝对值指标取最新值。可选值及行为如下mode对绝对值absolute指标对增量incremental指标Auto默认取最新值求和Sum原样透传求和Latest取最新值原样透传Count计数计数Diff取最新值并计算与上一窗口的差值原样透传Max/Min取最大 / 最小值原样透传Mean/Stdev取均值 / 标准差原样透传指定模式之外的mode值会在校验阶段报错interval_ms为 0 会被拒绝错误信息为interval_ms must be greater than 0。聚合语义增量求和、绝对值取最新文档明确给出的聚合规则是窗口内incremental指标按值相加absolute指标用后到的样本替换同一序列里先前的样本。例如两条值为 10 和 13 的incrementalcounter 会合并为一条值为 23 的 counter两条值为 93 和 95 的absolutegauge 会合并为一条值为 95 的 gauge。distribution、histogram、set、summary等复杂类型按其自身语义合并。官方文档中的完整示例interval_ms: 50005 条输入——同一序列counter.1hostmy.host.com两条增量 counter 值 1.1 和 2.2、另一 host 一条值 1.1、两条absolutegaugegauge.1值 22.33 和 44.55——输出 3 条counter.1my.host.com值为 3.3、counter.1different.host.com值保持 1.1、gauge.1值为 44.55。这是文档示例用于说明合并规则实际数值取决于你的指标流。需要按事件时间分桶时配置 event_time 块默认情况下指标按 Vector 处理它们的时刻划入窗口。当下游 sink 以指标自带的时间戳为键时例如 Datadog Metrics sink 会用相同时间戳后到的值覆盖先前的值不同样本可能被压成同一个点。此时加上event_time配置块指标会按事件自身的时间戳分桶桶边界对齐到 Unix epoch 的interval_ms整数倍——同一个源时间戳无论何时到达都落入同一个桶transforms: my_transform_id: type: aggregate inputs: - my-source-or-transform-id interval_ms: 5000 event_time: allowed_lateness_ms: 5000 max_future_ms: 60000 missing_timestamp: use_system_timeevent_time块的三个可选项及默认值allowed_lateness_ms迟到事件的宽限默认0严格模式。每个桶在系统时钟到达bucket_end allowed_lateness_ms前持续接收事件该截止时间在记录事件时即生效桶一旦输出就永久关闭之后落入该桶的事件被丢弃。max_future_ms时钟漂移防护默认10000。时间戳领先系统时钟超过该值的桶内事件被丢弃设为0表示允许任意未来的时间戳。missing_timestamp桶内指标缺少时间戳时的处理默认drop丢弃use_system_time表示用当前系统时间合成时间戳。按当前 mode 原样透传的指标不需要时间戳。两个行为边界需要注意配置了 event_time 后已输出桶的事件再迟到会被丢弃mean或stdev模式下的非 gauge 绝对值会被忽略既不聚合也不透传。输入流关闭时关停或拓扑重载所有未输出的桶会先全部 flush 再退出不会静默丢数据diff模式额外保留少量上一桶数据用于跨桶计算差值。校验配置并确认聚合在生效配置写入后先用vector validate做静态校验该命令检查配置语法与组件定义vector validate /etc/vector/vector.yaml/etc/vector/vector.yaml需替换为你的配置文件路径详见 校验文档。运行时可通过 Vector 的内部遥测指标确认聚合器在工作aggregate_flushes_total聚合器完成 flush 的次数每经过一个interval_ms窗口应增长aggregate_events_recorded_total被记入聚合桶的事件数aggregate_failed_updates聚合更新失败次数正常情况下应为 0component_discarded_events_totalevent_time 模式下因迟到、缺时间戳或时间戳过于超前而被丢弃的事件数。若开启 event_time 后该指标持续增长说明事件乱序或上游时钟偏差超过了allowed_lateness_ms/max_future_ms的容忍范围需要调大相应宽限。限制与后续阅读输入仅限 metrics 流把输出日志或 trace 的组件接到inputs上会在校验时失败。interval_ms必须大于 0event_time 模式下缺时间戳的桶内指标默认直接丢弃需要保留请显式设置missing_timestamp: use_system_time。聚合以降低粒度为代价文档指出的主要收益是降低按量计费成本、CPU 处理和收发带宽开销对 aggregate 之后的 transform 与 sink 同样适用。配置字段定义见 src/transforms/aggregate/config.rs聚合行为与事件时间分桶的完整说明见 website/cue/reference/components/transforms/aggregate.cue。【免费下载链接】vectorA high-performance observability data pipeline.项目地址: https://gitcode.com/GitHub_Trending/vect/vector创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表