欢迎光临
我们一直在努力

服务器挂了才发现?我用Beszel把多台主机和Docker状态集中到一个面板

🔥承渊政道:个人主页

❄️个人专栏: 《C语言基础语法知识》 《数据结构与算法》 《C++知识内容》 《Linux系统知识》 《算法刷题指南》 《测评文章活动推广》 《大模型语言路线学习》 《MySQL数据库学习》 《Python知识内容》 《cpolar知识学习》

✨逆境不吐心中苦,顺境不忘来时路!✨

🎬 博主简介:

服务器真正让人头疼的往往不是CPU偶尔升高,而是问题已经持续了一段时间,直到应用访问变慢甚至服务掉线以后才开始排查.如果同时维护几台服务器和一批Docker容器,仅靠偶尔SSH进去执行top和docker stats,很难留下连续的历史数据.Beszel提供了一套相对轻量的监控方式.它由Hub和Agent两部分组成:Hub负责集中展示和保存监控数据,Agent运行在需要监控的设备上,采集CPU、内存、磁盘、网络以及Docker容器等指标,再把这些信息交给Hub统一展示.本文会先在Ubuntu中部署Beszel Hub,再分别通过Docker、Linux二进制和Windows方式添加监控节点,实际查看主机与容器数据,并进一步配置资源阈值和邮件通知.Beszel当前支持Hub主动连接Agent的SSH模式,也支持Agent主动连接Hub的WebSocket模式.因此45876并不是所有网络架构都必须对外开放;如果采用Agent主动连接方式,还可以根据实际版本关闭Agent的SSH监听,减少不必要的入站端口.最后还会通过cpolar为Beszel Hub建立公网入口,让监控面板可以从其他网络访问.公网使用时应优先使用HTTPS并保护好Beszel账号,而不是把随机或固定公网地址本身当成访问认证.

目录

  • 1.Beszel(轻量级服务器监控的利器)
    • 1.1Beszel简介
    • 1.2Beszel的核心功能
    • 1.3Beszel安装
      • 1.3.1环境准备
      • 1.3.2使用docker安装beszel
      • 1.3.3浏览器访问测试
      • 1.3.4beszel登录
    • 1.4Beszel配置
      • 1.4.1Docker方式添加客户端
      • 1.4.2二进制方式添加客户端
        • 1.4.2.1二进制Linux方式添加客户端
        • 1.4.2.2二进制Windows方式添加客户端
      • 1.4.3查看服务器详细信息
  • 2 cpolar(内网穿透的桥梁)
    • 2.1cpolar简介
    • 2.2cpolar的工作原理
    • 2.3cpolar安装
    • 2.4配置cpolar系统服务
    • 2.5注册及登录cpolar Web管理界面
      • 2.5.1注册cpolar
      • 2.5.2放行9200端口(web页面端口)
      • 2.5.3访问cpolar web ui管理界面
    • 2.6配置Beszel隧道实现公网访问
      • 2.6.1配置 HTTP 隧道绑定到8090端口
      • 2.6.2访问公网地址验证 Beszel是否可访问
    • 2.7设置固定二级子域名(Pro用户)
      • 2.7.1保留二级子域名
      • 2.7.2修改beszel隧道为子域名方式
      • 2.7.3访问子域名测试
  • 3.Beszel配置Webhook与SMTP服务
    • 3.1Webhook、SMTP与Shoutrrr
    • 3.2配置邮箱SMTP服务
    • 3.3配置Webhook地址
    • 3.4测试Beszel的资源告警
  • 4.钉钉与企业微信 Webhook 集成前瞻
    • 4.1现状与挑战
  • 5.结语

1.Beszel(轻量级服务器监控的利器)

1.1Beszel简介

Beszel是一款专为现代服务器环境设计的轻量级监控平台,尤其擅长对Docker容器进行实时监控.它以其简洁的界面、低资源消耗和强大的告警功能而闻名.与许多重量级的监控解决方案不同,Beszel无需复杂的配置,开箱即用,能够快速为您提供服务器的各项关键指标,包括CPU、内存、磁盘、网络使用情况,以及Docker容器的详细统计数据.其核心优势在于能够提供历史数据分析和可配置的告警,确保您在问题发生的第一时间收到通知,从而迅速采取行动.

