轻量级 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 productionDashboard 部署(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:37025
bun --filter @bat/dashboard dev # Dashboard: localhost:7025cd probe && cargo build --release # Probe 命令 说明 bun turbo typecheck全量类型检查 bun turbo test运行所有测试 bun run lintBiome 代码检查 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_highmem > 85% AND swap > 50% Critical no_swapswap = 0 AND mem > 70% Critical disk_full任一挂载点 > 85% Critical iowait_highiowait > 20% 持续 5min Warning steal_highsteal > 10% 持续 5min Warning host_offline超过 120s 未上报 Critical uptime_anomalyuptime < 300s Info
规则 条件 严重度 ssh_password_authSSH 密码认证开启 Critical ssh_root_loginSSH 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_pressurePSI cpu avg60 > 25% 持续 5min Warning mem_pressurePSI mem avg60 > 10% 持续 5min Warning io_pressurePSI io avg60 > 20% 持续 5min Warning disk_io_saturated任一设备利用率 > 80% 持续 5min Warning tcp_conn_leakTIME_WAIT > 500 持续 5min Warning oom_killOOM kill 次数 > 0 Critical
MIT © 2026