Beszel一个轻量级的服务器资源监控中心,具有历史数据、docker 统计信息和警报。

特征

  • 轻量级:比领先的解决方案小得多,要求也低得多。
  • Docker 统计:每个容器的 CPU 和内存使用历史记录。
  • 警报:可配置 CPU、内存和磁盘使用情况以及系统状态的警报。
  • 多用户:每个用户都有自己的系统。管理员可以跨用户共享系统。
  • 简单:易于设置,不需要任何内容​​在线公开。
  • OAuth / OIDC:支持许多 OAuth2 提供商。可以禁用密码验证。
  • 自动备份:将数据保存到磁盘或 S3 兼容存储并从磁盘或 S3 兼容存储中恢复数据。
  • REST API:在您自己的脚本和应用程序中使用您的指标。

介绍

Beszel 有两个组件:集线器和代理。

该中心是一个 Web 应用程序,提供仪表板来查看和管理您连接的系统。它建立在PocketBase之上。

代理在您要监控的每个系统上运行。它会创建一个最小的 SSH 服务器,通过该服务器将系统指标传达给中心。

入门

如果不使用docker,请忽略4-5并使用二进制文件运行代理。

  1. 启动集线器(参见安装)。
  2. 打开http://localhost:8090并创建管理员用户。
  3. 点击“添加系统”。输入您要监控的系统的名称和主机。
  4. 单击“复制 docker compose”将代理的 docker-compose.yml 文件复制到剪贴板。
  5. 在代理系统上,创建撰写文件并运行docker compose up以启动代理。
  6. 回到中心,单击对话框中的“添加系统”按钮即可完成添加系统。

如果一切顺利,您应该会看到系统变为绿色。如果变为红色,请检查日志页面,并查看故障排除提示

法语教程

有关法语教程,请参阅https://belginux.com/installer-beszel-avec-docker/

安装

您可以选择将集线器和代理安装为单个二进制文件,或者安装为 docker 镜像。

Docker

中心:查看示例docker-compose.yml文件。

代理:中心为代理提供撰写内容,但您也可以参考示例docker-compose.yml文件。

代理使用主机网络模式,因此它可以访问网络接口统计信息。这会自动公开端口,因此如果需要,可以使用环境变量更改端口。

如果您不需要网络统计信息,请从撰写文件中删除该行并手动映射端口。

注意:代理的 docker 版本无法自动检测用于磁盘 I/O 统计的文件系统,因此FILESYSTEM如果您希望它正常工作,请包含环境变量(说明在此处)。

二进制

从发布页面下载并运行最新的二进制文件或使用以下命令。

中心:

curl -sL "https://github.com/henrygd/beszel/releases/latest/download/beszel_$(uname -s)_$(uname -m | sed 's/x86_64/amd64/' | sed 's/armv7l/arm/' | sed 's/aarch64/arm64/').tar.gz" | tar -xz -O beszel | tee ./beszel >/dev/null && chmod +x beszel && ls beszel
直接运行集线器

./beszel serve
将集线器作为系统服务运行(Linux)

这将在后台持续运行集线器。

  1. 在以下位置创建系统服务/etc/systemd/system/beszel.service
[Unit]
Description=Beszel Hub Service
After=network.target

[Service]
# update the values in the curly braces below (remove the braces)
ExecStart={/path/to/working/directory}/beszel serve
WorkingDirectory={/path/to/working/directory}
User={YOUR_USERNAME}
Restart=always

[Install]
WantedBy=multi-user.target
  1. 启动并启用服务以使其在系统启动后运行
sudo systemctl daemon-reload
sudo systemctl enable beszel.service
sudo systemctl start beszel.service

代理人:

curl -sL "https://github.com/henrygd/beszel/releases/latest/download/beszel-agent_$(uname -s)_$(uname -m | sed 's/x86_64/amd64/' | sed 's/armv7l/arm/' | sed 's/aarch64/arm64/').tar.gz" | tar -xz -O beszel-agent | tee ./beszel-agent >/dev/null && chmod +x beszel-agent && ls beszel-agent
直接运行代理

