如果企业提供 IT 在线服务,可观测性能力基本是必需品。但可观测性能力的构建并不轻松:数据可能来自 exporter、Telegraf、OpenTelemetry、日志文件、StatsD 等不同入口,采集之后还要做过滤、转换、聚合、采样和路由。
本文介绍一款开源的数据收集和路由工具:Vector。它的价值不只是“采集日志”,而是用统一的 pipeline 把日志和指标从各种 Source 接进来,在 Transform 阶段加工,再通过 Sink 发往 Elasticsearch、S3、ClickHouse、Kafka 等后端。
核心摘要
- Vector 常被用作 Logstash 的替代方案,采用 Rust 编写,官方声称性能比同类方案快 10 倍。
- Vector 的核心模型是
Source -> Transform -> Sink:Source 负责采集,Transform 负责加工,Sink 负责转发。 - Vector 不只处理日志,也可以处理指标,还可以从日志中提取指标。
- Vector 可部署为 Agent 或 Aggregator;在 Agent 场景下,又可以采用 Daemon 或 Sidecar 模式。
- 如果你正在被多种采集器、多种日志格式和多种后端存储折腾,Vector 值得纳入可观测性数据管道选型。
Vector 是什么
Vector 通常被拿来和 Logstash 对比。Logstash 属于 ELK 生态,使用广泛,但不少团队会被它的资源消耗和性能问题困扰。Vector 使用 Rust 编写,定位是高性能、可靠、供应商中立的可观测性数据管道。
Vector 来自 Datadog。如果你了解监控和可观测性,大概率知道 Datadog。Datadog 在 2021 年左右收购了 Vector,现在 Vector 已经开源:
Vector 不止可以收集、路由日志数据,也可以路由指标数据,甚至可以从日志中提取指标。下面是 Vector 的架构图:

Vector 的 pipeline 模型
Vector 的处理模型和很多数据管道工具类似,核心是 pipeline:
| 环节 | 作用 | 常见问题 |
|---|---|---|
| Source | 从文件、网络、采集协议等入口读取数据 | 数据从哪里来 |
| Transform | 对数据做解析、过滤、字段处理、格式转换 | 数据如何变成可用结构 |
| Sink | 把处理后的数据发送到后端系统 | 数据最终到哪里去 |
这个模型的好处是边界清晰。日志从 Source 进来之后,可以在 Transform 中完成结构化处理,再交给一个或多个 Sink。对可观测性平台来说,这比把采集、解析、路由逻辑散落在多个脚本或多个采集器里更容易维护。
Vector 官方强调的特点包括:
- 快速可靠:Vector 采用 Rust 构建,速度快,内存效率高,目标是处理要求较高的工作负载。
- 端到端:Vector 希望成为把可观测性数据从 A 点送到 B 点所需的统一工具,可作为守护进程、边车或聚合器部署。
- 统一:Vector 支持日志和指标,适合统一收集和处理可观测性数据。
- 供应商中立:Vector 不绑定特定供应商平台,强调开放生态和避免锁定。
- 可编程转换:Vector 的转换能力可配置、可编程,适合处理复杂的数据加工场景。
Vector 安装
Vector 的安装比较简单,一条命令即可搞定。其他安装方式可以参考其 官方文档。
curl --proto '=https' --tlsv1.2 -sSf https://sh.vector.dev | bash
Vector 配置测试:读取 syslog 并输出 JSON
Vector 的配置文件可以是 YAML、JSON、TOML 格式。下面是一个 TOML 示例:读取 /var/log/system.log 日志文件,把 syslog 格式的日志转换成 JSON,最后输出到标准输出。
[sources.syslog_demo]
type = "file"
include = ["/var/log/system.log"]
data_dir = "/Users/ulric/works/vector-test"
[transforms.remap_syslog]
inputs = [ "syslog_demo"]
type = "remap"
source = '''
structured = parse_syslog!(.message)
. = merge(., structured)
'''
[sinks.emit_syslog]
inputs = ["remap_syslog"]
type = "console"
encoding.codec = "json"
Source:从文件读取日志
[sources.syslog_demo] 定义了一个名为 syslog_demo 的 Source。这个 Source 的类型是 file,表示从文件中读取数据;include 指定文件路径;data_dir 是 Vector 存放 checkpoint 数据的目录,只要给一个可写目录即可。
Transform:用 remap 做结构化转换
[transforms.remap_syslog] 定义了一个名为 remap_syslog 的 Transform。它的上游是 syslog_demo,类型是 remap。
remap 是 Vector 里很重要的转换能力。上面这段配置的逻辑是:
- 来自
syslog_demo的日志原文位于message字段中。除了message,Vector 还会附加host、timestamp等字段。 parse_syslog!(.message)先把 syslog 原文解析为结构化数据。merge(., structured)再把解析后的结构化字段与原有字段合并,继续传给 pipeline 的后续环节。
Sink:输出到控制台
[sinks.emit_syslog] 定义了一个名为 emit_syslog 的 Sink。它从 remap_syslog 接收数据,输出到 console,并通过 encoding.codec = "json" 指定输出格式为 JSON。
启动 Vector:
vector -c vector.toml
如果机器上存在 /var/log/system.log,就可以看到类似下面的输出:
ulric@ulric-flashcat vector-test % vector -c vector.toml
...
{"appname":"syslogd","file":"/var/log/system.log","host":"ulric-flashcat.local","hostname":"ulric-flashcat","message":"ASL Sender Statistics","procid":332,"source_type":"file","timestamp":"2023-09-27T07:31:22Z"}
看到 JSON 输出,就说明日志已经被采集、解析并打印到控制台。控制台只是测试用法,实际环境里 Vector 可以把数据推给 Elasticsearch、S3、ClickHouse、Kafka 等后端。
Vector 部署模式
Vector 可以部署为两个角色:数据采集 Agent,或者数据聚合与路由 Aggregator。