image-20250808135359342


1.2Beszel的核心功能

Beszel虽然轻量,但功能却十分强大,能够满足绝大多数服务器监控的需求.以下是其主要功能的详细介绍:

  • 轻量级与高效能:Beszel的设计理念是最小化资源占用.它采用高效的数据采集和处理机制,确保在提供全面监控的同时,不会对您的服务器性能造成显著影响.这使得它非常适合资源有限的VPS或嵌入式设备.
  • Docker容器监控:对于广泛使用Docker进行应用部署的用户而言,Beszel提供了无与伦比的便利.它能够深入到Docker容器内部,实时跟踪每个容器的CPU使用率、内存消耗、网络I/O等关键指标.这对于微服务架构和容器化部署至关重要,帮助您精确掌握每个服务的运行状况.
  • 全面的系统指标监控:除了Docker容器,Beszel还能全面监控宿主机的各项指标,包括:
    • CPU使用率:实时显示CPU的负载情况,帮助您识别性能瓶颈.
    • 内存使用率:监控物理内存和交换空间的使用情况,防止内存溢出.
    • 磁盘使用率与I/O:跟踪磁盘空间占用和读写速度,预警存储问题.
    • 网络使用率:监控网络流量进出,识别网络带宽瓶颈或异常流量.
    • 负载平均值:反映系统在一段时间内的平均负载,评估系统繁忙程度.
    • 温度监控:通过传感器数据监控CPU、GPU等硬件温度,防止过热.
    • GPU使用率/温度/功耗:对于需要GPU资源的应用(如AI训练、图形渲染),Beszel提供详细的GPU监控数据,帮助您优化资源分配.
  • 灵活的告警系统:Beszel的告警功能是其亮点之一.您可以根据CPU、内存、磁盘、带宽、温度、负载平均值等指标设置阈值.一旦某个指标超出预设范围,Beszel将立即通过多种方式(如邮件、Webhook等)发送告警通知,确保您能及时响应潜在问题.这对于预防性维护和快速故障恢复至关重要.

1.3Beszel安装

本章将详细指导您如何在服务器上安装和配置Beszel监控平台.Beszel的安装方式灵活多样,主要推荐通过Docker进行部署,因为它最为便捷且易于管理.我们将以Docker部署为例,为您提供一步步的指引.


1.3.1环境准备

本教程将在Ubuntu 22.04虚拟机上进行操作演示.在开始安装Beszel之前,请确保您的虚拟机环境满足以下条件:

  • 操作系统:Ubuntu 22.04 LTS(本教程演示环境)

    • 虚拟机配置建议:至少2GB内存、2核CPU、20GB磁盘空间
    • 确保虚拟机网络连接正常,能够访问互联网
  • Docker环境:需要安装Docker

    Docker安装步骤可以参考cpolar官网教程:Ubuntu使用Docker部署Nginx并结合内网穿透实现公网远程访问

  • 端口配置:

    • Beszel默认使用端口8090(Web界面)
    • 确保虚拟机防火墙允许该端口访问

    # 检查端口是否被占用
    sudo ss -tlnp | grep :8090

    # 如果启用了UFW防火墙,开放端口
    sudo ufw allow 8090

    #查看是否开放端口
    sudo ufw status

    image-20250808160513752

  • 系统要求:

    • 内存:至少2GB(推荐4GB以获得更好的监控体验)
    • CPU:至少2核心
    • 磁盘空间:至少10GB可用空间用于存储监控数据

1.3.2使用docker安装beszel

Beszel官网:https://beszel.dev/zh/

在Ubuntu上安装Beszel仅需一条命令即可安装,命令如下:

# mkdir -p ./beszel_data :创建本地目录用于数据持久化,如果目录已存在不会报错
# docker run -d :以后台守护态启动容器
# –name beszel :指定容器名为 beszel,方便管理
# –restart=unless-stopped :容器自动重启,除非手动停止
# -v ./beszel_data:/beszel_data :挂载当前目录的 beszel_data 到容器内,实现数据持久化
# -p 8090:8090 :映射主机端口8090到容器端口8090,方便外部访问
# henrygd/beszel :使用的镜像名称

sudo mkdir -p ./beszel_data && sudo docker run -d –name beszel –restart=unless-stopped -v ./beszel_data:/beszel_data -p 8090:8090 henrygd/beszel

image-20250808162005029


1.3.3浏览器访问测试

如果您不知道本机的IP,可以使用如下命令查看:

ip addr

image-20250808162220547

获取到虚拟机的IP后,接下来咱们浏览器中访问测试一下:

#您的虚拟机IP+8090 端口
http://192.168.184.132:8090

image-20250808162404519

可以看到,正常访问成功啦,如果您无法访问,可以查看一下前面步骤是否开放了8090端口的防火墙哦!


1.3.4beszel登录

首次访问会需要让您设置一个管理员账号进行创建(点击创建后会自动进行登录):

image-20250808162840166

点击创建账户即可成功进入首页啦! image-20250808163228645


1.4Beszel配置

1.4.1Docker方式添加客户端

点击首页的右上角的+添加 客户端按钮: image-20250808163724964

接下来添加一台客户端(虚拟机/服务器),如下配置: image-20250808164603336

可以先暂时不用点击添加客户端按钮,将复制下来的docker run 命令到您要添加的服务器上执行:

#参考如下:对应的配置按照复制下来的命令即可
docker run -d –name beszel-agent –network host –restart unless-stopped -v /var/run/docker.sock:/var/run/docker.sock:ro -v ./beszel_agent_data:/var/lib/beszel-agent -e KEY="ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIIC2Ug9SXCey8SsYtf98m9gA1vBzF27XXXXXXXXXXXXX" -e LISTEN=45876 -e TOKEN="" -e HUB_URL="http://192.168.184.132:8090" henrygd/beszel-agent

image-20250808170237898

然后需要开放一下45876端口,45876 是 beszel-agent 服务监听的端口号,这个端口是用来让 主控端(Hub)连接到 agent 的.

以CentOS7开放防火墙举例:

# 永久开放 TCP 端口 45876
sudo firewall-cmd –permanent –add-port=45876/tcp

# 重新加载防火墙规则
sudo firewall-cmd –reload

# 可选:确认端口是否开放成功
sudo firewall-cmd –list-ports

image-20250808170718836

接着点击添加客户端按钮,可以看到列表多了一条数据如下:

image-20250808171121363

这样,一台服务器的信息就成功更新到Beszel上啦,Docker的方式是不是很简单!


1.4.2二进制方式添加客户端

1.4.2.1二进制Linux方式添加客户端

点击添加客户端按钮,tab页切换为二进制方式,如下配置: image-20250808171748406

接着把复制的Linux命令来到Ubuntu22.04这台服务器上执行:

image-20250808172222886

接下来需要进行开放防火墙(前面开放的是另一台虚拟机CentOS,当前是Ubuntu): image-20250808172604029

然后点击添加客户端按钮,可以看到列表中又多了一条记录: image-20250808172911745

状态为绿色,成功添加上啦!


1.4.2.2二进制Windows方式添加客户端

点击添加客户端按钮,然后如下操作: image-20250808173432953

接下来打开Powershell(管理员模式),打开方式:按windows键+X键,然后选择终端(管理员): image-20250808173701837

然后执行复制下来的windows 命令 :

image-20250808174354762

如果出现同如上错误,请依次按照下面步骤进行复制windows命令:

image-20250808174713163

然后执行刚才带token的windows命令:

image-20250808175103903

回到浏览器查看,可以看到,自动给我们添加了这台windows 11服务器: image-20250808181052292


1.4.3查看服务器详细信息

选择一台服务器,点击进入: image-20250808182005053

可以看到详细的图表信息:

image-20250808182203197


2 cpolar(内网穿透的桥梁)

2.1cpolar简介