PORT=45876 KEY="{PASTE_YOUR_KEY}" ./beszel-agent
将代理作为系统服务运行 (Linux)

这将在后台持续运行代理。

  1. 在以下位置创建系统服务/etc/systemd/system/beszel-agent.service
[Unit]
Description=Beszel Agent Service
After=network.target

[Service]
# update the values in curly braces below (remove the braces)
Environment="PORT={PASTE_YOUR_PORT_HERE}"
Environment="KEY={PASTE_YOUR_KEY_HERE}"
ExecStart={/path/to/directory}/beszel-agent
User={YOUR_USERNAME}
Restart=always

[Install]
WantedBy=multi-user.target
  1. 启动并启用服务以使其在系统启动后运行
sudo systemctl daemon-reload
sudo systemctl enable beszel-agent.service
sudo systemctl start beszel-agent.service

更新

使用./beszel update./beszel-agent update更新到最新版本。

环境变量

中心

姓名 默认 描述
DISABLE_PASSWORD_AUTH 错误的 禁用密码验证

代理人

姓名 默认 描述
FILESYSTEM 取消设置 用于磁盘 I/O 统计的文件系统/分区
KEY 取消设置 用于身份验证的公共 SSH 密钥。在 hub 中提供。
PORT 45876 监听的端口

OAuth / OIDC 设置

Beszel 支持 OpenID Connect 和许多 OAuth2 身份验证提供程序(请参阅下面的列表)。要启用,请执行以下操作:

  1. 确保您的“应用程序 URL”在 PocketBase 设置中设置正确。
  2. 使用您选择的提供商创建 OAuth2 应用程序。重定向/回调 URL 应为<your-beszel-url>/api/oauth2-redirect
  3. 当您拥有客户端 ID 和密钥后,请转到“身份验证提供商”页面并启用您的提供商。
支持的提供商列表
  • 苹果
  • Bitbucket
  • 不和谐
  • Facebook
  • 希泰亚
  • 吉特
  • GitHub
  • GitLab
  • 谷歌
  • Instagram
  • 卡卡奥
  • 在线聊天
  • 邮件牛
  • 微软
  • OpenID 连接
  • Patreon(v2)
  • Spotify
  • Strava
  • 抽搐
  • 推特
  • 维卡
  • Yandex

REST API

由于 Beszel 是基于 PocketBase 构建的,因此您可以使用 PocketBase Web API客户端 SDK从 Beszel 外部读取或更新数据。

安全

集线器和代理通过 SSH 进行通信,因此它们不需要暴露在互联网上。如果您将自己的身份验证网关(例如 Authelia)放在集线器前面,连接就不会中断。

当集线器首次启动时,它会生成一个ED25519密钥对。

代理的 SSH 服务器配置为仅使用此密钥接受连接。它不提供伪终端或接受输入,因此即使您的私钥被泄露,也无法在代理上执行命令。

用户角色

行政

假定在 PocketBase 中有一个管理员帐户,因此备份、SMTP 设置等的链接会显示在中心中。

创建的第一个用户将自动成为管理员并可以登录 PocketBase。

请注意,更改用户的角色不会为他们创建 PocketBase 管理员帐户。如果您想这样做,请转到 PocketBase 中的“设置”>“管理员”并在那里添加他们。

用户

可以创建自己的系统和警报。PocketBase 设置的链接不会显示在中心中。

只读

无法创建系统,但可以查看管理员与其共享的任何系统。可以创建警报。

常见问题/疑难解答

代理未连接

假设代理正在运行,则连接可能被防火墙阻止。您需要在代理系统上添加入站规则以允许到端口的 TCP 连接。检查任何活动的防火墙(如 iptables 或 ufw)以及您的云提供商帐户(如果适用)。

可以通过运行telnet <agent-ip> <port>nc -zv <agent-ip> <port>从远程机器测试连接。

找到正确的文件系统

用于磁盘 I/O 统计的文件系统/分区在FILESYSTEM环境变量中指定。

