基于 Rust 构建的高性能、端到端可观测性数据管道。
项目概述#
Vector 是一款为可观测性数据打造的高性能管道工具,采用 Rust 编写,具备单二进制、无外部依赖的特性。它能够同时作为 Agent(守护进程/Sidecar)和 Aggregator(集中式聚合器)运行,覆盖从数据采集、转换到投递的完整链路。当前版本已稳定支持 Logs 数据类型,Metrics 功能处于 Beta 阶段,Traces 功能标记为 "coming soon"。
核心能力#
- 高性能与可靠性:基于 Rust 构建,保障内存安全与多核并发利用;官方基准测试显示其吞吐量显著优于 Fluent Bit、Fluentd、Logstash、Filebeat 等方案;支持磁盘缓冲持久化,确保崩溃或重启时数据不丢失;在文件轮转、截断、JSON 包装及进程信号处理等边缘场景通过了严格的正确性测试
- 数据与转换:统一的 Log 和 Metric 数据模型;内置 Vector Remap Language (VRL) 可编程语言,支持复杂解析、操作与数据装饰及脱敏(如
redact函数处理敏感信息);支持 Enrichment Tables(内存或文件形式)实现数据关联富化 - 部署与拓扑:单二进制部署,无外部依赖;支持三种部署拓扑:Distributed(分布式 Agent)、Centralized(集中式聚合)、Stream-based(流式处理)
- 配置与运维:支持 YAML、TOML、JSON 格式,兼容 ytt/Jsonnet/CUE 等模板工具;支持多文件拆分自动合并与环境变量注入(如
${DATADOG_API_KEY});独创配置内建单元测试能力,可直接验证转换逻辑 - 生态与兼容:厂商中立,提供 47+ sources、17+ transforms、61+ sinks;原生支持
kubernetes_logssource,深度适配 K8s 环境;支持同源数据多目标路由(如同时发送至 ES 用于查询,S3 用于归档)
架构要点#
- 采用
Sources→Transforms→Sinks管道式架构,各组件间通过inputs字段显式声明数据流依赖关系,构成有向无环图(DAG) - 核心代码使用 Rust 及 Cargo 构建系统;配置 Schema 校验大量采用 CUE 语言实现(占代码库 34.9%)
- 源码
proto/目录包含 Protocol Buffers 定义,原生支持 gRPC 等高效通信协议 - 仓库内建四层测试机制:
benches/(性能基准)、regression/(回归测试)、testing/(集成测试)、tests/(单元测试) - 提供多形态 Docker 镜像(debian、distroless-libc、distroless-static、alpine),集成 Tilt 用于本地开发环境编排
典型应用场景#
| 场景 | 说明 |
|---|---|
| 降低可观测性成本 | 通过数据采样、压缩、路由到低成本存储(如 S3)来减少费用 |
| 供应商迁移 | 在不同供应商之间无缝切换,不中断工作流 |
| 数据质量提升 | 使用 VRL 解析和丰富日志,提高可分析性 |
| Agent 整合 | 用一个工具替代多个采集代理(如 Filebeat + Logstash + Metricbeat) |
| Kubernetes 日志采集 | 内置 kubernetes_logs source,原生支持 K8s 环境 |
| 日志审计与合规 | 数据脱敏后路由到后端 |
| 多目标路由 | 同一数据源可同时发送到 Elasticsearch(短期查询)和 S3(长期归档) |
安装与快速开始#
脚本安装(推荐):
curl --proto '=https' --tlsv1.2 -sSfL https://sh.vector.dev | bash
Docker 安装:
docker pull timberio/vector:0.55.0-debian
最小运行示例:
创建 vector.yaml:
sources:
in:
type: "stdin"
sinks:
out:
inputs:
- "in"
type: "console"
encoding:
codec: "text"
执行:
echo 'Hello world!' | vector
配置要点#
data_dir: "/var/lib/vector"
api:
enabled: false
sources:
<id>:
type: <source_type>
transforms:
<id>:
type: <transform_type>
inputs: ["<source_or_transform_id>"]
sinks:
<id>:
type: <sink_type>
inputs: ["<source_or_transform_id>"]
VRL 转换示例:
transforms:
remap_syslog:
type: "remap"
inputs: ["generate_syslog"]
source: |
structured = parse_syslog!(.message)
. = merge(., structured)
补充说明#
- 最新版本:v0.55.0
- 主要语言:Rust(62.4%)、CUE(34.9%)
- 支持平台:Linux、macOS、Windows(x86_64、ARM64/v7)
- 采用 MPL-2.0 许可证
- 由 Datadog Community Open Source Engineering 团队维护
- 官方提及最大用户每日处理超过 500TB,企业用户包括 Atlassian、T-Mobile、Comcast 等(未提供公开引用链接)