cpolar是一款功能强大的内网穿透工具,它能够将您本地内网的服务器、网站或服务,安全、稳定地暴露到公网上,而无需公网IP地址,也无需复杂的路由器端口映射配置.对于开发者而言,cpolar是进行微信公众号、小程序、支付宝网关等云端服务开发调试的利器;对于个人用户,它能帮助您远程访问家中的电脑、搭建个人网站或进行文件共享.cpolar通过建立一条安全的隧道,将公网请求转发到您的本地服务,极大地简化了内网服务的对外发布过程.

image-20250808151640468


2.2cpolar的工作原理

cpolar的工作原理可以概括为"隧道代理".当您在本地运行cpolar客户端并配置好隧道后,cpolar客户端会与cpolar的云端服务器建立一条持久的加密隧道.当公网用户访问cpolar为您分配的公网地址时,请求会首先到达cpolar的云端服务器,然后通过这条加密隧道转发到您本地的cpolar客户端,最后由cpolar客户端将请求转发到您本地指定的服务端口.本地服务处理完请求后,响应数据会沿着原路返回给公网用户.

简而言之,cpolar在公网和您的内网服务之间搭建了一座"桥梁",使得内网服务能够被公网访问,而无需改变您现有的网络环境.


2.3cpolar安装

以Linux(Ubuntu)为例,首先,我们需要先安装curl:

sudo apt-get install curl

然后执行如下脚本(一键自动安装脚本):

curl -L https://www.cpolar.com/static/downloads/install-release-cpolar.sh | sudo bash

image-20250808190856763

可以看到,已经提示cpolar已安装,让我们测试一下cpolar版本确认是否安装:

cpolar version

image-20250808191012380


2.4配置cpolar系统服务

向系统添加及启动cpolar服务

#添加cpolar服务
sudo systemctl enable cpolar

#启动cpolar服务
sudo systemctl start cpolar

image-20250808191126521

查看服务状态

sudo systemctl status cpolar

image-20250808191218259


2.5注册及登录cpolar Web管理界面

2.5.1注册cpolar

访问cpolar官网,点击免费注册按钮,进行账号注册

image-20250804085039567

注册页面: image-20250804085208319


2.5.2放行9200端口(web页面端口)

在访问web页面前,需要先检查系统防火墙是否放行9200端口,避免访问不了

sudo ufw status

image-20250808191601999

有两种方式可以实现访问,一种是放行该端口,另一种是直接关闭防火墙(不建议)

#放行 9200 端口
sudo ufw allow 9200

#查看状态验证是否已放行
sudo ufw status

image-20250808191822294


2.5.3访问cpolar web ui管理界面

在访问之前,不确定ip地址可以通过ifconfig命令查看服务器ip

ifconfig

image-20250811092027486

确定好ip地址后,在浏览器中访问:

http://<此处应为您的IP>:9200 #如:http://192.168.184.132:9200

image-20250731115551451

将前面步骤注册好的cpolar账号登录即可进入后台页面

image-20250811092149722


2.6配置Beszel隧道实现公网访问

2.6.1配置 HTTP 隧道绑定到8090端口

点击左侧菜单栏的隧道管理,展开进入隧道列表页面,页面下默认会有 2 个隧道:

  • ssh隧道,指向22端口,tcp协议
  • website隧道,指向8080端口,http协议(http协议默认会生成2个公网地址,一个是http,另一个https,免去配置ssl证书的繁琐步骤)

image-20250731121517683

接着点击创建隧道菜单,进入到创建页面,如下图配置:

image-20250811092700573

创建完成后,点击左侧菜单的状态菜单,接着点击在线隧道列表菜单按钮,可以看到有2个Beszel的隧道,一个为http协议,另一个为https协议

image-20250811092835120

注意:每个用户创建的隧道显示的公网地址都不一样!


2.6.2访问公网地址验证 Beszel是否可访问

在浏览器中访问创建Beszel隧道生成的公网地址(http和https皆可)

这里以https为例:

image-20250811092942873

登录Beszel账号,成功进入Beszel首页!

image-20250811093043418


