Vector v0.50.0 发布深度解析:OTLP 原生解码、Varint 帧协议与增量指标转换
【免费下载链接】vectorA high-performance observability data pipeline.项目地址: https://gitcode.com/GitHub_Trending/vect/vector
本文基于 Vector 开源仓库中 v0.50.0 版本的官方发布数据(发布数据源 与 发布页面,发布日期为 2025-09-23),系统梳理该版本的核心能力:opentelemetry源的 OTLP 原生解码、varint_length_delimited帧协议、全新的incremental_to_absolute转换器与okta源,并逐一解析 Breaking Change 与全部 changelog 条目。读完本文,你将掌握 v0.50.0 新增组件的配置方式、行为变化及升级注意事项,并能在 config/examples 的示例与src/源码中定位对应实现,作为深入学习的起点。
版本概览
Vector v0.50.0 于 2025-09-23 发布,是一个以"消除事件重映射、打通 OTEL 生态"为主线的新特性版本。该版本的发布说明由三部分数据构成,全部维护在当前仓库中:
- website/content/en/releases/0.50.0.md:发布页面的元数据入口(title 与导航权重);
- website/cue/reference/releases/0.50.0.cue:真正的发布内容,包含日期、Release Highlights、19 条 changelog、VRL 变更与全部 commit 记录;
- changelog.d:版本期间贡献的 changelog 片段目录(遵循 towncrier 约定,详见 changelog.d/README.md),发布时被汇总进 releases 目录。
date: "2025-09-23"版本期间仓库本身也完成了多项工程底座升级,包括升级到 Rust 2024 edition、Rust 1.89、async-nats0.33 → 0.42,以及 757 个文件的 nightly rustfmt 格式化统一,这些为后续版本的功能迭代打下了基础。
Release Highlights:五个值得关注的核心变化
官方将该版本定义为 5 个高光特性,下面逐一展开并结合源码佐证。
1.opentelemetry源支持 OTLP 原生解码(use_otlp_decoding)
v0.50.0 之前,opentelemetry源会把收到的 OTLP 数据转换为 Vector 原生事件格式,再做下游处理。本版本引入了解码模式开关use_otlp_decoding:开启后,logs、metrics、traces 全部保持 OTLP 格式,事件可以直接转发给opentelemetrysink 或任何期望 OTLP 遥测的系统,无需再写复杂的 VRL 事件重映射,大幅简化了 OTEL → Vector → OTEL 的链路配置。
在源码 src/sources/opentelemetry/config.rs 中,该配置同时支持布尔值与按信号类型细分的对象两种形态:
use_otlp_decoding: true # 所有信号保持 OTLP 格式 # 或 use_otlp_decoding: false # 所有信号转换为 Vector 原生格式(默认) # 按信号细分: use_otlp_decoding: logs: false # 转换为 Vector 原生格式 metrics: false # 转换为 Vector 原生格式 traces: true # 保持 OTLP 格式需要特别留意源码注释中强调的两个要点:
- OTLP 指标格式与 Vector 指标格式不同,因此当对 metrics 开启 OTLP 解码时,指标会以Vector log 事件的形式输出;
- 这些 log 事件不能用于现有的 metrics 转换器(transform),但可以被下游 OTEL Collector 作为指标正常摄取。
这意味着"OTLP 透传"场景应优先选用此模式,而需要执行 Vector 指标转换(如filter、metric_to_log等)的场景则必须保持默认的 Vector 原生格式。
2. 新增varint_length_delimited帧协议
为兼容标准的 protobuf 流式传输实现以及 ClickHouse 等工具,v0.50.0 新增了varint_length_delimited帧方式。其默认值仍是 length-delimited,用户需要在配置中显式声明以选择新协议。
仓库中提供了完整的可运行示例 config/examples/varint_framing_protobuf.yaml,源侧与汇侧(sink)均需显式声明:
sources: protobuf_source: type: socket mode: tcp address: "0.0.0.0:8080" decoding: codec: protobuf protobuf: desc_file: "path/to/your/protobuf.desc" message_type: "your.package.MessageType" framing: method: varint_length_delimited sinks: protobuf_sink: inputs: - protobuf_source type: socket mode: tcp address: "localhost:9090" encoding: codec: protobuf protobuf: desc_file: "path/to/your/protobuf.desc" message_type: "your.package.MessageType" framing: method: varint_length_delimited该能力由 commit "add varint length delimited framing for protobuf"(PR #23352,涉及 41 个文件、约 940 行新增)实现,主要落在 codecs 模块中,是典型的"收、发两端对称配置"协议选项。
3. 新增incremental_to_absolute转换器
当指标在下游传输链路中出现丢失、或者需要留存指标的历史记录时,增量指标(incremental)会因数据缺口而产生错误的终值读数。v0.50.0 因此引入incremental_to_absolute转换器,把增量指标转换为绝对值指标,其实现在 src/transforms/incremental_to_absolute.rs。
transforms: make_absolute: type: incremental_to_absolute inputs: [my_metrics] # 可选:内部指标缓存配置 cache: expire_metrics_secs: 120从源码看,其实现要点如下(src/transforms/incremental_to_absolute.rs):
- 转换器输入类型为
Input::metric(),输出仍为指标事件,可无缝插入任意指标管道; - 内部基于
MetricSet(LRU 缓存)归一化指标流,通过make_absolute方法完成增量→绝对值的换算; - 默认 TTL 为300 秒(5 分钟):指标超过 5 分钟未更新即被逐出,下一条增量值将作为新的基准重置;
cache.expire_metrics_secs可自定义逐出时间,源码中给出的默认常量为 120 秒,二者在实际配置时以cache子配置为准。
适合的使用场景:发送到有损通道的指标、需要回放/审计的历史指标记录等。
4. 新增okta源
v0.50.0 新增okta源,用于消费Okta 系统日志(System Log API)。其配置结构定义在 src/sources/okta/client.rs 中,核心字段如下:
| 字段 | 说明 |
|---|---|
domain | Okta 子域名,如foo.okta.com |
token | API Token,用于认证 |
scrape_interval_secs | 抓取间隔(秒)。注意:请求是并发执行的,若单次抓取耗时超过间隔会启动新一轮抓取,可将 timeout 调低至小于间隔以避免额外资源消耗 |
timeout | 单次请求超时 |
since | 起始抓取时间偏移(秒),从当前时刻回退计算,用于回溯历史日志 |
tls | TLS 配置 |
log_namespace | 日志命名空间 |
对应的最小配置形如:
sources: okta_logs: type: okta domain: foo.okta.com token: "${OKTA_API_TOKEN}" scrape_interval_secs: 30 timeout_secs: 10源码 src/sources/okta/client.rs 显示,其抓取路径为/api/v1/logs?since=<RFC3339时间>,since通过since_secs换算为相对当前时刻的偏移量;组件自带单元测试与 ValidatableComponent 校验配置(src/sources/okta/tests.rs)。
5.exec密钥后端支持协议 v1.1(兼容 Datadog Secret Backend)
execsecrets 后端升级支持协议版本v1.1,可用于 Datadog Secret Backend 场景。发布说明给出了官方示例配置:
secret: exec_backend: type: "exec" command: [/usr/bin/datadog-secret-backend] protocol: version: v1_1 backend_type: file.json backend_config: file_path: ~/secrets.json该能力由 commit "Add support for v1.1 protocol of secrets exec backend"(PR #23655)实现,改动集中在config模块(5 个文件、约 250 行新增),在 src/config/secret.rs 等文件中可以追踪协议解析逻辑。
Breaking Change:azure_blobsink 强制要求connection_string
v0.50.0 唯一一条破坏性变更与 Azure 有关:azure_blobsink 现在必须提供connection_string,且这是当前唯一支持的认证方式。
官方给出的背景是:这一改动是为了简化配置并保证生产环境行为可预测;其他认证方式至少在azure_*系列 crate 成熟之前不会被支持。升级到 v0.50.0 时,需要为所有azure_blobsink 配置补充:
sinks: blob_out: type: azure_blob inputs: [my_logs] connection_string: "${AZURE_STORAGE_CONNECTION_STRING}" container_name: my-container blob_prefix: "vector/%Y/%m/%d/" encoding: codec: json该变更对应 commit "Update azure (0.25) and azure storage (0.21)"(PR #23351,breaking 标记),在更新 Azure SDK 的同时收敛了认证路径。
Changelog 全量解析
除上述高光与破坏性变更外,v0.50.0 还包含 19 条 changelog 条目,按类型整理如下。
新特性(feat)
aws_kinesis_streamssink 部分重试改进:request_retry_partial行为变更,现在只重试批次中失败的记录,而不是整个批次,显著减少重复写入与带宽浪费(PR #23733)。prometheus_remote_write源支持 NaN 值过滤:新增skip_nan_values配置项(默认false保持向后兼容)。开启后:counter/gauge 逐样本丢弃 NaN 值;histogram/summary 若任一组成部分(sum、bucket 边界或 quantile)含 NaN 则整条指标被过滤(PR #23774,实现在 src/sources/prometheus/remote_write.rs)。- config reload 失败日志增强:当配置热重载因
GlobalOptions变更被中止时,现在会明确记录具体哪些顶层字段存在差异,便于排查(PR #23662)。 - 单元测试校验加固:新增校验逻辑,确保"预期无输出的源测试"不会对该源执行任何操作,避免测试误通过(PR #23628)。
增强(enhancement)
- GELF 编码支持分块(chunking):
gelf编码格式在socketsink 的udp模式下支持分块,最大分块大小通过encoding.gelf.max_chunk_size配置(PR #23728,涉及 codecs 模块约 40 个文件)。 nats源支持 JetStream:新增 JetStream 支持(PR #23554),并在此次版本中同步升级了async-nats依赖。nats源关闭时排空订阅:shutdown 阶段调用drain(),确保在途与待处理消息被完整消费(PR #23635)。kubernetes_logs源新增insert_namespace_fields选项:可用于关闭对 Kubernetes namespace 的 list/watch,在 namespace 数量庞大的集群中显著降低资源占用(PR #23601,实现在 src/sources/kubernetes_logs/mod.rs)。- 内存 enrichment table 支持按事件 TTL:新增可选
ttl_field配置,可为单个事件覆盖全局内存表 TTL(PR #23666)。
修复(fix)
splunk_hecsink:indexer acknowledgement 查询不再启用压缩,规避与索引器 ack 查询的兼容问题(PR #23560)。- 浮点数排序 panic:修复
f64::NAN、f64::INFINITY等特殊浮点值在部分内部函数中对超过 20 项数据排序时引发 panic 的问题(PR #23780,partial_cmp在排序函数中的问题)。 file源定时统计 panic:修复TimingStats::report中 duration 减法溢出导致的 panic(PR #23791)。aws_s3sink 默认重试策略:修复默认配置无法重试常见瞬时错误的问题,现在无需手工配置即可正确处理瞬时故障(PR #23795)。- 磁盘缓冲区损坏处理:修复 reader 与 writer 同时位于最后一个数据文件且该文件损坏时的 panic(常见于节点非正常关机),PR #23617。
udp/unixsocket 数据报编码错误状态:编码出错时事件状态现在会被正确标记为 error(PR #23728 相关)。
工程与内部(chore)
azure_blobsink 认证收敛为connection_string(同 Breaking Change 条目,PR #23351)。
VRL 变更(v0.27.0)
随 v0.50.0 一起发布的 VRL 0.27.0 同样值得关注(详细变更内嵌于 website/cue/reference/releases/0.50.0.cue 的vrl_changelog字段):
- Breaking:
validate_json_schema返回值增强:除了原有的布尔返回值,现在还会在错误消息返回值中收集并返回所有 JSON Schema 校验错误。以下方 schema 为例:
{ "$schema": "https://json-schema.org/draft/2020-12/schema", "type": "object", "properties": { "test": { "type": "boolean" }, "id": { "type": "integer" } }, "required": ["test"], "additionalProperties": false }对{ "id": "123" }校验时,v0.27.0 之前的err返回null,之后则返回详细的错误信息:
"function call error for \"validate_json_schema\" at (13:82): JSON schema validation failed: \"123\" is not of type \"integer\" at /id, \"test\" is a required property at /"- 新函数:
xxhash(支持xxh32/xxh64/xxh3_64/xxh3_128哈希算法)、数组函数pop(移除数组最后一个元素)、加密函数encrypt_ip/decrypt_ip(基于 IPCrypt 规范,支持 IPv4/IPv6,提供aes128与pfx两种保形加密模式)。 parse_aws_alb_log新增strict_mode参数:设为false时忽略 AWS ALB 日志中新增/尾随字段而非报错,默认true保持原行为。http_request新增可选body参数:适合 POST/PUT 请求,但不会自动设置Content-Type/Content-Length头,需调用方通过headers自行添加。- 修复:
validate_json_schema在 schema 文件无法访问或非法时不再 panic;http_request函数从 VRL CLI 运行不再 panic。
升级与验证建议
- 升级前扫描
azure_blob配置:任何未配置connection_string的azure_blobsink 都必须补齐,这是 v0.50.0 唯一强制迁移项。 - 关注
validate_json_schema的返回值变化:若 VRL 脚本中依赖其布尔返回值做流程控制,需确认错误消息返回值不会影响既有判断逻辑。 - 新协议按需开启:
varint_length_delimited与use_otlp_decoding均默认关闭,属于显式 opt-in 能力,不影响存量配置。 - 探索路径:新特性实现均可从 src/sources/okta、src/sources/opentelemetry、src/transforms/incremental_to_absolute.rs 与 config/examples/varint_framing_protobuf.yaml 开始阅读;完整的发布 commit 列表与作者归属可查阅 website/cue/reference/releases/0.50.0.cue 的
commits字段。
【免费下载链接】vectorA high-performance observability data pipeline.项目地址: https://gitcode.com/GitHub_Trending/vect/vector
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考