Beszel官网:beszel.dev 这是一个服务监控程序,可以监控的有:服务器资源,Docker、Systemd、S.M.A.R.T.、GPU这些。
主要有2个组件:中心 (hub) 和 代理 (agent)。就是一个管理端,一个监控节点。
NOTE官方文档
下面描述的两个通信方向中的一个需要正常工作。
代理程序会向中心的 /api/beszel/agent-connect 发起 WebSocket 连接,因此请确保此端点可访问。如果使用反向代理,请确保它能够代理 WebSocket 连接。
中心会向代理程序发起 TCP 连接,因此请确保代理系统上的端口未被阻止。
::
从官网可以了解到,Hub端到Agent只需要单向通信即可,所以我们可以在云服务器上部署Hub端,在家里NAS,软路由,All In One中部署Agent实现监控。就算外网断了,也可以正常发送告警通知。
永远不要将服务放在一台机器上,All In One除外🐶。站长家里有几台主机的出网在移动宽带,所以可以判断出是主宽带,备用宽带,还是断电,还是部分主机死机。
部署服务
部署Hub
你可以通过docker部署,或者二进制部署
docker-compose部署
services: beszel: image: henrygd/beszel container_name: beszel restart: unless-stopped ports: - 8090:8090 volumes: - ./beszel_data:/beszel_datadocker run
docker volume create beszel_data && \docker run -d \ --name beszel \ --restart=unless-stopped \ --volume beszel_data:/beszel_data \ -p 8090:8090 \ henrygd/beszel二进制部署
curl -sL https://get.beszel.dev/hub -o /tmp/install-hub.sh && chmod +x /tmp/install-hub.sh && /tmp/install-hub.sh手动下载
beszel二进制文件:https://github.com/henrygd/beszel/releases
# 下载curl -sL "https://github.com/henrygd/beszel/releases/latest/download/beszel_$(uname -s)_$(uname -m | sed -e 's/x86_64/amd64/' -e 's/armv6l/arm/' -e 's/armv7l/arm/' -e 's/aarch64/arm64/').tar.gz" | tar -xz -O beszel | tee ./beszel >/dev/null && chmod +x beszel
# 启动./beszel serve --http "0.0.0.0:8090"
# 更新./beszel update
# 创建服务# 将 {/path/to/working/directory} 替换为工作目录的路径。如果用户对工作目录具有写入权限,则可以使用非 root 用户。cat > /etc/systemd/system/beszel.service << 'EOF'[Unit]Description=Beszel HubAfter=network.target
[Service]Type=simpleRestart=alwaysRestartSec=3User=rootWorkingDirectory={/path/to/working/directory}ExecStart={/path/to/working/directory}/beszel serve --http "0.0.0.0:8090"
[Install]WantedBy=multi-user.targetEOF
# 启用并启动服务sudo systemctl daemon-reloadsudo systemctl enable beszel.servicesudo systemctl start beszel.service部署Agent
在Hub添加客户端,根据需求,进行复制命令进行安装即可