2.7设置固定二级子域名(Pro用户)

2.7.1保留二级子域名

使用cpolar为其配置二级子域名,该域名为固定格式域名,不会随机变化,方便后续远程访问beszel自动化构建平台.

进入官网的预留页面:

image-20250811100430477

列表中显示了一条已保留的二级子域名记录:

  • 地区:显示为China Top.
  • 二级域名:显示为beszel.

注:二级域名是唯一的,每个账号都不相同,请以自己设置的二级域名保留的为主


2.7.2修改beszel隧道为子域名方式

进入侧边菜单栏的隧道管理>隧道列表,可以看到前面配置名为beszel-8090的隧道

image-20250811100529831

点击编辑按钮进入编辑页面,修改域名类型为二级子域名,然后填写前面配置好的子域名,点击更新按钮:

image-20250811100712207


2.7.3访问子域名测试

来到状态菜单下的在线隧道列表可以看到隧道名称为beszel-8090的公网地址已经变更为二级子域名+固定域名主体及后缀的形式了:

image-20250811100815596

这里以https协议做访问测试:

image-20250811100851130

访问成功!


3.Beszel配置Webhook与SMTP服务

3.1Webhook、SMTP与Shoutrrr

Webhook是一种用户定义的HTTP回调机制,当特定事件发生时,系统会向指定的URL发送HTTP POST请求.Webhook常用于实时通知和数据传输,能够实现系统之间的即时通信.通过Webhook,用户可以将事件推送到外部服务,例如聊天应用、邮件服务等,从而实现自动化的通知和响应.

SMTP(简单邮件传输协议)是一种用于发送电子邮件的标准协议.它定义了邮件服务器之间如何传输邮件的规则.SMTP协议通常用于发送邮件,而IMAP或POP3协议则用于接收邮件.通过SMTP,用户可以将邮件从发件人发送到收件人,确保邮件的可靠传输.

Shoutrrr支持多种通知渠道,如Slack、Discord、邮件等,用户可以根据需求灵活配置通知方式.通过Shoutrrr,Beszel能够实现高效的事件通知和报警功能,帮助用户及时响应系统状态变化.


3.2配置邮箱SMTP服务

本教程将以网易邮箱作为演示示例,详细介绍如何配置SMTP服务以支持Beszel的邮件通知功能.网易邮箱作为国内主流邮箱服务商,具有配置简单、稳定性高的特点,非常适合用于内网监控系统的邮件告警.

首先需要登录网易邮箱获取SMTP配置信息:

登录网易账号进行设置SMTP,如图:

image-20250811113511329

接下来点击开启POP3/SMTP服务,请一定记住授权码,该授权码只会显示一次,如果忘记复制,您可以选择重新生成一个即可:

image-20250811114147403

点击确认后可以看到授权密码管理多出了一条信息: image-20250811114219382

将授权码保管好,待会需要用到!


3.3配置Webhook地址

进入设置页面的通知菜单,配置Webhook地址: image-20250811114749069

使用Shoutrrr 来通过 SMTP 发送电子邮件通知.Email 服务的 URL 格式如下:

#username 是 SMTP 登录用户名
#password 是对应的密码或授权码
#host 是 SMTP 服务器主机名
#port 是 SMTP 服务器端口(通常为 25、465、587 等)
#查询参数 from 表示发件人地址
#查询参数 to 表示收件人地址列表
smtp://username:password@host:port/?from=fromAddress&to=recipient1[,recipient2,...]

参考如下图: image-20250811115448500

配置完成后记得点击保存设置按钮,进行持久化!

接着,打开收件人的邮箱进行查看,可以看到,成功收到邮件: image-20250811115808395


3.4测试Beszel的资源告警

点击想要进行设置警报的服务器右边的铃铛按钮: image-20250811120114863

点击后会弹出选择需要设置告警的服务器和需要告警的字段: image-20250811120637666

网页端的告警提示如下:

image-20250811120730537

接着,咱们查看邮箱,看看是否也进行了邮件告警通知:

image-20250811121005737


4.钉钉与企业微信 Webhook 集成前瞻

