Vector 0.55.0 升级指南:GraphQL 迁移至 gRPC、sink headers 重构与 Azure 认证显式化

📅 发布时间:2026/9/14 6:51:51
Vector 0.55.0 升级指南:GraphQL 迁移至 gRPC、sink headers 重构与 Azure 认证显式化
Vector 0.55.0 升级指南GraphQL 迁移至 gRPC、sink headers 重构与 Azure 认证显式化【免费下载链接】vectorA high-performance observability data pipeline.项目地址: https://gitcode.com/GitHub_Trending/vect/vector本文基于 Vector 官方 0.55.0 升级指南website/content/en/highlights/2026-04-20-0-55-0-upgrade-guide.md整理聚焦本次发布中三类破坏性变更Observability API 由 GraphQL 全面迁移至 gRPC、http与opentelemetrysink 的顶层headers选项被移除、azure_logs_ingestionsink 必须显式声明azure_credential_kind。读完本文你将掌握每项变更的来龙去脉、底层实现依据以及可直接复制使用的迁移配置与命令行操作。本文涉及的三项破坏性变更Observability API 由 GraphQL 迁移至 gRPCheaders选项从http和opentelemetrysink 中移除azure_logs_ingestionsink 要求显式指定azure_credential_kindObservability API 由 GraphQL 迁移至 gRPC变更内容从 0.55.0 开始Vector 的 observability API 已从 GraphQL 彻底重写为 gRPC。以下两个 HTTP 端点已被移除/graphqlHTTP POST 查询与 WebSocket 订阅/playgroundGraphQL Playground 调试界面与此同时Vector 将直接拒绝包含api.graphql或api.playground字段的配置文件。值得注意的是HTTPGET /health端点保持不变依旧为 Kubernetes 的 liveness/readiness 探针提供服务。新的 gRPC 服务定义gRPC 服务定义位于proto/vector/observability.proto服务名为vector.observability.v1.ObservabilityService包含以下 RPC类别RPC说明简单查询GetMeta获取 Vector 实例元数据版本、主机名简单查询GetComponents获取已配置组件sources、transforms、sinks信息简单查询GetAllocationTracingStatus查询分配追踪allocation tracing是否开启实时指标流StreamHeartbeat按指定间隔推送心跳时间戳实时指标流StreamUptime按指定间隔推送运行时长秒实时指标流StreamComponentAllocatedBytes按组件流式推送已分配内存字节数实时指标流StreamComponentMetrics统一端点按组件流式推送吞吐量或累计值指标替代原先 9 个按指标拆分的流式 RPC事件抓取StreamOutputEvents按组件模式流式抓取事件替代vector tap从 proto 定义可见GetComponentsResponse中的Component消息携带component_id、component_typeSOURCE/TRANSFORM/SINK 枚举、具体的on_type如file、http、输出列表以及接收/发送字节数、事件数等指标。StreamComponentMetrics通过MetricName枚举如METRIC_NAME_RECEIVED_EVENTS_THROUGHPUT、METRIC_NAME_SENT_BYTES_TOTAL、METRIC_NAME_ERRORS_TOTAL等统一选择要订阅的指标TotalMetric与ThroughputMetric通过oneof返回累计值与每秒速率。服务端实现要点gRPC 服务端的实现位于src/api/grpc_server.rs其中几个关键设计值得注意同端口双协议gRPC 与 HTTP 通过accept_http1(true)合并到同一监听端口普通 HTTP/1.1 请求可到达合并后的 axum 路由因此GET /health与 gRPC 服务共享同一地址。标准健康检查协议服务端同时注册了标准 gRPC Health Checking Protocol 服务grpc.health.v1.Health为空服务默认注册为SERVING状态。反射服务为方便grpcurl等工具服务端注册了基于tonic_reflection的反射服务注册了FILE_DESCRIPTOR_SET与tonic_health的 descriptor因此可直接用grpcurl动态发现服务与消息结构。健康状态联动HTTP/health返回200 {ok:true}一旦调用set_not_serving()拓扑排空前调用/health转为503 {ok:false}同时 gRPC 健康状态切换为NotServing保证 Kubernetes gRPC readiness 探针与 HTTP 探针在进程退出前一致失效。API 配置API 配置项位于src/config/api.rs默认enabled为false默认绑定地址为127.0.0.1:8686。配置示例api: enabled: true address: 127.0.0.1:8686注意API 当前不支持认证官方配置元数据也给出警告仅建议在隔离环境或调试时开启不应暴露给不可信客户端。若在 Docker 容器中运行需将address绑定到0.0.0.0否则 API 无法在容器外访问。需要执行的操作1. 删除api.graphql与api.playground字段从 Vector 配置中移除这两个字段仅保留api.enabled与api.address。2. 调整vector top/vector tap的--url从 0.55.0 起vector top与vector tap默认通过default_grpc_url()见 src/config/api.rs连接http://127.0.0.1:8686即 gRPC API 监听在根路径不再需要/graphql后缀# 旧写法 vector top --url http://localhost:8686/graphql # 新写法gRPC API 监听在根路径 vector top --url http://localhost:8686在src/top/mod.rs中可以看到未显式指定--url时url()会回落到default_grpc_url()因此大多数场景下无需传参即可连接本机实例。兼容性提示0.55.0 及之后的vector top/vector tap与运行旧版本的 Vector 实例不兼容升级时请同步升级所有组件。3. 外部工具迁移到 gRPC 服务若你通过外部工具与 API 交互请迁移至 gRPC 服务。以下是用grpcurl的示例# 检查健康状态标准 gRPC 健康检查 grpcurl -plaintext localhost:8686 grpc.health.v1.Health/Check # 列出组件 grpcurl -plaintext localhost:8686 vector.observability.v1.ObservabilityService/GetComponents # 流式抓取事件tap。注意 limit 与 interval_ms 为必填且必须 1 grpcurl -plaintext \ -d {outputs_patterns: [*], limit: 100, interval_ms: 500} \ localhost:8686 vector.observability.v1.ObservabilityService/StreamOutputEventslimit与interval_ms必须为大于等于 1 的正整数——proto 注释明确说明与GetComponents中limit 0表示不限不同StreamOutputEvents的limit同时控制采样池reservoir大小与内部 channel 容量因此不接受 0。headers选项从http和opentelemetrysink 中移除变更内容http与opentelemetrysink 的顶层headers选项已被移除。该选项自 v0.33.0 起就已被弃用转而推荐使用request.headers。在 0.55.0 中正式删除。在src/sinks/http/config.rs中可以看到HttpSinkConfig结构体标注#[serde(deny_unknown_fields)]即未知字段会被拒绝已将请求级配置收敛到request: RequestConfig头部信息统一在request.headers下解析与校验并支持静态头与模板头的拆分与 URI 约束校验。需要执行的操作将任何headers的值迁移到request.headers下两个 sink 的具体位置不同。httpsinkrequest位于 sink 根层级# 旧配置 sinks: my_http: type: http uri: https://example.com headers: X-Custom-Header: value # 新配置 sinks: my_http: type: http uri: https://example.com request: headers: X-Custom-Header: valueopentelemetrysink由于该 sink 将传输层封装在protocol:块下request也必须放在protocol块内# 旧配置 sinks: my_otel: type: opentelemetry protocol: type: http uri: http://localhost:5318/v1/logs headers: X-Custom-Header: value # 新配置 sinks: my_otel: type: opentelemetry protocol: type: http uri: http://localhost:5318/v1/logs request: headers: X-Custom-Header: value重要陷阱将request放在opentelemetrysink 根层级不会报错但头部会被静默忽略。务必把request放在protocol之下。azure_logs_ingestionsink 要求显式指定azure_credential_kind变更内容azure_logs_ingestionsink 于 0.54.0 引入此前在提供了 Client Secret 凭据时会隐式默认使用client_secret_credential。这一隐式默认行为已在 0.55.0 中移除现在必须显式设置azure_credential_kind。从src/sinks/azure_common/config.rs的源码可以看到SpecificAzureCredential枚举通过#[serde(tag azure_credential_kind, rename_all snake_case, deny_unknown_fields)]反序列化即azure_credential_kind是必须显式提供的标签字段。可用的认证种类包括azure_cli使用 Azure CLI 凭据client_certificate_credential使用证书凭据需azure_tenant_id、azure_client_id、证书相关字段client_secret_credential使用客户端密钥需azure_tenant_id、azure_client_id、azure_client_secretmanaged_identity使用托管身份支持系统/用户分配托管身份用户分配时可选user_assigned_managed_identity_id及 ID 类型AzureAuthentication的Default实现仅为单元测试存在注释明确说明 serde 要求必须指定azure_credential_kind。在src/sinks/azure_logs_ingestion/config.rs中AzureLogsIngestionConfig.auth字段类型即为AzureAuthentication。其单元测试src/sinks/azure_logs_ingestion/tests.rs中所有配置样例均显式写出azure_credential_kind: client_secret_credential缺失auth字段时配置解析会直接报错missing field auth。需要执行的操作如果你正使用 Client Secret 凭据的azure_logs_ingestion请在 sink 的auth块中与azure_tenant_id、azure_client_id、azure_client_secret并列添加azure_credential_kind: client_secret_credentialsinks: my_azure_logs: type: azure_logs_ingestion # ... 其余配置 auth: azure_credential_kind: client_secret_credential azure_tenant_id: tenant-id azure_client_id: client-id azure_client_secret: client-secret此外各认证字段均可通过环境变量注入如${AZURE_TENANT_ID:?err}、${AZURE_CLIENT_ID:?err}也可在未显式提供时读取AZURE_TENANT_ID、AZURE_CLIENT_ID、AZURE_FEDERATED_TOKEN_FILE等环境变量若通过 Managed Identity 认证还可使用系统分配或用户分配的托管身份。升级建议汇总变更项迁移动作关键配置/命令Observability API GraphQL → gRPC删除api.graphql/api.playground更新vector top/tap的--url外部工具改用 gRPCvector top --url http://localhost:8686grpcurl -plaintext localhost:8686 grpc.health.v1.Health/Checkhttpsink 顶层headers移除迁移至request.headersrequest: { headers: {...} }opentelemetrysink 顶层headers移除迁移至protocol.request.headersprotocol: { request: { headers: {...} } }azure_logs_ingestion认证显式化显式声明azure_credential_kindauth: { azure_credential_kind: client_secret_credential, ... }升级前请先完整阅读官方升级指南原文website/content/en/highlights/2026-04-20-0-55-0-upgrade-guide.md并结合实际配置逐项核对。涉及源码级细节时可参考 proto/vector/observability.proto、src/api/grpc_server.rs、src/config/api.rs、src/sinks/azure_common/config.rs 与 src/sinks/azure_logs_ingestion/config.rs 进行确认。【免费下载链接】vectorA high-performance observability data pipeline.项目地址: https://gitcode.com/GitHub_Trending/vect/vector创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考