2023-06-04 16:35:33
实战 Vector:开源日志和指标采集工具
Vector 是一款高效且功能强大的开源工具,专注于日志和指标的采集与传输。在搭建监控体系时,Vector 能够高效地将应用的监控数据从数据源传输到目标存储位置,成为许多团队的首选工具。
一、基本概念
Vector 将整个数据处理流程抽象为三个核心模块:数据源(Source)、可选的数据处理(Transform)和数据目的地(Sink)。在数据类型方面,Vector 将所有可观测数据统一抽象为 Event,包含了指标(Metric)和日志(Log)两大类。其中,Metric 又进一步细分为 Gauge、Counter、Distribution、Histogram 和 Summary 等类型,这些分类与 Prometheus 中的概念相似。

二、功能特点
多数据源支持:Vector 支持 50 多种 Log 和 Metric 类型的数据源,以及约 15 种数据目的地。这使得用户能够轻松集成更多类型的工具,满足多样化的监控需求。
灵活的数据处理:在数据处理环节,Vector 内嵌了一个 VRL 映射表达式,用户可以通过它定义灵活的数据转换逻辑。这为用户提供了强大的数据清洗和转换能力。
可靠的传输机制:Vector 引入了端到端的确认机制、多次重试策略和本地缓冲的机制,以确保数据传输的可靠性。在对数据完整性有严格要求的场景,用户可以用 Vector 组合可靠的数据目的地,来达成可靠传输和存储的目的。
三、采集指标
当使用 Vector 采集指标数据时,用户拥有多种选择,几乎可以满足任意场景下的指标采集和传输需求。
Prometheus 用户:
Prometheus Agent 模式:Vector 可以被配置为 Prometheus 的 scrape 服务,直接抓取指标数据。
Remote Write 模式:通过 Remote Write 的方式将数据统一写到 Vector 中进行处理,再发往下游。
推模型用户:
对于推模型的用户,如 InfluxDB 系的用户,可以利用 Vector 的 http_server 数据源及 line protocol 解码能力,在 Vector 里启动一个 http 服务器,供产生 Metrics 的应用程序将数据推送到 Vector。
Vector 也支持 OpenTelemetry 的 OTLP 协议,因此也可以将 Vector 看作一个 OpenTelemetry Collector 来对接更广泛的标准生态。
内置指标采集工具:
Vector 内置了一些指标采集工具,可以直接从系统或常见的数据库等软件上采集指标数据,类似于内置了 Prometheus 的一系列 Exporter。
四、采集日志
除了指标数据,Vector 的另一个主要功能是采集和搬运日志类型的数据。在 Vector 中,日志既可以是结构化的键值对,也可以是原始的文本行。
配置示例:
以 Nginx 访问日志为例,通过 Vector 跟踪本地日志文件,并利用 Vector 提供的 transform 机制解析 Nginx 访问日志为结构化键值对。
持久化日志:
持久化日志数据只需要配置一个兼容日志的数据目的地即可。例如,将解析后的 Nginx 访问日志写入到 GreptimeDB 中进行持久化存储。
五、从日志数据源中提取指标
在 Vector 中,日志和指标数据可以通过 transform 环节或数据源的解码环节实现相互转化。例如,从 Kafka 消费文本编码的 InfluxDB line protocol 数据,并在 Vector 内部直接完成解析,然后将文本的 Kafka 消息转化成指标数据,最终存储到 GreptimeDB 或 InfluxDB 这样的时序数据库中。
六、示例代码与可视化
GitHub 示例项目中提供了完整的配置和流程说明,展示了如何通过 Vector 采集 Nginx 访问日志,并将其传输至 GreptimeDB 进行持久化存储和可视化分析。

七、总结
Vector 作为一款开源的日志和指标采集工具,在功能、性能和易用性方面表现出色。它支持多种数据源和数据目的地,提供了灵活的数据处理能力,并确保了数据传输的可靠性。通过 Vector,用户可以高效地采集和传输监控数据,为搭建完善的监控体系提供有力支持。