用Quickwit+Vector采集H3C防火墙日志
前言
背景
曾经编写过一期使用ELK Stack采集日志的教程,但是Elasticsearch占用内存很大,且配置过程具有一定的困难性,最近研究了一下Quickwit+Vector的日志采集方案,尝试采集了一下防火墙的日志,效果不错,特此留下记录。
服务器环境
- 服务器系统:Debian 12
- 服务器内存:8G
- 核心数:4
- 硬盘:3TB
- 带宽:100M
- 采集设备:H3C F100-E-XI防火墙
- 服务器示例IP:192.168.30.65
Quickwit部署
环境安装
- 创建必要目录
我将3TB的数据盘挂载在了/data目录下,用于存储日志数据。
# 创建软件安装目录
sudo mkdir -p /opt/quickwit
# 创建 SSD 工作目录 (用于高频读写)
sudo mkdir -p /var/lib/quickwit
# 创建 HDD 归档目录
sudo mkdir -p /data/quickwit
sudo chown -R $USER:$USER /data/quickwit /var/lib/quickwit /opt/quickwit
- 下载并解压二进制文件 (这里以最新的 0.8.2 版本为例,如果未来有新版可以直接替换链接)
cd /opt/quickwit
curl -L -O https://github.com/quickwit-oss/quickwit/releases/download/v0.8.2/quickwit-v0.8.2-x86_64-unknown-linux-gnu.tar.gz
tar -xvf quickwit-v0.8.2-x86_64-unknown-linux-gnu.tar.gz --strip-components=1
rm quickwit-v0.8.2-x86_64-unknown-linux-gnu.tar.gz
# 此时文件已解压到/opt/quickwit 目录下
root@quickwit:/opt/quickwit# ls
config LICENSE_AGPLv3.0.txt quickwit qwdata
编写配置文件
- 创建配置文件 创建配置文件/opt/quickwit/quickwit.yaml,内容如下:
version: 0.8
node_id: quickwit-server-1
# 关键配置:SSD 路径和 HDD 路径分离
data_dir: /var/lib/quickwit
default_index_root_uri: file:///data/quickwit
# 监听地址
listen_address: 192.168.30.65
- 创建索引配置文件 创建索引配置文件/opt/quickwit/config/h3c-index.yaml,内容如下:
version: 0.8
index_id: h3c-firewall
doc_mapping:
mode: dynamic
field_mappings:
- name: timestamp
type: datetime
fast: true
timestamp_field: timestamp
# 下面是索引数据的保留时间,我这里设置的是180天
retention:
period: 180 days
schedule: daily
启动服务
- 启动服务 启动服务命令如下:
# 如果没有报错,就是正常启动了,可以Ctrl+C退出
/opt/quickwit/quickwit run --config /opt/quickwit/quickwit.yaml
配置service服务:
nano /etc/systemd/system/quickwit.service
[Unit]
Description=Quickwit Search Engine
After=network.target
[Service]
Type=simple
User=root
WorkingDirectory=/opt/quickwit
ExecStart=/opt/quickwit/quickwit run --config /opt/quickwit/quickwit.yaml
Restart=on-failure
LimitNOFILE=65536
[Install]
WantedBy=multi-user.target
启动服务:
systemctl daemon-reload
systemctl enable quickwit.service
systemctl start quickwit.service
systemctl status quickwit.service
此时,quickwit服务已启动,并监听端口7280,可以在局域网内使用浏览器访问"http://192.168.30.65:7280"查看索引界面。 
- 创建索引
创建索引命令如下:
/opt/quickwit/quickwit index describe --index h3c-firewall --endpoint http://192.168.30.65:7280
❯ Creating index...
✔ Index successfully created.
Vector采集端部署
Vector安装
- 使用最新官方脚本添加源并安装
# 1. 运行最新的源配置脚本
bash -c "$(curl -L https://setup.vector.dev)"
# 2. 更新包列表并安装 Vector
sudo apt update
sudo apt install vector -y
- 补充端口权限
# 赋予 Vector 二进制文件绑定低端口的权限
sudo setcap 'cap_net_bind_service=+ep' /usr/bin/vector
# 允许 Systemd 服务传递这个权限
sudo mkdir -p /etc/systemd/system/vector.service.d/
echo -e "[Service]\nAmbientCapabilities=CAP_NET_BIND_SERVICE" | sudo tee /etc/systemd/system/vector.service.d/override.conf
# 重新加载 systemd 并设置开机自启
sudo systemctl daemon-reload
sudo systemctl enable vector
配置Vector
- 编辑配置文件 编辑配置文件/etc/vector/vector.yaml,内容如下:
# __ __ __
# \ \ / / / /
# \ V / / /
# \_/ \/
#
# V E C T O R
# Configuration
#
# ------------------------------------------------------------------------------
# Website: https://vector.dev
# Docs: https://vector.dev/docs
# Chat: https://chat.vector.dev
# ------------------------------------------------------------------------------
# Change this to use a non-default directory for Vector data storage:
# data_dir: "/var/lib/vector"
# 接收 H3C 防火墙 Syslog
sources:
h3c_raw_udp:
type: "socket"
address: "0.0.0.0:514"
mode: "udp"
decoding:
codec: "bytes"
transforms:
format_log:
type: "remap"
inputs: ["h3c_raw_udp"]
source: |-
# 1. 构造文档对象
doc = {}
# 使用 string() 尝试转换,如果失败则返回空字符串,避免丢弃整条日志
doc.message = string(.message) ?? ""
# Quickwit 的 datetime 类型支持 ISO8601 字符串,直接用 now() 即可
doc.timestamp = now()
doc.host = .host
doc.port = .port
# 2. 将对象转为 JSON 字符串
. = encode_json(doc)
sinks:
send_to_quickwit:
type: "http"
inputs: ["format_log"]
uri: "http://192.168.30.65:7280/api/v1/h3c-firewall/ingest"
encoding:
# 使用 text 编码直接发送我们手动生成的 JSON 字符串
# 这能彻底避开 Quickwit 不支持的 [ ] 数组包装问题
codec: "text"
batch:
max_events: 1
# Vector's GraphQL API (disabled by default)
# Uncomment to try it out with the `vector top` command or
# in your browser at http://localhost:8686
# api:
# enabled: true
# address: "127.0.0.1:8686"
启动Vector
检查vector配置文件是否具备启动条件,若显示如下,则配置正确。
/usr/bin/vector validate
√ Loaded ["/etc/vector/vector.yaml"]
√ Component configuration
√ Health check "send_to_quickwit"
------------------------------------
Validated
启动Vector服务:
systemctl start vector
systemctl status vector
systemctl enable vector
防火墙端配置
登录H3C F100-E-XI防火墙,打开系统->日志设置->日志管理,看到页面底端的“输出到日志主机”,新建“快速日志主机”和“系统日志主机”,设置IP地址为Vector的IP地址(例如192.168.30.65),端口为514,点击应用,保存防火墙配置。配置成功后,打开192.168.30.65:7280,index-id选择h3c-firewall,点击Run按钮,可以看到上传上来的日志。