如果是内网或者无法连接到github,可以使用下面的参考案例
docker-compose
services: beszel-agent: image: henrygd/beszel-agent container_name: beszel-agent restart: unless-stopped network_mode: host volumes: - ./beszel_agent_data:/var/lib/beszel-agent - /var/run/docker.sock:/var/run/docker.sock:ro # 通过在 /extra-filesystems 中挂载文件夹来监控其他磁盘/分区 # - /mnt/disk1/.beszel:/extra-filesystems/disk1:ro environment: LISTEN: 45876 KEY: "<公钥>" HUB_URL: "http://localhost:8090" TOKEN: "<令牌>"二进制文件
文件地址:https://github.com/henrygd/beszel/releases
下载二进制文件
curl -sL "https://github.com/henrygd/beszel/releases/latest/download/beszel-agent_$(uname -s)_$(uname -m | sed -e 's/x86_64/amd64/' -e 's/armv6l/arm/' -e 's/armv7l/arm/' -e 's/aarch64/arm64/').tar.gz" | tar -xz -O beszel-agent | tee ./beszel-agent >/dev/null && chmod +x beszel-agent- -k:公钥(用引号括起来;如果未提供则进入交互模式)
- -p:端口或地址(默认:45876)
- -t:令牌(可选,用于向后兼容)
- -url:中心 URL(可选,用于向后兼容)
- -v:版本(默认:latest)
- -u:卸载
- —auto-update:启用或禁用每日自动更新(如果未提供则进入交互模式)
- —china-mirrors:使用 GitHub 镜像以解决中国大陆的网络问题
- -h:显示帮助信息
手动运行
./beszel-agent -listen "45876" -key "ssh-xxx" -t "xxx" -url "http://xxxx:8090" --china-mirrorssystemd运行
# 在 /etc/systemd/system/beszel-agent.service 中创建一个服务文件。
[Unit]Description=Beszel Agent ServiceWants=network-online.targetAfter=network-online.target
[Service]Environment="PORT=45876"Environment="KEY=ssh-ed2*****"Environment="TOKEN=7e14-******"Environment="HUB_URL=http://xxxxx:8090"# Environment="EXTRA_FILESYSTEMS=sdb"#Environment="INTEL_GPU_DEVICE=drm:/dev/dri/card0"ExecStart=/opt/beszel-agent/beszel-agentUser=rootRestart=on-failureRestartSec=5StateDirectory=beszel-agent#AmbientCapabilities=CAP_PERFMON
# Security/sandboxing settingsKeyringMode=privateLockPersonality=yesProtectClock=yesProtectHome=read-onlyProtectHostname=yesProtectKernelLogs=yesProtectSystem=strictRemoveIPC=yesRestrictSUIDSGID=true
[Install]WantedBy=multi-user.target
# 启用并启动服务。sudo systemctl daemon-reloadsudo systemctl enable beszel-agent.servicesudo systemctl start beszel-agent.service常见问题
SMART问题
如果出现了NVME硬盘SMART状态UNKNOWN,请修改服务配置文件
S.M.A.R.T.监控 | Beszel
请确保smartctl 已安装
sudo apt install smartmontools
sudo smartctl --scanDocker运行
直接按照教程进行操作即可
切换到 :alpine 镜像,并在你的 docker-compose.yml 中添加以下内容。请确保将设备名称替换为你的实际设备。
非基础镜像如 beszel-agent-intel 和 beszel-agent-nvidia 也可以工作且不需要 :alpine。
beszel-agent: image: henrygd/beszel-agent:alpine devices: - /dev/sda:/dev/sda - /dev/nvme0:/dev/nvme0 cap_add: - SYS_RAWIO # S.M.A.R.T. 数据所需 - SYS_ADMIN # NVMe S.M.A.R.T. 数据所需传入基础控制器名称,而不是块设备/分区
注意我们在示例中使用的是 sda 和 nvme0,而不是 sda1 或 nvme0n1。
二进制运行
vim /etc/systemd/system/beszel-agent.service# 在[Service] 下添加下面内容
AmbientCapabilities=CAP_SYS_RAWIO CAP_SYS_ADMINCapabilityBoundingSet=CAP_SYS_RAWIO CAP_SYS_ADMIN如果这不起作用
直接把User 改为 root,重启之后包好!

sudo systemctl daemon-reloadsudo systemctl restart beszel-agent监控其他硬盘
某些情况下,可能将Agent端安装在VPC上,我们可以修改配置文件,让Agent监控目录,或者硬盘
这里有个问题,lvm磁盘是无法直接监控的,我们可以监控挂载出来的目录
Docker方式
在容器的 /extra-filesystems 目录中挂载目标文件系统中的文件夹:
volumes: - /mnt/disk1/.beszel:/extra-filesystems/sdb1:ro # 给设备指定自定义名称 - /mnt/media/.beszel:/extra-filesystems/sdc1__Media:ro二进制方式
修改你的服务文件,例如systemd
[Unit]RequiresMountsFor=/mnt/ssd /mnt/media
[Service]Environment="EXTRA_FILESYSTEMS=sdb,sdc1,mmcblk0,/mnt/network-share"如果使用 Systemd,服务配置文件通常位于 /etc/systemd/system/beszel-agent.service。
在 Unit 部分添加 RequiresMountsFor 以在代理启动前挂载磁盘。挂载点应与 /etc/fstab 匹配
编辑服务后,使用 systemctl daemon-reload 重新加载系统单元,然后使用 systemctl restart beszel-agent 重启服务。
自定义名称您可以使用双下划线为设备指定自定义名称。例如,
sdc1__Jellyfin Media。这将在图表中使用”Jellyfin Media”作为设备名称。