发布时间: 2026年1月 栏目: 运维笔记 / #VPS #Monitoring #Docker 字数: 约 3200 字 难易度: 中级
前言:为什么你的 VPS 需要“减肥”版监控?
在运维圈子里,有一句玩笑话:“买了个 1核1G 的小鸡(VPS),装完 Prometheus 和 Grafana,内存先爆了一半。”
这确实是中小规格 VPS 运维面临的尴尬。我们需要掌握服务器的 CPU 负载、内存吞吐和磁盘 I/O 历史数据,以便排查诸如“昨晚 3 点为什么网站打不开”这类问题。但企业级的监控栈对于个人开发者或中小站点来说,过于沉重且配置繁琐。
2026 年,监控领域的风向变了。 极简主义和高性能成为新趋势。今天,我要向大家推荐一款近期在 GitHub 飙升榜霸榜的神器——Beszel。
它不是简单的“在线/离线”探针,而是一个拥有完整的历史数据记录、Docker 容器单独监控、自动报警功能,却仅占用不到 50MB 内存的现代化监控中心。
本文将手把手带你搭建这套“小而美”的监控系统,从服务端部署到 Agent 接入,再到 Nginx 反向代理和 HTTPS 配置,打造你的专属运维驾驶舱。


第一部分:环境准备与架构设计
在开始敲代码之前,我们需要理解 Beszel 的工作模式。它采用经典的 Hub-Agent 架构:
Beszel Hub(控制端): 负责接收数据、存储历史记录、展示 Web 界面。我们需要找一台线路较好、存储空间充足的 VPS 来部署它(建议 2G 内存以上,虽然它很轻,但数据库需要缓冲)。
Beszel Agent(被控端): 安装在你要监控的所有 VPS 上。它极度轻量,负责采集数据并汇报给 Hub。
前提条件:
一台用于部署 Hub 的 Linux 服务器(推荐 Debian 12/Ubuntu 22.04)。
若干台需要被监控的 VPS。
所有服务器需已安装 Docker 和 Docker Compose。
如果你还没装 Docker,请使用官方一键脚本:
curl -fsSL https://get.docker.com | bash
一个解析到 Hub 服务器的域名(例如
monitor.oool.cc)。
第二部分:部署 Beszel Hub(控制中枢)
我们将使用 Docker Compose 来管理 Hub 服务,这样便于日后升级和维护。
1. 创建工作目录
登录你的主服务器(Hub),建立专门的目录:
Bash
mkdir -p /opt/beszel/data
cd /opt/beszel
2. 编写 docker-compose.yml
使用 nano 或 vim 创建配置文件:
Bash
nano docker-compose.yml
将以下代码粘贴进去(请注意修改 <端口> 和 <密钥> 部分):
YAML
services:
beszel:
image: henrygd/beszel:latest
container_name: beszel
restart: unless-stopped
network_mode: bridge
ports:
- "8090:8090" # Web 面板访问端口,可自定义
volumes:
- ./data:/beszel_data # 数据持久化目录
environment:
# 这是一个关键的安全密钥,用于 Agent 和 Hub 通信验证
# 请生成一个复杂的随机字符串,可以使用命令 `openssl rand -hex 16` 生成
KEY: "e-way-pilot-secret-key-change-me-2026"
SEO 提示: 很多教程忽略了
network_mode,建议使用默认桥接模式即可。安全警告:
KEY是你的通信凭证,千万不要使用默认值,否则别人的 Agent 可能会误连到你的 Hub。
3. 启动服务
Bash
docker compose up -d
启动完成后,在浏览器访问 http://你的IP:8090。你应该能看到一个极其清爽的初始化界面。
设置管理员账号(Admin Account)。
登录后,界面目前是空的,因为我们还没有添加任何 Agent。
第三部分:部署 Beszel Agent(接入卫星)
现在,让我们把其他的 VPS 接入到这个监控中心。
1. 在 Hub 获取公钥
回到 Beszel Hub 的网页后台:
点击右上角的 "Add System"。
在弹出的窗口中,你会看到属于你的 Public Key(公钥)和连接地址。
它甚至贴心地为你生成好了 Docker 命令。
2. 在被控 VPS 上部署 Agent
登录你那台 1核1G 的小 VPS,执行以下操作。我们将手动创建 docker-compose.yml 以便长期管理,而不是直接跑一行命令。
Bash
mkdir -p /opt/beszel-agent
cd /opt/beszel-agent
nano docker-compose.yml
粘贴以下内容:
YAML
services:
beszel-agent:
image: henrygd/beszel-agent:latest
container_name: beszel-agent
restart: unless-stopped
network_mode: host # 必须使用 host 模式才能读取到宿主机的真实网络流量和磁盘IO
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro # 只读权限,用于监控 Docker 容器状态
environment:
PORT: 45876 # Agent 监听端口
KEY: "你刚才在 Hub 设置的 KEY" # 填写 Hub 的公钥/Key
# 注意:这里填写 Hub 的地址
# 如果你的 Hub 有域名且配置了 SSL,请填域名;如果是 IP,填 IP:端口
HUB_URL: "http://<Hub_IP>:8090"
3. 启动 Agent
Bash
docker compose up -d
见证奇迹的时刻: 等待约 5-10 秒,刷新你的 Beszel Hub 网页。你应该能看到这台 VPS 已经出现在列表中了! 卡片上会实时跳动显示:
CPU 使用率(精确到核心)
内存占用(区分 Cache 和 Used)
磁盘空间
Docker 容器列表(这是 Beszel 的杀手锏,它能直接看到哪个容器在吃资源)
第四部分:进阶配置——反向代理与 HTTPS 加密
直接使用 http://IP:8090 访问既不优雅也不安全。我们需要为 Hub 配置一个域名,并加上 SSL 锁。
假设你已经习惯使用 Nginx 或者 Nginx Proxy Manager。这里提供一份标准的 Nginx 配置文件片段。
目标: 通过 https://monitor.oool.cc 访问。
Nginx 配置示例
Nginx
server {
listen 80;
server_name monitor.oool.cc;
# 强制跳转 HTTPS
return 301 https://$host$request_uri;
}
server {
listen 443 ssl http2;
server_name monitor.oool.cc;
# SSL 证书路径(请替换为你自己的证书)
ssl_certificate /etc/nginx/cert/monitor.oool.cc.pem;
ssl_certificate_key /etc/nginx/cert/monitor.oool.cc.key;
# 推荐的安全套件配置
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
location / {
proxy_pass http://127.0.0.1:8090; # 转发到 Docker 端口
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
# WebSocket 支持 (Beszel 实时数据依赖 WebSocket,这几行必须加!)
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
坑点预警: 很多同学配置完反代后,发现数据不更新或者报错。99% 的原因是没有配置 WebSocket 支持(即上面代码中 Upgrade 和 Connection 那两行)。Beszel 的实时数据流依赖 WebSocket,请务必加上。
第五部分:不仅是看,更要“管”——报警与深度分析
装好了如果不看,监控就失去了意义。Beszel 的强大之处在于它的报警系统非常灵活。
1. 配置 Telegram 报警机器人
在 Hub 界面,点击 Settings (设置) -> Notifications (通知)。
创建机器人: 在 Telegram 搜索
@BotFather,发送/newbot,获取 Token。获取 Chat ID: 搜索
@userinfobot,获取你自己的 ID。填入 Beszel: 将 Token 和 Chat ID 填入设置,点击 Test。
2. 设定报警阈值
你可以为每台服务器单独设置策略。例如,对于那台跑数据库的服务器,我比较紧张内存:
CPU: > 90% 持续 1 分钟 -> 报警
Memory: > 85% -> 报警
Disk: > 90% -> 报警
Status: Down (离线) -> 立即报警
这样,当服务器宕机或资源耗尽时,你的手机会第一时间收到推送,让你能在老板发现之前解决问题。
3. 读懂数据:IO Wait 的秘密
在 Beszel 的详细图表中,有一个指标常被忽视——I/O Wait。
如果你发现 CPU 占用率不高,但系统极其卡顿,请查看 CPU 图表中的红色区域(Wait)。
含义: 这代表 CPU 在空转等待硬盘读写。
E路领航诊断: 这通常意味着你的“邻居”(同一台母机上的其他用户)正在疯狂读写硬盘,或者你的 Swap 交换空间设置得不合理导致频繁换页。这时候,你可以考虑按照我们之前的文章《Linux 服务器添加 Swap 交换空间指南》优化 Swap 参数,或者给 VPS 厂商发工单了。
结语:让运维回归简单
在这个堆砌技术的时代,Beszel 给了我们一个清醒的提示:工具是为人服务的,而不是让人疲于奔命的。
通过不到 20 分钟的部署,你拥有了一套既有颜值又有实力的监控系统。它静静地运行在你最便宜的 VPS 上,只消耗极少的资源,却守护着你所有昂贵的业务。
这就是“E路领航”推崇的运维哲学——于数字深处,洞见极简之光。
如果你在部署过程中遇到任何网络问题(例如 Docker 镜像拉取失败),欢迎参考本站关于 Cloudflare 优选 IP 或 代理加速 的相关文章。
Happy Hacking!
本文首发于 E路领航 ( blog.oool.cc),转载请注明出处。