Agent 模式:Daemon 和 Sidecar
当 Vector 作为 Agent 使用时,又有两种常见模式:Daemon 和 Sidecar。
Daemon 模式旨在收集单个主机上的所有数据,这是更推荐的数据收集方式,因为它更有效地利用主机资源。比如在 Kubernetes 中把 Vector 部署为 DaemonSet,收集节点上所有容器应用的日志。容器应用的日志推荐用 stdout 打印,这也符合云原生 12 要素的思路。

Sidecar 模式则是在每个 Pod 中额外放一个 Vector 容器。它会占用更多资源,毕竟每个 Pod 都要多塞一个 Vector 容器,但灵活性更高,服务所有者可以自行定义日志收集方案,不必完全依赖统一采集方案。

Aggregator 模式:集中处理和路由
Aggregator 模式更适合做集中转换、路由和转发。多个 Agent 先把数据发到 Aggregator,再由 Aggregator 做统一加工,并推送到不同后端。这样可以把采集侧保持轻量,把较重的处理逻辑放在中间层。
FAQ
Vector 能替代 Logstash 吗?
在日志采集、转换和路由场景中,Vector 通常会被作为 Logstash 的替代方案来评估。原文提到,Vector 采用 Rust 编写,官方声称比同类方案快 10 倍。如果你的痛点是 Logstash 性能和资源消耗,可以重点测试 Vector。
Vector 只能处理日志吗?
不是。Vector 不只可以处理日志,也可以处理指标,还可以从日志中提取指标。它更像一个可观测性数据管道,而不是单一日志采集器。
Daemon 和 Sidecar 怎么选?
如果目标是统一收集主机或 Kubernetes 节点上的日志,Daemon 模式更节省资源,也更符合统一采集的思路。如果每个业务团队都要高度定制采集逻辑,Sidecar 模式更灵活,但资源开销也更大。
Vector 总结
夜莺社区里已经有很多小伙伴从 Logstash 迁移到了 Vector,并普遍表示 Vector YYDS。如果你还没听过 Vector,建议尽快试试。本文最重要的价值就是让你知道有这么个好东西,更多细节请移步 Vector 官方文档。