如果未设置,代理将尝试查找挂载的文件系统/并使用该文件系统。这似乎在容器中不起作用,因此建议设置此值。以下方法之一应该有效(您通常希望使用选项 mounted on /):

  • 运行df -h并选择“文件系统”下的一个选项
  • 运行lsblk并选择“NAME”下的一个选项
  • 运行sudo fdisk -l并选择“设备”下的一个选项

Docker 容器无法可靠地填充

尝试升级代理系统上的 docker 版本。我在运行版本 24 的机器上遇到了这个问题。升级到版本 27 后就解决了。

月/周记录无法可靠地填充

较长时间段的记录是通过对较短时间段的统计数据进行平均而得到的。它们要求代理不间断运行足够长的时间才能获得完整的数据集。

如果暂停/取消暂停代理超过一分钟,数据将不完整,并且当前间隔的时间将重置。

编译

中心和代理均使用 Go 编写,因此您可以轻松地自行构建它们,或针对不同平台进行交叉编译。如果您尚未安装 Go,请先安装。

代理人

cd agent
# prepare / install dependencies
go mod tidy
# create a binary in the current directory
CGO_ENABLED=0 go build -ldflags "-w -s" .

中心

Hub 将 Web UI 嵌入到二进制文件中,因此您必须先构建网站。我使用Bun,但如果您愿意,也可以使用 Node.js:

cd hub/site
bun install
bun run build

然后回到中心目录:

go mod tidy
CGO_ENABLED=0 go build -ldflags "-w -s" .

交叉编译

GOOS您可以使用和环境变量针对不同的平台进行交叉编译GOARCH

例如,为 Linux ARM64 构建:

GOOS=linux GOARCH=arm64 CGO_ENABLED=0 go build -ldflags "-w -s" .

您可以通过运行来查看有效选项的列表go tool dist list

仓库地址

GitHub:https://github.com/henrygd/beszel

网站免责声明
一、资源来源与版权

本网站所有资源及文章均源自互联网,经过我们的收集整理后呈现给用户。我们明确声明,本网站不直接参与任何资源的创作或制作过程,仅作为信息的传递者。若您发现本网站上的任何内容侵犯了您的合法权益(包括但不限于版权、商标权、专利权等),请立即通过以下联系方式与我们取得联系。在收到您的反馈并核实情况后,我们将迅速采取相应措施,包括但不限于删除侵权内容,以确保您的合法权益得到及时保护。

二、资源使用与责任

资源鉴别:本网站发布的资源可能包含水印、广告链接或其他引流信息,这是由资源原始来源决定的。我们提醒用户在使用这些资源时,应保持警惕,自行鉴别信息的真实性和适用性,避免受到不必要的干扰或误导。 非商业用途:本网站提供的资源仅供学习、研究及非商业性交流使用。我们鼓励用户尊重原创,支持正版。若您计划将本站资源用于商业目的,请务必先获得合法授权,否则因此产生的一切法律后果将由下载用户自行承担。

三、联系方式

为了更好地服务用户,解决您在使用本网站过程中可能遇到的问题或反馈侵权信息,我们提供了以下联系方式(请将“#”替换为“@”后使用): 联系方式:contact#kukaylib.com

四、免责条款

本网站致力于为用户提供高质量的信息服务,但对于因网络状况、第三方干扰、不可抗力等因素导致的服务中断、数据丢失、信息错误等问题,本网站不承担任何责任。同时,本网站对于用户在使用本站资源过程中可能产生的任何直接、间接、偶然、特殊或惩罚性损失,也不承担任何法律责任。 请用户在使用本网站时,务必遵守相关法律法规及道德准则,自行承担因使用本站资源而产生的所有风险和后果。

五、更新与修订

本网站有权随时更新或修订本免责声明,更新或修订后的免责声明一经发布即具有法律效力。用户应定期访问本页面以了解最新的免责声明内容。 感谢您对本网站的理解与支持!我们将继续努力,为用户提供更加优质、便捷的信息服务。