
Vector v0.24.0 版本深度解读OpenTelemetry 初探、VRL 类型系统强化与可观测性数据管道演进【免费下载链接】vectorA high-performance observability data pipeline.项目地址: https://gitcode.com/GitHub_Trending/vect/vector导读本文以 Vector 官方发布的 v0.24.0 release notes 为主体结合仓库内的升级指南website/content/en/highlights/2022-08-16-0-24-0-upgrade-guide.md与源码实现系统梳理该版本的新组件、VRL 语言变更、可观测性增强以及破坏性变更与迁移路径。读完本文你将掌握 0.24.0 引入的opentelemetry源、axiom/gcp_chronicle_unstructured目标、geoipenrichment table 等新能力的配置方式理解 VRL 编译期类型检查收紧后的迁移策略并能针对磁盘缓冲区与vectorsink 的数据模型变更做出安全的升级规划。Vector v0.24.0 于 2022-08-29 发布定位是向 OpenTelemetry 生态迈出第一步的里程碑版本它以opentelemetrysource 的形式首次提供 OTLP 日志接入能力同时为高基数内部指标引入了可配置的过期机制并在 VRL 编译器与类型定义层面做了大量收敛。发布说明的权威数据记录在 website/cue/reference/releases/0.24.0.cue升级细节见 0.24 Upgrade Guide。一、版本概览五个新组件与数据模型变更0.24.0 在组件数量上有了明显扩充发布说明中明确列出的新能力包括新增axiomsink用于将事件发送到 AxiomPR 13007。新增gcp_chronicle_unstructuredsink以非结构化事件形式向 GCP Chronicle 发送日志PR 13550源码位于 src/sinks/gcp_chronicle/。新增file_descriptorsource从文件描述符读取事件PR 13389源码位于 src/sources/file_descriptors/。新增opentelemetrysource接收来自 OpenTelemetry Collector 与 SDK 的日志数据PR 13320。新增gelfcodec用于在支持 codec 的 source/sink 上通过decoding.codec/encoding.codec编解码 GELF 数据PR 13228、13333。新增geoipenrichment table 类型并支持 MaxMindConnection-Type数据库PR 13338、13707源码见 src/enrichment_tables/geoip.rs。值得注意的是本版本包含一个向后不兼容的数据模型变更Histogram 指标的 bucket 计数字段从 32 位升级为 64 位u64直接影响vectorsinknative codec与磁盘缓冲区的数据兼容性。发布说明特别提示使用vectorsink 与磁盘缓冲区的用户在升级前务必阅读升级指南中的 Metric buckets 一节。二、OpenTelemetry 支持opentelemetrysource 初版落地这是 0.24.0 的 flagship 特性。发布说明的 whats next 栏目指出本版本提供的是初始形态的 OpenTelemetry 支持——以opentelemetrysource 消费来自 OpenTelemetry Collector 与 SDK 的日志指标与追踪traces的支持以及对应的opentelemetrysink 仍在规划中。从源码可以印证其实现形态src/sources/opentelemetry/config.rs 中引入了grpc::run_grpc_server_with_routes与logs::v1::logs_service_server::LogsServiceServer即通过 gRPC 协议暴露 OTLP Logs 服务。该源还提供了一个关键配置项logs布尔值true使用 OTLP 解码保留日志的 OTLP 原始格式false默认将日志转换为 Vector 的原生格式。此外仓库中还维护着独立的 lib/opentelemetry-proto/ 子 crate承载 OpenTelemetry 的 protobuf 定义可见该项目对 OTel 生态的投入是成体系的。配置示例sources: otlp_logs: type: opentelemetry address: 0.0.0.0:4317 logs: false sinks: console: type: console inputs: - otlp_logs encoding: codec: json使用场景将运行了 OpenTelemetry SDK 的应用例如 Java/Python 服务或 OTel Collector 的 OTLP 日志导出地址指向该 source即可让 Vector 作为统一日志入口。三、VRL 语言增强新函数与编译期行为收紧0.24.0 对 VRLVector Remap Language做了大量增强既有新增函数也有破坏性的编译期检查变更。3.1 新增filter函数PR 13411用于从对象中删除键、从数组中删除元素配合闭包按条件过滤。官方示例为过滤掉以checksum开头的 Kubernetes Pod annotations.kubernetes.pod_annotations filter(.kubernetes.pod_annotations) { |key, _value| !starts_with(key, checksum) }3.2flatten增加separator参数PR 13618flatten函数新增可选参数separator用于指定扁平化键名时的连接分隔符默认仍为.保持既有行为不变。3.3 新增is_ipv4/is_ipv6PR 13852两个用于判定 IP 地址版本的函数加入标准库便于在日志中区分 IPv4/IPv6 地址字段。3.4 破坏性变更VRL 拒绝在赋值时查询非集合类型的字段PR 13317此前以下代码可以静默地把foo的值从整数覆盖成对象容易造成意外赋值foo 1 foo.bar 20.24.0 起 VRL 编译器直接拒绝这类代码并给出类似如下诊断error[E642]: parent path segment rejects this mutation ┌─ :1:5 │ 1 │ foo.bar 3.14 │ --- ^^^ querying a field of a non-object type is unsupported │ │ │ this path resolves to a value of type integer │ try: change parent value to object, before assignment foo {} foo.bar 3.14正确写法是先显式把父值改写为对象/数组再执行字段或下标赋值foo 1 foo {} foo.bar 2这一限制对对象和数组同样生效——foo 42; foo[0] 3.14同样会被拒绝。3.5 破坏性变更VRL 类型定义修正PR 13619升级指南指出该版本修复了多处 VRL 类型定义type definition计算不准确的问题使编译器能在更多场景下精确推断值/字段类型。副作用是如果既有配置依赖了此前错误的类型推断升级后可能产生编译错误最常见的报错是函数的可失败性fallibility变化——例如某个参数的类型从确定的 string 变成了 string 或 nullerror[E110]: invalid argument type ┌─ :1:7 │ 1 │ split(msg, ) │ ^^^ │ │ │ this expression resolves to one of string or null │ but the parameter value expects the exact type string升级指南给出了四类修复策略参数类型不对就中止函数名后追加!如to_string!(msg)强制转换使用string/string!在运行时校验或中止提供默认值利用错误合并运算符??如to_string(msg) ?? default手动捕获错误同时接收返回值与错误如result, err to_string(msg)。整体方向是VRL 的类型系统更精确后配置对string()等强制转换函数的需求更少。四、可观测性增强指标过期、延迟直方图与基数度量4.1 全局expire_metrics配置PR 13872这是 0.24.0 在运维层面最重要的改进之一。发布说明指出internal_metricssource 暴露的内部指标存储新增了指标过期机制——通过全局配置expire_metrics设定时长后超过该时长未被更新的指标会被自动丢弃。这对kubernetes_logssource 等高基数场景尤其有价值这类 source 会用file等短暂但高基数的 tag 标记内部指标长期运行会导致 Vector 内存持续增长而过期机制可以有效缓解。发布说明同时注明本版本中的expire_metrics选项将被 0.24.1 的expire_metrics_secs取代默认关闭、需要显式开启未来可能改为默认启用。仓库中 src/topology/running.rs 等文件涉及相关实现。4.2 新增source_lag_time_seconds直方图PR 13611为 source 新增内部指标source_lag_time_seconds度量Vector 摄取事件的时间与事件自带时间戳之间的差值直方图用于量化管道积压/延迟程度。4.3internal_metrics_cardinality改为 gaugePR 13854internal_metricssource 原先通过internal_metrics_cardinality_totalcounter暴露内部指标存储的基数。由于过期机制的引入基数在运行期间会上下波动counter 语义不再准确。0.24.0 新增 gauge 类型指标internal_metrics_cardinality旧的_totalcounter 被标记为已弃用将在未来版本移除——这正是升级指南中列出的弃用事项之一。4.4 其他可观测性修复docker_logssource 现在正确为其发出的内部指标打上标准组件标签component_id、component_kind、component_type见 src/internal_events/docker_logs.rs 相关实现PR 13868。五、Sink 能力扩展认证、ack 与格式选项5.1prometheus_exportersink 新增suppress_timestampPR 13337用于在暴露指标时不输出时间戳便于某些抓取端对恒定时间戳的兼容要求。5.2 端到端确认acknowledgements支持扩展PR 13741/13744/13750/13755以下 sink 在 0.24.0 获得端到端确认支持papertrailsocketpulsarprometheus_exporterprometheus_remote_write5.3websocketsink 支持authPR 13632websocketsink 现在提供与httpsink 一致的认证配置项auth可配置 Authorization 请求头等源码见 src/sinks/websocket/。5.4 各类修复elasticsearchsink 在健康检查healthcheck时发送配置的请求头PR 13572。httpsink 在配置了proxy时证书校验现在能正确工作PR 13759。AWS 组件支持在 assume role 时通过auth.region指定区域默认沿用组件的regionPR 13838。六、Source 与 Transform 修复sampletransform 现在可以对 trace 事件进行采样PR 13610。host_metricssource 为host_cpu_seconds_total新增modeiowaitPR 13696新增physical_cpus/logical_cpus两个 gauge辅助解读load*指标PR 13874同时改进了混合 cgroup 环境下的指标获取PR 13719。mongodb_metricssource 修正bytes_written_from超过 32 位整数时的解码问题扩展至 64 位PR 13656。execsource 在关闭时改为向子进程发送 SIGTERM 等待其优雅退出仅 *nixWindows 上仍为强制终止PR 11907。prometheus_scrapesource 的 histogram bucket 计数改用无符号 64 位整数避免抓取高计数 bucket 的端点时报溢出错误PR 13318。修复 reload 时组件被删除后又重新添加导致 panic 的问题PR 13375修复 reload 存在索引更新的 enrichment table 后 panic 的问题PR 13704。七、破坏性变更与迁移指南升级指南共列出 6 项 breaking changes 和 4 项 deprecations本节聚焦最需要行动的几项。7.1 Metric bucket 计数升级为 u64数据模型变更Histogram bucket 计数字段由 32 位升级为 64 位相应更新了事件持久化所需的 proto 文件。新版 Vector 能读旧版指标旧版 Vector 可能无法读新版指标。因此如需回滚到旧版本请先备份磁盘缓冲区位置见 data_dir 全局配置升级vectorsource/sink 或nativecodec 链路时先升级消费端再升级生产端避免新版 Vector 向旧版发送其无法读取的数据。7.2 sinkencoding.codec必须显式指定此前以字符串简写形式设置encoding的做法0.23.0 起已弃用在本版本移除。所有 sink 必须显式写成encoding.codec。同理encoding取值ndjson被移除需要改用json编码 newline_delimitedframing 组合。7.3 弃用 transforms 正式移除升级指南列出的 17 个被弃用 transform 已在本版本移除包括add_fields、add_tags、ansi_stripper、coercer、concat、grok_parser、json_parser、key_value_parser、logfmt_parser、merge、regex_parser、remove_fields、remove_tags、rename_fields、split、tokenizer等统一由remaptransform 与 VRL 承担同类职责。7.4geoiptransform 弃用迁移到 enrichment tablegeoiptransform 被弃用取而代之的是新的geoipenrichment table可与 VRL 的 enrichment table 函数get_enrichment_table_record!等配合基于 MaxMind GeoIP 数据库为事件补充地理信息。官方迁移示例enrichment_tables: geoip_table: path: /etc/vector/GeoLite2-City.mmdb type: geoip transforms: geoip: type: remap inputs: - with_ip_info source: |- .geoip get_enrichment_table_record!(geoip_table, { ip: .ip_address }从源码 src/enrichment_tables/geoip.rs 可以看到该 enrichment table 支持 City/Country/ISP/Anonymous IP/Connection-Type 等 MaxMind 数据库种类并新增了对Connection-Type数据库识别网络连接类型的支持。7.5 其他弃用%取模运算符弃用改用新增的mod函数便于未来复用%语法查询事件元数据%最早可能在 0.25.0 移除。一组组件旧名称将随 0.25.0 移除包括generator→demo_logs、docker→docker_logs、logplex→heroku_logs、prometheus(source)→prometheus_scrape、swimlanes→route、sampler→sample、new_relic_logs→new_relic、prometheus(sink)→prometheus_exporter、splunk_hec→splunk_hec_logs。八、已知问题Known Issues发布说明如实记录了 0.24.0 的若干已知问题均在后继补丁版本修复问题修复版本host_metrics的物理/逻辑 CPU 数量指标被错误实现为cpu_seconds_total的新 mode 而非新 gauge0.24.1vector top及file等 sink 从internal_metricssource 读取指标时显示的是增量值而非绝对值0.24.1本版本新增的expire_metrics_secs选项未正确生效0.24.2对接受字段名的选项传入空字符串会触发 panic此前是禁用该选项0.24.2本版本本应为datadog_metricssink 增加 rate 指标发送支持但发布前出现回归0.24.2使用闭包的 VRL 代码偶尔返回错误的类型错误block returns invalid value type0.24.2九、升级建议小结综合发布说明与升级指南从 0.23.x 升级到 0.24.0 时建议按以下顺序执行先规划数据链路升级顺序若使用vectorsink 或 native codec 互连、磁盘缓冲区先升级消费端、后升级生产端并备份磁盘缓冲区数据目录检查 VRL 配置运行vector validate与vector tap之前的本地配置校验优先让编译器指出的 E110/E642 等错误引导修改对依赖旧类型推断的split、string()等用法按升级指南四类策略修正规范化编码配置将 sink 的encoding字符串简写改写为encoding.codecndjson改为jsonnewline_delimited替换已移除 transforms将grok_parser、json_parser、coercer等改写为remap中的对应 VRL 函数评估指标过期选项若长期运行出现内存随高基数标签增长可显式开启expire_metrics0.24.1 起为expire_metrics_secs缓解关注弃用清单为新版本移除的组件旧名0.25.0与%运算符做准备geoiptransform 用户尽快迁移到geoipenrichment table。十、延伸阅读版本发布说明原始数据website/cue/reference/releases/0.24.0.cue升级指南全文website/content/en/highlights/2022-08-16-0-24-0-upgrade-guide.mdopentelemetrysource 实现src/sources/opentelemetry/config.rsgeoipenrichment table 实现src/enrichment_tables/geoip.rsOpenTelemetry protobuf 定义lib/opentelemetry-proto/src/Axiom sinksrc/sinks/axiom/GCP Chronicle sinksrc/sinks/gcp_chronicle/全局配置与 data_dir 说明config/vector.yaml【免费下载链接】vectorA high-performance observability data pipeline.项目地址: https://gitcode.com/GitHub_Trending/vect/vector创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考