轻量级 VPS 基础设施监控系统 实时指标采集 · 智能告警 · 可视化仪表盘
Bat 是一套专为小型 VPS 集群设计的基础设施监控方案,用于替代 Netdata(120–243MB RSS)等重量级方案。整个系统由三个组件构成:Rust 编写的 Probe 采集端(~2MB RSS),运行在 Cloudflare Workers 上的数据处理和告警引擎,以及部署在 Railway 上的 Next.js 可视化仪表盘。
VPS hosts Cloudflare Railway
┌──────────┐ ┌──────────────┐ ┌──────────────┐
│ bat-probe │──POST──>│ bat │<──GET───│ dashboard │
│ (Rust) │ │ (Hono + D1) │ │ (Next.js 16) │
└──────────┘ └──────────────┘ └──────────────┘
~2MB RSS CF Workers + D1 Bun standalone
30s interval Hourly aggregation Google OAuth
systemd unit Alert evaluation Recharts
系统指标采集 — CPU usage/iowait/steal、内存、磁盘、网络流量,30 秒间隔
极低资源占用 — Rust 编写,~2MB RSS,静态编译 ~300KB ELF
一键安装 — curl | bash 安装脚本,自动配置 systemd 服务
数据接收与存储 — Hono 框架,D1 数据库,支持高频写入
智能告警 — 6 条内置规则(内存、磁盘、iowait、steal、主机离线等)
定时聚合 — Cron 触发的小时级数据聚合,自动清理过期数据
实时可视化 — Recharts 图表,CPU/内存/磁盘/网络趋势
Google OAuth — 基于邮箱白名单的访问控制
Probe 分发 — 内置安装脚本和二进制分发,Setup 页面一键部署
curl -fsSL https://< dashboard> /api/probe/install.sh | bash -s -- --url < worker_url> --key < write_key>
Worker 部署(Cloudflare Workers)
cd packages/worker
wrangler secret put BAT_WRITE_KEY --env production
wrangler secret put BAT_READ_KEY --env production
wrangler d1 execute bat-db-prod --env production --file=migrations/0001_initial.sql
wrangler deploy --env production
Dashboard 部署(Railway / Docker)
docker build -f packages/dashboard/Dockerfile .
环境变量:BAT_API_URL、BAT_READ_KEY、BAT_WRITE_KEY、AUTH_SECRET、GOOGLE_CLIENT_ID、GOOGLE_CLIENT_SECRET、ALLOWED_EMAILS。
bat/
├── packages/
│ ├── dashboard/ # Next.js 16 仪表盘
│ ├── worker/ # Cloudflare Workers 数据引擎
│ └── shared/ # 共享类型定义
├── probe/ # Rust 采集端
│ ├── src/collectors/ # CPU/memory/disk/network 采集器
│ ├── dist/ # systemd unit 文件
│ └── install.sh # 安装脚本
├── docs/ # 设计文档(10 篇)
└── scripts/ # 版本同步、覆盖率检查、logo 生成
Bun 1.3+、Rust 1.80+
Wrangler CLI(Worker 开发)
bun install
bun --filter @bat/worker dev # Worker: localhost:8787
bun --filter @bat/dashboard dev # Dashboard: localhost:7025
cd probe && cargo build --release # Probe
命令
说明
bun turbo typecheck
全量类型检查
bun turbo test
运行所有测试
bun run lint
Biome 代码检查
bun run lint:fix
自动修复 lint 问题
scripts/sync-version.sh
同步版本号到所有子包
scripts/resize-logos.py
从 logo.png 生成所有派生图标
层
内容
触发时机
L1 UT
单元测试(225 个,覆盖率 90%+)
pre-commit
L2 Lint
Biome + TypeScript 类型检查
pre-commit
L3 API E2E
Worker API 端到端测试
pre-push
L4 BDD E2E
Playwright 浏览器测试
按需
模块
测试数
覆盖率
@bat/shared
26
100%
@bat/worker
85
90%+
@bat/dashboard
47
90%+
probe (Rust)
67
—
合计
225
bun turbo test # TypeScript 测试
cd probe && cargo test # Rust 测试
21 条告警规则,全部已实现。Probe 上报原始数据,Worker 服务端评估告警。
规则
条件
严重度
mem_high
mem > 85% AND swap > 50%
Critical
no_swap
swap = 0 AND mem > 70%
Critical
disk_full
任一挂载点 > 85%
Critical
iowait_high
iowait > 20% 持续 5min
Warning
steal_high
steal > 10% 持续 5min
Warning
host_offline
超过 120s 未上报
Critical
uptime_anomaly
uptime < 300s
Info
规则
条件
严重度
ssh_password_auth
SSH 密码认证开启
Critical
ssh_root_login
SSH root 登录=yes
Critical
no_firewall
防火墙未启用
Critical
public_port
非白名单端口暴露在 0.0.0.0
Warning
security_updates
安全更新待安装 > 7d
Warning
container_restart
容器重启次数 > 5
Critical
systemd_failed
有 failed systemd 单元
Warning
reboot_required
需要重启 > 7d
Info
Tier 3(每次 ingest 评估,可选字段)
规则
条件
严重度
cpu_pressure
PSI cpu avg60 > 25% 持续 5min
Warning
mem_pressure
PSI mem avg60 > 10% 持续 5min
Warning
io_pressure
PSI io avg60 > 20% 持续 5min
Warning
disk_io_saturated
任一设备利用率 > 80% 持续 5min
Warning
tcp_conn_leak
TIME_WAIT > 500 持续 5min
Warning
oom_kill
OOM kill 次数 > 0
Critical
MIT © 2026