beszel

Lightweight server monitoring with historical data, docker stats, and alerts.

beszel

项目简介

Beszel 是一款专为个人服务器和家庭实验室(Homelab)设计的轻量级监控系统,采用 Go 语言开发。相比传统的 Prometheus + Grafana 组合,Beszel 的部署复杂度大幅降低,同时保留了实用的核心功能。它支持 Docker 容器监控、历史数据存储、自定义告警、多用户协作以及 OAuth 认证等特性,非常适合希望快速搭建服务器监控平台的个人用户或小团队使用。

Beszel 项目在 GitHub 上已获得超过 22,000 颗 Star,社区活跃度较高,且提供 Docker 镜像和详细的官方文档支持,降低了用户的上手门槛。

核心功能与架构

Beszel 采用经典的「中心 + 代理」架构设计,由两个核心组件构成。理解这两个组件的职责分工,是掌握 Beszel 的关键。

Hub(中心节点) 是整个监控系统的控制台,基于 PocketBase 框架构建,提供基于 Web 的用户界面。用户可以通过浏览器访问 Hub,查看所有被监控服务器的状态仪表板、配置告警规则、管理用户权限、设置自动备份策略等。Hub 本身也是数据的存储中心,负责接收各 Agent 上报的数据并持久化保存。

Agent(代理程序) 需要部署在每一台你想要监控的目标服务器上。Agent 负责采集本机的各项运行指标,包括 CPU 使用率、内存占用、磁盘空间、网络流量、容器状态等,然后将数据定期上报给 Hub。Agent 的设计非常轻量,对宿主机的资源消耗极低,可以长期稳定运行在后台。

Beszel 支持采集的指标种类非常丰富,覆盖了服务器监控的各个方面:

  • 基础系统指标:CPU 使用率、内存(含 Swap 和 ZFS ARC)、磁盘空间与 I/O、网络流量与带宽、负载平均值、系统温度传感器
  • 容器相关指标:Docker 和 Podman 容器的 CPU、内存、网络使用情况,支持多容器批量监控
  • 硬件健康指标:GPU 显卡使用率和功耗(Nvidia/AMD/Intel)、电池状态、S.M.A.R.T. 磁盘健康信息(包括 eMMC 寿命预警和 mdraid 阵列健康状态)

Beszel 还提供了完善的告警功能,支持针对 CPU、内存、磁盘使用率、带宽、温度、负载以及服务在线状态等多种条件设置阈值告警。告警触发后可发送通知通知管理员,帮助用户及时发现和处理服务器异常。

Beszel 仪表板与系统详情页面

快速上手

Beszel 提供了 Docker Compose 一键部署方案,整个安装过程可以在几分钟内完成。以下是完整的部署步骤。

环境准备

确保目标服务器已安装 Docker 和 Docker Compose。如果尚未安装,可以使用官方脚本快速完成:

curl -fsSL https://get.docker.com | sh
sudo systemctl enable docker
sudo systemctl start docker

部署 Hub

创建一个专用的目录用于存放 Beszel 的配置文件和数据:

mkdir -p ~/beszel
cd ~/beszel

新建 docker-compose.yml 文件,内容如下:

services:
  beszel:
    image: henrygd/beszel
    container_name: beszel
    restart: unless-stopped
    ports:
      - "8090:8090"  # Web UI 访问端口
    volumes:
      - ./beszel_data:/pb_data  # 持久化存储 PocketBase 数据
      - ./beszel_config:/pb_config  # 配置文件目录

启动 Beszel Hub:

docker compose up -d

容器启动后,通过浏览器访问 http://<服务器IP>:8090 即可打开 Beszel 的 Web 界面。初次访问时,系统会引导你创建管理员账户。

部署 Agent

在每台需要监控的目标服务器上,都需要部署对应的 Agent。以 Docker 方式运行 Agent 是最简便的做法:

docker run -d \
  --name beszel-agent \
  --restart unless-stopped \
  --privileged \
  --pid=host \
  -e BSZL_HUB_ADDRESS="http://<Hub服务器IP>:8090" \
  -e BSZL_HUB_KEY="<你的连接密钥>" \
  -e BSZL_SYSTEM_ID="<服务器名称>" \
  henrygd/beszel-agent

