sycnnj
发布于 2026-01-19 / 71 阅读

告别臃肿!2026年VPS监控新宠:Beszel 轻量级探针全链路部署实战 (Docker + 反向代理 + 报警配置)

发布时间: 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。

前提条件:

  1. 一台用于部署 Hub 的 Linux 服务器(推荐 Debian 12/Ubuntu 22.04)。

  2. 若干台需要被监控的 VPS。

  3. 所有服务器需已安装 DockerDocker Compose

    • 如果你还没装 Docker,请使用官方一键脚本: curl -fsSL https://get.docker.com | bash

  4. 一个解析到 Hub 服务器的域名(例如 monitor.oool.cc)。


第二部分:部署 Beszel Hub(控制中枢)

我们将使用 Docker Compose 来管理 Hub 服务,这样便于日后升级和维护。

1. 创建工作目录

登录你的主服务器(Hub),建立专门的目录:

Bash

mkdir -p /opt/beszel/data
cd /opt/beszel

2. 编写 docker-compose.yml

使用 nanovim 创建配置文件:

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。你应该能看到一个极其清爽的初始化界面。

  1. 设置管理员账号(Admin Account)。

  2. 登录后,界面目前是空的,因为我们还没有添加任何 Agent。


第三部分:部署 Beszel Agent(接入卫星)

现在,让我们把其他的 VPS 接入到这个监控中心。

1. 在 Hub 获取公钥

回到 Beszel Hub 的网页后台:

  1. 点击右上角的 "Add System"

  2. 在弹出的窗口中,你会看到属于你的 Public Key(公钥)和连接地址。

  3. 它甚至贴心地为你生成好了 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 支持(即上面代码中 UpgradeConnection 那两行)。Beszel 的实时数据流依赖 WebSocket,请务必加上。


第五部分:不仅是看,更要“管”——报警与深度分析

装好了如果不看,监控就失去了意义。Beszel 的强大之处在于它的报警系统非常灵活。

1. 配置 Telegram 报警机器人

在 Hub 界面,点击 Settings (设置) -> Notifications (通知)

  1. 创建机器人: 在 Telegram 搜索 @BotFather,发送 /newbot,获取 Token。

  2. 获取 Chat ID: 搜索 @userinfobot,获取你自己的 ID。

  3. 填入 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),转载请注明出处。