搬瓦工部署 Vector 日志管道处理工具教程

Vector 是由 Datadog 开发的高性能可观测性数据管道工具,使用 Rust 编写,具有极低的内存占用和极高的吞吐量。它可以替代 Fluentd、Logstash、Filebeat 等传统工具,统一处理日志、指标和追踪数据。Vector 采用 Source → Transform → Sink 的管道模型,配置简单且功能强大。本文将介绍如何在搬瓦工 VPS 上部署 Vector。部署前请确保已安装 Docker 和 Docker Compose

一、Vector 优势

  • 高性能:Rust 编写,单核可处理每秒数十万条日志,内存占用仅几十 MB。
  • 统一管道:同时处理日志(Logs)、指标(Metrics)和追踪(Traces)。
  • 丰富的组件:支持数十种 Source、Transform 和 Sink。
  • 内置 VRL:Vector Remap Language 提供强大的数据转换能力。
  • 拓扑可视化:提供 API 端点和命令行工具查看管道拓扑。
  • 端到端确认:支持数据交付确认机制,避免数据丢失。

二、系统要求

  • 操作系统:Ubuntu 20.04+ 或 Debian 11+。
  • 内存:至少 512MB(Vector 本身非常轻量)。
  • 磁盘:至少 2GB 可用空间。

搬瓦工 VPS 方案推荐参考 全部方案,购买时使用优惠码 NODESEEK2026 可享 6.77% 折扣,购买入口:bwh81.net

三、安装 Vector

方式一:使用官方安装脚本

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

方式二:使用 Docker

mkdir -p /opt/vector && cd /opt/vector

cat > /opt/vector/docker-compose.yml <<'EOF'
version: '3.8'

services:
  vector:
    image: timberio/vector:latest-alpine
    restart: always
    ports:
      - "8686:8686"
    volumes:
      - ./vector.toml:/etc/vector/vector.toml:ro
      - /var/log:/var/log:ro
      - vector_data:/var/lib/vector

volumes:
  vector_data:
EOF

四、编写配置文件

Vector 使用 TOML 格式的配置文件,包含三个核心部分:Sources(数据源)、Transforms(转换)和 Sinks(输出)。

cat > /opt/vector/vector.toml <<'EOF'
# 数据目录
data_dir = "/var/lib/vector"

# API 端点(用于监控和管理)
[api]
enabled = true
address = "0.0.0.0:8686"

# ===== Sources =====

# 收集系统日志
[sources.syslog]
type = "file"
include = ["/var/log/syslog", "/var/log/auth.log"]
read_from = "beginning"

# 收集 Nginx 访问日志
[sources.nginx_access]
type = "file"
include = ["/var/log/nginx/access.log"]

# 收集 Docker 容器日志
[sources.docker_logs]
type = "docker_logs"

# 接收其他 Vector 实例发送的数据
[sources.vector_receiver]
type = "vector"
address = "0.0.0.0:6000"

# ===== Transforms =====

# 解析 Nginx 日志
[transforms.parse_nginx]
type = "remap"
inputs = ["nginx_access"]
source = '''
. = parse_nginx_log!(.message, "combined")
.timestamp = now()
'''

# 过滤错误日志
[transforms.filter_errors]
type = "filter"
inputs = ["syslog"]
condition = 'contains(string!(.message), "error") || contains(string!(.message), "ERROR")'

# 添加主机名标签
[transforms.add_metadata]
type = "remap"
inputs = ["parse_nginx", "filter_errors"]
source = '''
.hostname = get_hostname!()
.environment = "production"
'''

# ===== Sinks =====

# 输出到文件
[sinks.file_output]
type = "file"
inputs = ["add_metadata"]
path = "/var/lib/vector/processed/%Y-%m-%d.log"
encoding.codec = "json"

# 输出到控制台(调试用)
[sinks.console_debug]
type = "console"
inputs = ["filter_errors"]
encoding.codec = "json"
EOF

五、启动服务

cd /opt/vector
docker compose up -d

验证 Vector 运行状态:

# 检查 API
curl http://localhost:8686/health

# 查看管道拓扑
curl http://localhost:8686/graph

六、VRL 转换语言示例

Vector Remap Language(VRL)是 Vector 内置的数据转换语言,类型安全且性能优异:

# 解析 JSON 字段
. = parse_json!(.message)

# 条件判断
if .status_code >= 500 {
  .severity = "error"
} else if .status_code >= 400 {
  .severity = "warning"
} else {
  .severity = "info"
}

# 字段重命名
.http_method = del(.method)

# 正则提取
.user_id = parse_regex!(.path, r'/users/(?P<id>\d+)')["id"]

七、对接常见后端

Vector 可以将数据发送到多种后端系统。以下是常见的 Sink 配置:

# 发送到 Elasticsearch
[sinks.elasticsearch]
type = "elasticsearch"
inputs = ["add_metadata"]
endpoints = ["http://elasticsearch:9200"]
index = "logs-%Y.%m.%d"

# 发送到 Loki
[sinks.loki]
type = "loki"
inputs = ["add_metadata"]
endpoint = "http://loki:3100"
labels.source = "vector"
labels.hostname = "{{ hostname }}"

# 发送到 Prometheus(指标)
[sinks.prometheus]
type = "prometheus_exporter"
inputs = ["host_metrics"]
address = "0.0.0.0:9598"

八、性能调优

# 配置缓冲区(防止数据丢失)
[sinks.elasticsearch.buffer]
type = "disk"
max_size = 268435488
when_full = "block"

# 批量发送设置
[sinks.elasticsearch.batch]
max_bytes = 10485760
timeout_secs = 5

九、常见问题

Vector 无法读取日志文件

确保 Vector 进程或容器对日志文件有读取权限。在 Docker 中需要正确挂载日志目录。

内存使用过高

检查缓冲区配置,考虑使用磁盘缓冲替代内存缓冲,或减少同时处理的 Source 数量。

总结

Vector 是当前性能最优秀的可观测性数据管道工具,特别适合在资源有限的 VPS 上运行。如果你需要更成熟的日志收集生态,可以参考 FluentdFluent Bit。选购搬瓦工 VPS 使用优惠码 NODESEEK2026 可享 6.77% 折扣。

关于本站

搬瓦工VPS中文网(bwgvps.com)是非官方中文信息站,整理搬瓦工的方案、优惠和教程。我们不销售主机,不提供技术服务。

新手必读
搬瓦工优惠码

NODESEEK2026(优惠 6.77%)

购买时填入即可抵扣。