Vector 移除httpsource 与greptimedbsink 废弃别名:升级迁移完整指南
【免费下载链接】vectorA high-performance observability data pipeline.项目地址: https://gitcode.com/GitHub_Trending/vect/vector
Vector 在其 breaking change 变更记录 changelog.d/remove_deprecated_component_aliases.breaking.md 中宣布:废弃的httpsource 别名与greptimedbsink 别名已正式移除。如果你在配置中仍使用这两个旧名称,升级后将直接报错、无法启动。本指南将说明这次变更的来龙去脉、为何必须迁移、如何一键迁移到新组件名(http_server与greptimedb_metrics),并结合当前仓库源码给出新旧配置对比与验证方法,帮助你在升级前后平滑过渡。
变更摘要:移除的两个组件别名
本次 breaking change 的核心内容可以概括为一句话:
将 source 类型
http改为http_server,将 sink 类型greptimedb改为greptimedb_metrics。
两个别名各自经历了完整的"引入 → 废弃 → 移除"生命周期,时间线如下:
| 旧别名 | 新名称 | 废弃版本 | 移除版本(本次变更) | 组件类型 |
|---|---|---|---|---|
http | http_server | Vector 0.26.0 | 当前版本 | source |
greptimedb | greptimedb_metrics | Vector 0.41.0 | 当前版本 | sink |
之所以称其为breaking change,是因为旧名称不再被解析:升级后,任何仍然写着type = "http"或type = "greptimedb"的配置都会被配置校验阶段直接拒绝,Vector 无法正常启动。这是 Vector 组件命名规范化的一部分——新名称更准确地表达了组件的实际职责(http_server强调"接收 HTTP 请求的服务端"而非笼统的 HTTP,greptimedb_metrics明确该 sink 面向的是指标数据写入)。
为什么必须迁移:从源码看组件注册名
在 Vector 中,组件名称由configurable_component宏在注册时决定。查看当前仓库源码可以确认,旧别名在注册表中已完全不存在:
source 侧:src/sources/http_server.rs 中,组件注册名为
http_server:/// Configuration for the `http_server` source. #[configurable_component(source("http_server", "Host an HTTP endpoint to receive logs."))]模块本身也以新名称挂载:src/sources/mod.rs 中
#[cfg(feature = "sources-http_server")] pub mod http_server;,feature 开关同样跟随新名称。sink 侧:src/sinks/greptimedb/metrics/config.rs 中,指标 sink 的注册名为
greptimedb_metrics:/// Configuration items for GreptimeDB #[configurable_component(sink("greptimedb_metrics", "Ingest metrics data into GreptimeDB."))]src/sinks/mod.rs 中挂载的 feature 也是
sinks-greptimedb_metrics与sinks-greptimedb_logs,greptimedb模块作为一个目录承载多种能力(metrics 与 logs),而不是单一的组件名。
从源码结构可以推断,此次移除属于"清理遗留别名":Vector 组件体系早已按新名称组织,废弃别名只是为兼容旧配置而保留的过渡层。从配置系统的角度看,别名移除意味着配置解析时不再做旧名到新名的映射,输入即校验、输入即生效。
迁移实操一:httpsource →http_server
修改前(旧配置,已失效)
sources: my_http: type: http # ❌ 旧别名,本次变更后无法解析 address: "0.0.0.0:8080" path: "/logs" method: post修改后(新配置)
sources: my_http: type: http_server # ✅ 新名称 address: "0.0.0.0:8080" path: "/logs" method: posthttp_serversource 的关键配置项
迁移只需改type字段,其余参数保持不变。结合 src/sources/http_server.rs 的源码定义,http_server的核心参数如下:
| 参数 | 说明 | 示例 / 默认值 |
|---|---|---|
address | 监听 socket 地址,必须包含端口 | 0.0.0.0:80、localhost:80 |
path | 接收日志 POST 请求的 URL 路径 | 默认/,示例/event/path、/logs |
strict_path | 是否将path视为绝对路径;true时仅接受完全匹配该路径的请求,false时接受以该路径开头的请求;配合path: ""可接受任意路径 | 默认true |
method | 接受的 HTTP 请求方法 | 默认post |
headers | 需要写入日志事件的 HTTP 头列表,支持通配符*;与 JSON payload 中同名字段冲突时以 payload 为准 | 示例User-Agent、X-*、* |
query_parameters | 需要写入日志事件的 URL 查询参数列表,同样支持*;与 body 中同名字段冲突时以 query 参数为准 | 示例application、source、param* |
auth | HTTP 认证配置(建议仅在 HTTPS 下使用,凭据通过 Header 明文传递);custom策略下 VRL 程序可通过%field = value为事件补充认证信息,在 legacy 命名空间写入事件体,在 Vector 命名空间写入http_server.<field>元数据 | 可选 |
host_key | 用于记录客户端远程 IP 的字段名 | 默认host |
path_key | 用于记录请求 URL 路径的字段名 | 默认vector_http_path |
response_code | 成功处理请求后返回的 HTTP 状态码 | 默认200,示例202 |
tls | TLS 启用配置,用于以 HTTPS 提供服务 | 可选 |
framing/decoding | 请求体的帧格式与反序列化方式(如bytes、json等) | 默认按全局 codec 配置 |
提示:如果旧配置里依赖了
http别名下的framing、decoding、acknowledgements等参数,它们在新名称下依然受支持(见SimpleHttpConfig后续字段定义与 src/config/source.rs 中的 acknowledgements 配置),迁移时只需改type,无需调整其他键。
迁移实操二:greptimedbsink →greptimedb_metrics
修改前(旧配置,已失效)
sinks: my_greptimedb: type: greptimedb # ❌ 旧别名,本次变更后无法解析 endpoint: "https://localhost:4000" dbname: public inputs: - my_metric_source修改后(新配置)
sinks: my_greptimedb: type: greptimedb_metrics # ✅ 新名称 endpoint: "https://localhost:4000" dbname: public inputs: - my_metric_source迁移注意事项:metrics 与 logs 是两个 sink
特别提醒:GreptimeDB 相关的 sink 在 Vector 中分为两个独立组件,注册名分别是greptimedb_metrics(指标)与greptimedb_logs(日志),各自的配置结构定义在:
- src/sinks/greptimedb/metrics/config.rs:
GreptimeDBMetricsConfig,注册名为greptimedb_metrics; - src/sinks/greptimedb/logs/config.rs:
GreptimeDBLogsConfig,注册名为greptimedb_logs。
从源码结构看,原先的greptimedb别名只对应指标写入路径,因此迁移目标是greptimedb_metrics;若你的场景实际是写日志数据,应改用greptimedb_logs,其参数(如endpoint、dbname)结构类似但字段语义以日志为准。
以greptimedb_metrics为例,其核心参数包括:
| 参数 | 说明 |
|---|---|
endpoint | GreptimeDB gRPC 服务的地址,sink 通过 gRPC 接口完成数据写入(详见 src/sinks/greptimedb/metrics/config.rs 源码注释) |
dbname | 目标数据库名,默认public(GreptimeDB 默认库);若使用 GreptimeCloud,请填写实例连接信息中的dbname |
compression | gRPC 请求的压缩方式(GrpcCompression),可选none或gzip |
旧别名迁移到新名称后,sink 的批量发送、重试逻辑(GreptimeDBGrpcRetryLogic)与健康检查(healthcheck)行为均保持一致,唯一变化是组件标识符。
如何批量迁移与验证
批量替换
对于存量配置,最直接的方式是全局搜索替换这两个字符串:
# 将 source 的 type 从 http 改为 http_server sed -i 's/type: http$/type: http_server/' vector.yaml # 将 sink 的 type 从 greptimedb 改为 greptimedb_metrics sed -i 's/type: greptimedb$/type: greptimedb_metrics/' vector.yaml注意:
http是一个很常见的子串(如https://、http_client),务必匹配完整的type:字段行,避免误伤。推荐在 YAML 结构化的配置管理工具或编辑器中针对type键做精确替换。
使用vector validate校验
Vector 提供了配置校验命令。迁移后建议在启动前先执行验证(对应源码见 src/validate.rs):
vector validate --config-yaml vector.yaml该命令会走完整的配置解析与编译流程,若配置中仍残留任何旧别名,校验阶段就会明确报错,从而在启动前暴露问题。仓库自带的参考配置 config/vector.yaml 及各组件文档(website/cue/reference/components/sources/http_server.cue)可作为新名称下参数书写的标准参照。
检查点清单
升级前请逐项确认:
- 所有 source 的
type中不再出现http(应为http_server); - 所有指向 GreptimeDB 的 sink
type中不再出现greptimedb(指标写greptimedb_metrics,日志写greptimedb_logs); vector validate校验通过,无 "unknown component type" 类错误;- 如同时使用了 Vector 配置文件热加载(watch)或 API,确认重启后新配置已生效。
总结
本次变更(详见 changelog.d/remove_deprecated_component_aliases.breaking.md)是 Vector 清理历史包袱的常规动作:httpsource 别名自 0.26.0 起废弃,greptimedbsink 别名自 0.41.0 起废弃,如今已彻底移除。迁移本身非常轻量——只需把type: http改为type: http_server、把type: greptimedb改为type: greptimedb_metrics,其余参数、行为与源码实现路径均保持不变。唯一需要留意的是 GreptimeDB sink 已按数据形态拆分为 metrics/logs 两个组件,迁移时按实际数据流向选择正确的新名称,并用vector validate完成升级前的最后一道校验即可。
【免费下载链接】vectorA high-performance observability data pipeline.项目地址: https://gitcode.com/GitHub_Trending/vect/vector
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考