用Quickwit+Vector采集H3C防火墙日志

AKHYui2026-03-05 17:50:00数据库LinuxLog

前言

背景

曾经编写过一期使用ELK Stack采集日志的教程,但是Elasticsearch占用内存很大,且配置过程具有一定的困难性,最近研究了一下Quickwit+Vector的日志采集方案,尝试采集了一下防火墙的日志,效果不错,特此留下记录。

服务器环境

  • 服务器系统:Debian 12
  • 服务器内存:8G
  • 核心数:4
  • 硬盘:3TB
  • 带宽:100M
  • 采集设备:H3C F100-E-XI防火墙
  • 服务器示例IP:192.168.30.65

Quickwit部署

环境安装

  1. 创建必要目录

我将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
  1. 下载并解压二进制文件 (这里以最新的 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

编写配置文件

  1. 创建配置文件 创建配置文件/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
  1. 创建索引配置文件 创建索引配置文件/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

启动服务

  1. 启动服务 启动服务命令如下:
# 如果没有报错,就是正常启动了,可以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"查看索引界面。 索引界面

  1. 创建索引

创建索引命令如下:

/opt/quickwit/quickwit index describe --index h3c-firewall --endpoint http://192.168.30.65:7280
❯ Creating index...
✔ Index successfully created.

Vector采集端部署

Vector安装

  1. 使用最新官方脚本添加源并安装
# 1. 运行最新的源配置脚本
bash -c "$(curl -L https://setup.vector.dev)"

# 2. 更新包列表并安装 Vector
sudo apt update
sudo apt install vector -y
  1. 补充端口权限
# 赋予 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

  1. 编辑配置文件 编辑配置文件/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按钮,可以看到上传上来的日志。

Last Updated 3/5/2026, 9:51:06 AM