搬瓦工部署 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 上运行。如果你需要更成熟的日志收集生态,可以参考 Fluentd 或 Fluent Bit。选购搬瓦工 VPS 使用优惠码 NODESEEK2026 可享 6.77% 折扣。