ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

Vector v0.18.0 发布解读:失败事件路由、CSV 富化表、throttle 变换与升级迁移指南

Vector v0.18.0 发布解读:失败事件路由、CSV 富化表、throttle 变换与升级迁移指南 Vector v0.18.0 发布解读失败事件路由、CSV 富化表、throttle 变换与升级迁移指南【免费下载链接】vectorA high-performance observability data pipeline.项目地址: https://gitcode.com/GitHub_Trending/vect/vector本篇技术指南围绕 Vector 开源观测数据管道 v0.18.0 版本发布说明展开系统梳理该版本新增的失败事件路由failed event routing、CSV 富化表enrichment tables、throttle变换、隐式命名空间与aws_sqs源等核心特性完整覆盖 5 项破坏性变更的迁移路径与已知问题清单并结合当前仓库源码与配置示例给出可复现的实战配置。读完本文你将掌握 v0.18.0 的功能全貌并能快速将存量配置平滑升级到新版本。一、版本概览Vector v0.18.0 于 2021-11-18 发布是继 0.17.x 系列之后的一个功能密集版本。除了多个新组件与新概念落地本版本还包含多项破坏性变更breaking changes官方专门发布了 0.18 升级指南 引导用户迁移。完整变更明细可在发布说明元数据 website/cue/reference/releases/0.18.0.cue 中查看。同版本还一并发布了统一的新vectorHelm Chart。该 Chart 既可以作为 agent 部署也可以作为 aggregator 部署因此取代了原有的vector-agent与vector-aggregator两个 Chart。仓库中仍保留了原有角色的参考清单distribution/kubernetes/vector-agent、distribution/kubernetes/vector-aggregator但从 0.18.0 起官方推荐向统一 Chart 迁移。二、新特性与功能亮点2.1 失败事件路由remap变换的.dropped输出本版本引入了从变换路由失败事件的初始支持首发落地在remap变换上这也是后续多输出变换拓扑能力的起点相关提交为 PR 9169 / 9417。此前事件在变换中处理失败时要么被丢弃要么继续流向下一环节用户无法按需处置。现在可以通过两个配置开关组合启用失败路由drop_on_error true发生错误时丢弃事件而不是放行reroute_dropped true将原本会被丢弃的事件重定向到.dropped输出供下游单独消费启用后可以用组件ID.dropped作为另一组件的输入。完整示例源自 2021-11-18-failed-event-routing.md[sources.in] type demo_logs format shuffle interval 1.0 lines [ { message: valid message, foo: bar}, { message: valid message, foo: baz}, invalid message, ] [transforms.my_remap] type remap inputs [in] drop_on_error true drop_on_abort true reroute_dropped true source . | object!(parse_json!(.message)) if .foo baz { abort } .processed true [sinks.foo] type console inputs [my_remap] encoding.codec json [sinks.bar] type console inputs [my_remap.dropped] # 注意新的 .dropped 后缀 encoding.codec json运行后两条合法 JSON 事件其中.foo baz的事件因abort被重定向由foosink 输出并附带processed字段而invalid message这类无法解析的事件则进入barsink并自动携带失败元数据{ message: invalid message, metadata: { dropped: { component_id: my_remap, component_type: remap, component_kind: transform, message: function call error for \object\ ... unable to parse json ..., reason: error } } }其中metadata键可通过全局log_schema.metadata_key配置调整。该特性非常适合将失败事件转储到专门 sink 用于存储、排查与重放。需要说明的是0.18.0 中单元测试尚不支持对失败事件进行断言官方计划在后续版本补充。2.2 CSV 富化表Enrichment Tables富化表enrichment tables是 v0.18.0 引入的全新概念从外部数据源富化流经拓扑的事件。首个实现是 CSV 文件富化通过 VRL 函数按条件查找行并映射进事件。相关实现位于 src/enrichment_tables 目录含file.rs与内存实现 src/enrichment_tables/memory对应的两个新 VRL 函数定义在 lib/vector-vrl/functions 中get_enrichment_table_record按条件查找并返回单行find_enrichment_table_records返回匹配的多个行数组用于更复杂的场景以 IoT 设备日志富化为例示例源自 2021-11-18-csv-enrichment.md。假设 CSV 文件iot_remap.csv内容为code,message 1,device battery full 2,device battery good 3,device battery ok 4,device battery low 5,device battery critical先在配置中声明富化表[enrichment_tables.iot_remap] type file [enrichment_tables.iot_remap.file] path /etc/vector/iot_remap.csv encoding { type csv } [enrichment_tables.iot_remap.schema] code integer message string然后在remap变换中调用富化函数将设备发出的数字编码翻译为可读信息[transforms.enrich_iot_logs] type remap inputs [vector_agents] source . parse_json!(.message) code del(.code) row get_enrichment_table_record!(iot_remap, { code: code }) .message row.message 这种模式可以让设备端保持小体积载荷在管道内完成数据格式化与上下文增强。仓库中富化表测试数据可参考 tests/data 下的 CSV 文件。官方后续计划补充or条件的支持以及更多富化表类型如 Redis。2.3throttle变换控制成本与限速为帮助用户控制成本v0.18.0 新增了throttle变换。该变换基于配置的窗口window参数在 0.18.0 开发中曾由其他命名更名为window见提交 PR 10095与阈值对事件进行限流。相关实现位于 src/transforms/throttle.rs并配套有专门的 throttle 变换介绍 与throttleRFCrfcs 目录。基准测试用例见 benches/transform/throttle.rs该文件位于 benches/transform 目录实测时请以仓库当前文件为准。2.4 隐式命名空间从文件与目录名推导配置v0.18.0 大幅改善了将 Vector 配置拆分为多个文件的能力通过--config-dir加载配置时可以从文件与目录名自动推导组件命名空间相关提交为 PR 9701Implicit namespacing based on the config directory structure。例如以目录名作为sources/transforms/sinks的顶层键配合文件名作为组件 ID可以省去显式声明使多文件配置的组织方式更加清晰。仓库参考示例见 config/examples/namespacing。配套的自动命名空间说明见 2021-11-18-implicit-namespacing.md。2.5 新源aws_sqs新增aws_sqs源用于从 AWS SQS 队列消费消息并转换为日志事件实现位于 src/sources/aws_sqs。这使得以 SQS 为消息中转的日志链路可以直接接入 Vector 管道。三、增强与可观测性改进3.1 Sink 缓冲区的可观测性指标v0.18.0 为 sink 缓冲区补充了完整埋点便于监控缓冲区运行状态提交 PR 9327、9584。新增指标如下指标说明适用缓冲类型buffer_byte_size缓冲区中的字节数仅磁盘缓冲buffer_events缓冲区中的事件数仅内存缓冲buffer_received_event_bytes_total缓冲区累计接收的字节数不含被丢弃事件全部buffer_sent_event_bytes_total从缓冲区发送给关联 sink 的累计字节数全部buffer_received_events_total缓冲区累计接收的事件数不含被丢弃事件全部buffer_sent_events_total从缓冲区发送给关联 sink 的累计事件数全部buffer_discarded_events_total因缓冲区已满而被丢弃的累计事件数当when_full为drop_newest时相关全部3.2 日志级别环境变量$LOG更名为$VECTOR_LOG配置日志级别的环境变量由$LOG更名为$VECTOR_LOG提交 PR 9743。为了向后兼容$LOG仍然被接受但官方建议迁移到新变量以避免与其他通用环境变量冲突。3.3 其他值得关注的增强log_to_metric支持绝对计数器除相对计数器外新增kind absolute可发射绝对计数器值。prometheus_exporter指标过期距离上次 flush由flush_interval_secs控制后未再出现的指标会被清理避免长期占用内存。端到端确认E2E acknowledgements扩展至aws_kinesis_firehose源、journald源与filesink。datadog_metricssink 支持分布数据可向 Datadog 发送直方图与聚合样本等分布数据。kubernetes_logs源增强日志在可用时标注pod_owner同时通过允许使用略有过期的元数据进行富化降低对 Kubernetes API server 与 etcd 的压力。generator源更名为demo_logs名称更贴合其用途同时保留别名以兼容旧配置。heroku_logs源支持framing与decoding与 v0.17.0 引入的 source codecs 能力对齐。VRL 诊断改进当变量未定义时诊断信息会提示null、true或false引导用户意识到 VRL 中不存在nil这类关键字。papertrailsink 支持可模板化的process字段可将process设置为事件字段值。utilization指标更精确多数变换不再把阻塞在下游组件上的时间计为忙碌时间使该指标更能反映变换自身耗时。aws_s3sink 提前乐观关闭连接减少在 AWS 超时之前被动断连的情况。四、破坏性变更与升级指南重点本版本共 5 项主要破坏性变更官方升级指南见 2021-11-18-0-18-0-upgrade-guide.md。4.1batch.max_size不再有效 → 改用batch.max_bytes/batch.max_eventsbatch.max_size过去被各 sink 按自身理解解释为字节数或事件数语义含糊。本版本将其彻底移除配置中需明确使用batch.max_bytes按字节限制或batch.max_events按事件数限制。升级时只需做如下替换# 旧配置 [batch] max_size 1000000 # 新配置按字节 [batch] max_bytes 1000000 # 新配置按事件数 [batch] max_events 10004.2request.in_flight_limit不再有效 → 改用request.concurrencyrequest.concurrency与request.in_flight_limit在内部一直按同一语义处理本版本正式移除后者。将配置中所有request.in_flight_limit重命名为request.concurrency即可完成迁移# 旧配置 [request] in_flight_limit 8 # 新配置 [request] concurrency 84.3http_client_responses_total的status标签只保留数字状态码http_client_responses_total内部指标的status标签此前会包含状态码文本例如200 OK。本版本起仅保留数字200便于下游指标系统按2xx等区间聚合。4.4metric_to_log变换的聚合摘要字段upper_limit→qmetric_to_log变换输出聚合摘要aggregated summaries时保存分位数的字段由upper_limit更名为qquantile 的通用缩写。upper_limit是早期指标实现的历史遗留命名只适用于聚合直方图、不适用于聚合摘要。4.5datadog_metricssink 移除废弃字段host与namespacedatadog_metricssink 中已废弃的host与namespace字段在本版本移除请迁移到endpoint与default_namespace# 旧配置 [datadog_metrics] host https://api.datadoghq.com namespace app # 新配置 [datadog_metrics] endpoint https://api.datadoghq.com default_namespace app4.6 其他破坏性移除exec源移除event_per_line该选项自 0.17.0 起已失效但一直被允许配置。请改用新的framing选项在每行一个事件与整段输出作为一个事件之间选择。五、已知问题清单官方在发布说明中如实记录了以下已知问题多数已在后续补丁版本修复elasticsearchsink 会为每条投递的事件错误地打印一条消息v0.18.1 修复。内部遥测变更导致prometheus_exporter与prometheus_remote_writesink 输出的聚合直方图统计不正确v0.18.1 修复。自动命名空间功能导致从官方 RPM 运行时Vector 尝试加载/etc/vector下无效目录而启动失败v0.18.1 修复。remap的新reroute_dropped特性即使设为false也会创建dropped输出v0.18.1 修复。kafkasink 的headers_key选项被误改为headers_fieldv0.19.0 修复。使用--config-dir时Vector 会错误地尝试加载未知扩展名的文件v0.19.0 修复。使用固定编码无encoding.codec的 sink 上encoding.only_fields反序列化失败v0.19.2 修复。v0.19.2 之前可用以下写法规避# 将 encoding.only_fields [message, foo.bar] # 改为 encoding.only_fields [[message], [foo, bar]]升级到 v0.19.2 及以上时需改回原始表示形式。六、性能与稳定性修复--threads重新生效配置线程数--threads真正影响运行时行为修复了 v0.13 起一直使用可用核心数的回归PR 9527。配置热重载不再崩溃当重载的配置同时变更组件输入顺序与其中一个输入的配置时不再触发崩溃。多个 sink 死锁修复修复aws_s3、loki、datadog_logssink 的锁死问题。Windows 服务内存泄漏修复修复以 Windows 服务方式运行时出现的内存泄漏。aws_s3sink 前缀回归修复修复 v0.17.0 中在用户提供的前缀后追加/的回归恢复原有行为。component_sent_bytes_total上报时机修正改为在事件成功发送到 HTTP 系 sink 之后上报而不是发送前。influxdb_*sink 健康检查端点调整influxdb_metrics与influxdb_logs改用/ping进行健康检查以兼容 InfluxDB 2 Cloud。七、展望与后续方向发布说明的whats_next部分明确了两个后续重点组件指标标准化目标让所有 Vector 组件上报一致的指标集合便于统一监控其规范见 docs/specs/instrumentation.md。VRL 迭代支持针对日志事件结构未知时遍历键值的常见需求官方已发布 RFC对应 rfcs/2021-08-29-8381-vrl-iteration-support.md并计划在当季度实现。结语v0.18.0 是 Vector 在失败事件处置、外部数据富化、成本控制与配置组织四个方向上的重要里程碑.dropped输出让管道具备失败隔离能力富化表打通了外部静态数据的 VRL 查询链路throttle为成本管控提供了原生手段隐式命名空间则让大规模多文件配置更易维护。若你的存量配置使用了batch.max_size、request.in_flight_limit、datadog_metrics.host/namespace、exec.event_per_line等被移除的参数请务必按本文第四节逐项迁移再结合第三节的缓冲区指标与VECTOR_LOG完成升级后的观测验证。【免费下载链接】vectorA high-performance observability data pipeline.项目地址: https://gitcode.com/GitHub_Trending/vect/vector创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表