Vector 高性能日志收集工具

4,777 阅读1分钟

Vector 高性能日志收集工具

Vector 简介

Vector 是一种高性能的可观察性数据管道,可让组织控制其可观察性数据。收集、转换并将所有日志、指标和跟踪路由到SRE团队想展示或者存储的任何地方。由于 Vector 用 Rust 编写,提供了内存安全和效率保证,使其在其他现有工具中独树一帜。Vector 引入了单元测试框架,可以更轻松地维护复杂的日志收集工具拓扑。属于一款新型开源产品,比所有替代方案快 10 倍

数据模型

Snipaste_2023-05-11_09-48-09.png

优势

Vector的主要优势。

  • 高效的内存/CPU消耗和高数据吞吐量
  • 良好的可靠性,具有正确性和交付保证
  • 包括定制的DSL,用于以安全和高性能的方式对数据进行实时转换
  • 支持基于度量的以及基于日志的有效载荷
  • 大量的输入和输出集成
  • 可以作为一个代理或聚合器来部署

性能对比

以下性能测试演示了 通用协议,但正则表达式解析测试除外。

TestVectorFilebeatFluentBitFluentDLogstashSplunkUFSplunkHF
TCP to Blackhole86mib/sn/a64.4mib/s27.7mib/s40.6mib/sn/an/a
File to TCP76.7mib/s7.8mib/s35mib/s26.1mib/s3.1mib/s40.1mib/s39mib/s
Regex Parsing13.2mib/sn/a20.5mib/s2.6mib/s4.6mib/sn/a7.8mib/s
TCP to HTTP26.7mib/sn/a19.6mib/s<1mib/s2.7mib/sn/an/a
TCP to HTTP26.7mib/sn/a19.6mib/s<1mib/s2.7mib/sn/an/a

正确性

TestVectorFilebeatFluentBitFluentDLogstashSplunk UFSplunk HF
Disk Buffer Persistence
Disk Buffer Persistence
File Rotate (copytruncate)
File Truncation
Process (SIGHUP)
JSON (wrapped)

组件构成

组件是源、转换和接收器的通用术语。 组件摄取、转换和路由事件。可以依赖这些创建拓扑。 目前Vector支持的组件类型列表:vector.dev/components/

源(source)

可以理解为Vector从哪可以采集到数据?源的示例包括file、syslog、statsd和stdin。例如采集docker容器的日志信息等等。 vector.dev/docs/refere…

转换(transforms)

转换负责在 Vector 传输时改变事件。这可能涉及解析、过滤、采样或聚合,其实跟Logstash组件类似,会借助于丰富的插件去实现。 vector.dev/docs/refere…

接收器(sinks)

接收器是事件的目的地。 每个接收器的设计和传输方法由与其交互的下游服务决定。 例如,socket sink 用于流式传输单个事件,而 aws_s3 sink 用于缓冲和刷新数据。 vector.dev/docs/refere…

Pipeline

Vector 的管道模型基于有向无环图包含独立子图的组件。事件必须沿单一方向从源流向接收器,并且不能创建循环。图中的每个组件都可以产生零个或多个事件。

abc.png

快速安装vector

脚本安装:

curl --proto '=https' --tlsv1.2 -sSf https://sh.vector.dev | bash

docker部署:

docker pull timberio/vector:0.29.1-debian

创建vector配置文件

cat <<-EOF > $PWD/vector.toml
[api]
enabled = true
address = "0.0.0.0:8686"  # 暴露对外访问端口

[sources.demo_logs]
type = "demo_logs"  # 输入源的类型 目前支持file, docker logs, demo_logs, kafka, kubernetes logs等等
interval = 1.0
format = "json"

[sinks.console]    # 调试输出
inputs = ["demo_logs"]  # 输入源如上
target = "stdout"
type = "console"
encoding.codec = "json"
EOF

启动vector服务

docker run \
  -d \
  -v $PWD/vector.toml:/etc/vector/vector.toml:ro \
  -p 8686:8686 \
  timberio/vector:0.29.1-debian