文章目录

每日一句正能量
一个人知道自己为什么而活,就可以忍受任何一种生活。
这需要一种近乎执拗的定力。恰如尼采所言,当你锚定了生命的‘为什么’,那么一切的‘如何’艰辛都能被忍受与超越。
尼采的哲学核心在此体现:一旦找到了足以支撑生命的最高目的或价值(“为什么而活”),那么过程(“如何”)中的任何苦难都有了意义,不再是纯粹的折磨,而是通往目的的必经之路。
前言
服务器监控最尴尬的情况,不是“没有面板”,而是出问题时你往往比用户还晚知道。CPU已经长期拉高、磁盘快满了、某个Docker容器资源异常,平时没人盯着看;等到业务访问失败,才开始登录机器一台台排查。尤其机器从一台变成几台以后,靠SSH逐台查看状态,很快就会变成一件重复又低效的事。
Beszel解决的就是这类日常监控问题。它可以把多台Linux、Windows服务器和Docker容器集中到一个轻量Web面板里,持续查看CPU、内存、磁盘、网络、温度以及容器资源等指标,还能保留历史数据。
这篇会先在Ubuntu上部署Beszel Hub,再分别通过Docker、Linux二进制和Windows方式添加客户端,把不同机器接进同一个监控页面,并实际查看服务器详细指标。
真正让监控从“有空去看看”变成“出问题主动通知”的,是后面的告警部分。正文还会继续配置SMTP通知和资源阈值,当指标异常时直接通过邮件收到提醒。
如果监控面板只在内网里,人在外面仍然看不到,因此中间再通过cpolar增加公网入口和固定地址。整篇真正跑的是部署Beszel → 接入多台服务器和Docker → 集中查看指标 → 公网远程查看 → SMTP/Webhook告警这条链。
1 Beszel(轻量级服务器监控的利器)
1.1 Beszel简介
Beszel是一款轻量级服务器监控平台,可以集中查看主机和Docker容器的运行指标,包括CPU、内存、磁盘、网络以及容器资源使用情况,同时支持历史数据和告警配置。

1.2 Beszel的核心功能
Beszel的主要能力集中在主机指标、Docker容器和告警这几部分:
- 轻量级与高效能: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.3 Beszel安装
本章将详细指导您如何在服务器上安装和配置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
-
系统要求:
- 内存:至少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

1.3.3 浏览器访问测试
如果您不知道本机的IP,可以使用如下命令查看:
ip addr

获取到虚拟机的IP后,接下来咱们浏览器中访问测试一下:
#您的虚拟机IP+8090 端口
http://192.168.184.132:8090

页面能够正常打开后,说明Beszel Hub已经运行起来;如果无法访问,可以继续检查前面8090端口的防火墙配置。
1.3.4 beszel登录
首次访问会需要让您设置一个管理员账号进行创建(点击创建后会自动进行登录):

创建管理员账户后,就可以进入Beszel首页继续添加需要监控的服务器。