其中 BSZL_HUB_KEY 是 Agent 连接 Hub 时使用的密钥,可以在 Hub 的 Web 界面中生成。首先登录 Hub,进入「Systems」页面,点击添加新系统,系统会显示对应的密钥和 Agent 配置文件模板。

BSZL_SYSTEM_ID 用于标识这台服务器,可以设置为一个有意义的名字,如 nasweb-serverhomelab-node1 等。

添加并验证监控

Agent 部署完成后,回到 Hub 的 Web 界面,你会看到新添加的服务器出现在系统列表中。点击进入该系统的详情页面,应该能够看到实时更新的 CPU、内存、磁盘等指标数据。如果数据正常显示,说明整个监控系统已经正常运行。

Beszel 仪表板页面

使用场景

Beszel 的轻量化设计和易用性,使其非常适合以下几个典型场景。

家庭实验室(Homelab)监控 是最常见的应用场景。许多爱好者在家中搭建了 NAS、软路由、媒体服务器等基础设施,Beszel 可以帮助他们集中监控这些设备的运行状态,及时发现硬盘即将写满、CPU 过热、内存不足等问题。尤其是 Docker 容器统计功能,对于运行了大量容器服务的 Homelab 用户来说非常实用,可以直观地了解每个容器消耗了多少资源。

个人开发者服务器监控 同样适用。很多开发者租用或购买了云服务器、VPS 来部署自己的项目,使用 Beszel 可以监控这些服务器的性能状况,当服务出现异常(如磁盘空间不足、CPU 异常飙升)时及时收到告警通知。相比购买商业监控服务,Beszel 完全免费且数据完全自主可控。

小团队内部监控 场景下,Beszel 的多用户支持功能可以派上用场。团队成员可以各自管理自己的服务器,管理员也可以将特定系统共享给其他用户查看。这种权限分离的设计比所有人都共享同一个监控账户更加清晰安全。

注意事项

在生产环境中使用 Beszel 时,以下几点值得特别关注。

数据安全与备份方面,Beszel Hub 的数据默认存储在本地目录中。虽然 Beszel 支持自动备份功能,但建议用户尽早配置备份策略,可以选择将备份保存到本地指定目录或 S3 兼容的对象存储服务中。这样即使服务器出现故障,也能快速恢复监控数据和配置。

Agent 权限要求是另一个需要注意的点。由于 Agent 需要读取系统状态信息(如 /proc 文件系统、S.M.A.R.T. 数据等),Docker 容器需要以 --privileged 模式运行,并共享宿主机的 PID 命名空间。如果对安全性要求较高,可以考虑使用宿主机直接安装 Agent 二进制文件的方式运行,而非容器化部署。

网络配置方面,Agent 与 Hub 之间的通信采用 HTTP 协议。如果 Hub 部署在内网环境中,Agent 所在服务器需要能够直接访问 Hub 的地址。对于跨公网的场景,建议通过 VPN 或 Cloudflare Tunnel 等方式建立安全通道,避免监控数据暴露在公网上。

资源占用方面,Beszel Hub 本身基于 PocketBase 运行,资源消耗相对较低,但在高密度监控场景下(如同时监控数十台服务器、数百个容器),建议确保 Hub 服务器有足够的内存和 CPU 资源,并定期检查数据存储的增长情况。

系统详情页面

总结

Beszel 作为一款专注于轻量级服务器监控的开源工具,在功能与易用性之间取得了很好的平衡。它的架构简洁清晰,Hub + Agent 的设计让用户可以根据需要灵活扩展监控节点;Docker 一键部署的特性大幅降低了使用门槛,无需复杂的配置即可快速投入使用;丰富的监控指标覆盖了服务器运维的大部分需求,配合灵活的告警机制,可以帮助用户及时发现和响应系统异常。

对于个人开发者、家庭实验室爱好者或小型团队来说,Beszel 是一个值得考虑的监控解决方案。它既避免了 Prometheus + Grafana 组合的笨重与复杂,又提供了足够完善的监控功能,能够满足大多数场景下的实际需求。如果你正在寻找一款简单可靠的自托管服务器监控工具,不妨给 Beszel 一个尝试的机会。

项目信息

项目
仓库 henrygd/beszel
语言 Go
Star 22,267
Fork 820
主页 https://beszel.dev

参考链接