随着企业通信需求的多样化,钉钉和企业微信作为国内主流的企业级即时通讯工具,其Webhook接口的集成需求日益增长.当前,主流的通知工具如Shoutrrr在处理复杂嵌套JSON格式的Webhook请求时存在一定限制,尤其在钉钉和企业微信的支持上尚未完全成熟.

本节将简要介绍现有的技术现状,分享开源项目Beszel中的相关讨论,并展望钉钉与企业微信Webhook集成的可能发展方向.同时,附上各关键项目的官方网站和源码地址,便于进一步学习和实践.


4.1现状与挑战

目前,Shoutrrr 作为一个流行的多渠道通知工具,虽然支持发送Webhook通知,但在处理钉钉和企业微信这种需要嵌套JSON格式的消息时,还存在一定的限制.具体来说,它不能直接支持这类复杂结构的JSON负载,因此通常需要借助一个中间转换服务来调整消息格式,才能满足钉钉和企业微信的要求.Beszel 这个开源监控平台的社区和维护者们也注意到了这个问题,并在讨论中提出了一些可能的解决方案和改进方向.钉钉和企业微信对Webhook请求还有一些特别的安全机制,比如必须在消息内容中包含特定的关键词才能成功接收通知,但是根据issue中的讨论,预计后期会进行集成!

image-20250811132037248


5.结语

完成以上配置后,Beszel已经能够把不同服务器的运行状态集中到同一个Hub中,并展示CPU、内存、磁盘、网络以及Docker容器等监控数据.

本文实际测试了Docker Agent、Linux二进制Agent和Windows Agent的接入方式,并进入不同服务器查看监控图表.Beszel采用Hub+Agent架构,实际部署时可以根据网络条件选择Hub主动连接Agent的SSH模式,或者让Agent通过WebSocket主动连接Hub;后一种方式在部分跨网络场景下可以减少Agent侧必须开放的入站端口.

Docker方式监控容器时,Beszel Agent需要访问Docker Engine Socket.这个接口拥有较高权限,因此即使挂载时使用:ro,也不能简单理解成完全没有安全风险;长期使用时应保持Agent镜像和Docker环境及时更新,并只在受信任的主机上部署.

通过cpolar为8090端口建立公网入口后,可以从其他网络登录Beszel查看这些监控数据.如果固定公网域名成为长期访问地址,还应根据实际部署设置Beszel的APP_URL;如果Agent也通过这个公网地址使用WebSocket连接Hub,则还需要确认代理链路能够正确转发Beszel的WebSocket连接.

本文还通过SMTP实际验证了资源阈值告警能够发送到邮箱.SMTP授权码、Webhook Token等通知凭据都属于敏感信息,不应出现在文章截图或公开配置中.当前Beszel通知渠道已经不止邮件,其中企业微信已经可以使用官方支持的WeCom通知方式,具体配置应以当前版本通知文档为准.

从Hub部署、多平台Agent接入,到远程访问和邮件告警,本文完成的是一套Beszel轻量服务器监控环境的基础实践流程.对于长期运行的环境,还需要继续考虑Hub自身可用性、监控数据备份、访问认证以及通知链路失效等问题.

🚀真正的勇者不是流泪的人,而是含泪奔跑的人!


敬请期待下一篇文章内容


每日心灵鸡汤: 真正厉害的人,都学会了主动孤独!

孤独有两种.一种是被动孤独:因为缺少陪伴、缺少理解、缺少连接,所以感到痛苦.这种孤独,本质上是对外界关系的渴望.另一种是主动孤独:主动选择独处,在没有外界认可和陪伴的情况下,依然能够保持内在稳定.这类人不依赖他人的理解来证明自己的价值,而是在独处中建立自己的精神世界、思考体系和人生方向.真正擅长孤独的人,并不是不需要别人,而是不再依赖别人来维持自己的存在感.他们拥有与世界连接的能力,也拥有与自己相处的自由.

赞(0)
未经允许不得转载:171主机测评 » 服务器挂了才发现?我用Beszel把多台主机和Docker状态集中到一个面板
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址