1.4 Beszel配置
1.4.1 Docker方式添加客户端
点击首页的右上角的+添加 客户端`按钮:

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

可以先暂时不用点击添加客户端按钮,将复制下来的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

然后需要开放一下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

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

完成后,这台服务器就会出现在Beszel列表中,并开始向Hub提供监控数据。
1.4.2 二进制方式添加客户端
1.4.2.1 二进制Linux方式添加客户端
点击添加客户端按钮,tab页切换为二进制方式,如下配置:

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

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

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

状态显示为绿色后,说明这台服务器已经成功接入。
1.4.2.2 二进制Windows方式添加客户端
点击添加客户端按钮,然后如下操作:

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

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

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

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

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

1.4.3 查看服务器详细信息
选择一台服务器,点击进入:

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

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

2.2 cpolar的工作原理
cpolar的工作原理可以概括为"隧道代理"。当您在本地运行cpolar客户端并配置好隧道后,cpolar客户端会与cpolar的云端服务器建立一条持久的加密隧道。当公网用户访问cpolar为您分配的公网地址时,请求会首先到达cpolar的云端服务器,然后通过这条加密隧道转发到您本地的cpolar客户端,最后由cpolar客户端将请求转发到您本地指定的服务端口。本地服务处理完请求后,响应数据会沿着原路返回给公网用户。
在这篇场景里,cpolar负责把已经运行在内网的Beszel Web面板提供到公网,监控本身仍然由Beszel完成。
2.3 cpolar安装
以Linux(Ubuntu)为例,首先,我们需要先安装curl:
sudo apt-get install curl
然后执行如下脚本(一键自动安装脚本):
curl -L https://www.cpolar.com/static/downloads/install-release-cpolar.sh | sudo bash

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

2.4 配置cpolar系统服务
向系统添加及启动cpolar服务
#添加cpolar服务
sudo systemctl enable cpolar
#启动cpolar服务
sudo systemctl start cpolar

查看服务状态
sudo systemctl status cpolar

2.5 注册及登录cpolar Web管理界面
2.5.1 注册cpolar
访问cpolar官网,点击免费注册按钮,进行账号注册

注册页面:

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

有两种方式可以实现访问,一种是放行该端口,另一种是直接关闭防火墙(不建议)
#放行 9200 端口
sudo ufw allow 9200
#查看状态验证是否已放行
sudo ufw status

2.5.3 访问cpolar web ui管理界面
在访问之前,不确定ip地址可以通过ifconfig命令查看服务器ip
ifconfig

确定好ip地址后,在浏览器中访问:
http://<此处应为您的IP>:9200 #如:http://192.168.184.132:9200

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

2.6 配置Beszel隧道实现公网访问
2.6.1 配置 HTTP 隧道绑定到8090端口
点击左侧菜单栏的隧道管理,展开进入隧道列表页面,页面下默认会有 2 个隧道:
- ssh隧道,指向22端口,tcp协议
- website隧道,指向8080端口,http协议(http协议默认会生成2个公网地址,一个是http,另一个https,免去配置ssl证书的繁琐步骤)

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

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

注意:每个用户创建的隧道显示的公网地址都不一样!
2.6.2 访问公网地址验证 Beszel是否可访问
在浏览器中访问创建Beszel隧道生成的公网地址(http和https皆可)
这里以https为例:

公网地址能够正常进入Beszel首页后,说明监控面板已经可以从其他网络环境访问。

2.7 设置固定二级子域名(Pro用户)
2.7.1 保留二级子域名
使用cpolar为其配置二级子域名,该域名为固定格式域名,不会随机变化,方便后续远程访问beszel自动化构建平台。
进入官网的预留页面:

列表中显示了一条已保留的二级子域名记录:
- 地区:显示为
China Top。 - 二级域名:显示为
beszel。
注:二级域名是唯一的,每个账号都不相同,请以自己设置的二级域名保留的为主
2.7.2 修改beszel隧道为子域名方式
进入侧边菜单栏的隧道管理>隧道列表,可以看到前面配置名为beszel-8090的隧道

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

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

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

固定地址能够正常访问后,后续就可以长期保存这个监控入口。
3 Beszel配置Webhook与SMTP服务
3.1 Webhook、SMTP与Shoutrrr
Webhook是一种用户定义的HTTP回调机制,当特定事件发生时,系统会向指定的URL发送HTTP POST请求。Webhook常用于把事件主动推送给其他服务,从而让监控告警不再只停留在Beszel页面里。
SMTP(简单邮件传输协议)是一种用于发送电子邮件的标准协议。它定义了邮件服务器之间如何传输邮件的规则。SMTP协议通常用于发送邮件,而IMAP或POP3协议则用于接收邮件。在这里,SMTP主要用于把Beszel产生的告警通过邮件发送给指定收件人。
Shoutrrr支持多种通知渠道,如Slack、Discord、邮件等,用户可以根据需求灵活配置通知方式。通过Shoutrrr,Beszel能够实现高效的事件通知和报警功能,帮助用户及时响应系统状态变化。
3.2 配置邮箱SMTP服务
本教程将以网易邮箱作为演示示例,详细介绍如何配置SMTP服务以支持Beszel的邮件通知功能。网易邮箱作为国内主流邮箱服务商,具有配置简单、稳定性高的特点,非常适合用于内网监控系统的邮件告警。
首先需要登录网易邮箱获取SMTP配置信息:
登录网易账号进行设置SMTP,如图:

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

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

将授权码保管好,待会需要用到!
3.3 配置Webhook地址
进入设置页面的通知菜单,配置Webhook地址:

使用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,...]
参考如下图:

配置完成后记得点击保存设置按钮,进行持久化!
接着,打开收件人的邮箱进行查看,可以看到,成功收到邮件:

3.4 测试Beszel的资源告警
点击想要进行设置警报的服务器右边的铃铛按钮:

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

网页端的告警提示如下:

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

4:钉钉与企业微信 Webhook 集成前瞻
随着企业通信需求的多样化,钉钉和企业微信作为国内主流的企业级即时通讯工具,其Webhook接口的集成需求日益增长。当前,主流的通知工具如Shoutrrr在处理复杂嵌套JSON格式的Webhook请求时存在一定限制,尤其在钉钉和企业微信的支持上尚未完全成熟。
本节将简要介绍现有的技术现状,分享开源项目Beszel中的相关讨论,并展望钉钉与企业微信Webhook集成的可能发展方向。同时,附上各关键项目的官方网站和源码地址,便于进一步学习和实践。
4.1 现状与挑战
目前,Shoutrrr 作为一个流行的多渠道通知工具,虽然支持发送Webhook通知,但在处理钉钉和企业微信这种需要嵌套JSON格式的消息时,还存在一定的限制。具体来说,它不能直接支持这类复杂结构的JSON负载,因此通常需要借助一个中间转换服务来调整消息格式,才能满足钉钉和企业微信的要求。Beszel 这个开源监控平台的社区和维护者们也注意到了这个问题,并在讨论中提出了一些可能的解决方案和改进方向。钉钉和企业微信对Webhook请求还有一些特别的安全机制,比如必须在消息内容中包含特定的关键词才能成功接收通知,但是根据issue中的讨论,预计后期会进行集成!

总结
这篇真正完成的,不只是把Beszel面板部署出来,而是把多台服务器和Docker容器接进了同一套轻量监控系统。Linux、Windows和容器都可以作为客户端加入,CPU、内存、磁盘、网络以及容器资源使用情况集中在一个页面里查看。
有了监控面板以后,日常排查就不需要先登录每台机器再逐个找状态;历史图表也能帮助判断异常是突然发生,还是已经持续了一段时间。
后半段又补上了两块更实用的能力:cpolar负责让人在局域网之外继续查看Beszel,SMTP/Webhook负责把异常主动推送出来。这样监控就从“我想起来时去看一眼”,变成“指标越线时系统主动提醒我”。
整条链的分工很清楚:Beszel负责主机和容器监控,Agent负责采集各机器数据,cpolar负责远程查看入口,SMTP/Webhook负责告警通知。最终解决的不是“有没有监控页面”,而是服务器出了问题以后,能不能更早发现、快速确认是哪台机器和哪个指标出了异常。
转载自:https://blog.csdn.net/u014727709/article/details/169445687
欢迎 👍点赞✍评论⭐收藏,欢迎指正
转载自 CSDN-专业IT技术社区
原文链接:https://blog.csdn.net/u014727709/article/details/169445687




