轻量级监控告警工具 beszel
轻量级监控告警工具 beszel
项目信息
项目地址:https://github.com/henrygd/beszel
官方文档:https://beszel.dev/zh/guide/getting-started
Beszel 是一个轻量级的服务器监控平台,包含 Docker 统计信息、历史数据和警报功能。
它拥有友好的 Web 界面、简单的配置,并且开箱即用。它支持自动备份、多用户、OAuth 身份验证和 API 访问。
功能
- 轻量级: 比主要解决方案更小,资源占用更少。
- 简单: 易于设置,无需公网暴露。
- Docker 统计: 跟踪每个容器的 CPU、内存和网络使用历史。
- 警报: 可配置 CPU、内存、磁盘、带宽、温度和状态的警报。
- 多用户: 用户管理自己的系统。管理员可以在用户之间共享系统。
- OAuth / OIDC: 支持多种 OAuth2 提供程序。可以禁用密码验证。
- 自动备份: 从磁盘或 S3 兼容的存储保存和恢复数据。
- REST API: 在您自己的脚本和应用程序中使用或更新您的数据。
技术架构
Beszel 由两个主要组件组成:中心 (hub) 和 代理 (agent)。
- 中心 (hub): 一个基于 PocketBase 构建的 Web 应用程序,提供用于查看和管理连接系统的仪表板。
- 代理 (agent): 在您要监控的每个系统上运行,创建一个最小的 SSH 服务器以将系统指标传递到中心。
支持的指标
- CPU 使用率 - 主机系统和 Docker / Podman 容器。
- 内存使用率 - 主机系统和容器。包括交换分区和 ZFS ARC。
- 磁盘使用率 - 主机系统。支持多个分区和设备。
- 磁盘 I/O - 主机系统。支持多个分区和设备。
- 网络使用率 - 主机系统和容器。
- 温度 - 主机系统传感器。
- GPU 使用率 / 温度 / 功耗 - 仅限 Nvidia 和 AMD。必须使用二进制代理。
Hub部署
Beszel Hub 支持通过 Docker/ Podman 或单个二进制文件进行安装,这里以 Docker 安装为例。
Docker run 部署Hub
创建挂载目录
mkdir -p data/software/beszel/data
运行容器
docker run -d \
--name beszel \
-v /data/software/beszel/data:/beszel_data \
-p 8090:8090 \
henrygd/beszel
在端口 8090 上启动 Beszel 服务,并挂载 data/software/beszel/data 目录用于持久存储。
容器启动成功后,浏览器访问:
http://{ip/域名}:8090
首次访问,需要创建管理员账户。
登录成功后,点击右上角的添加客户端。填入相关信息后,记得保存公钥,Agent 中需要使用!
docker-compose.yml 部署Hub
- 此配置通常可以直接使用,但在 Web 界面添加系统时需要执行以下步骤:
- 使用您的公钥更新
KEY
值,然后再次运行docker compose up -d
以重新启动代理 - 使用
/beszel_socket/beszel.sock
作为 主机/IP。
创建一个目录用于存储 docker-compose.yml 文件
mkdir beszel
cd beszel
创建一个 docker-compose.yml 文件,粘贴示例内容并保存
vim docker-compose.yml
services:
beszel:
image: henrygd/beszel:latest
container_name: beszel
restart: unless-stopped
ports:
- 8090:8090
volumes:
- ./beszel_data:/beszel_data
- ./beszel_socket:/beszel_socket
beszel-agent:
image: henrygd/beszel-agent:latest
container_name: beszel-agent
restart: unless-stopped
network_mode: host
volumes:
- ./beszel_socket:/beszel_socket
- /var/run/docker.sock:/var/run/docker.sock:ro
environment:
LISTEN: /beszel_socket/beszel.sock
# 请勿删除密钥周围的引号
KEY: '使用"添加系统"对话框复制的公钥进行更新'
启动服务
docker compose up -d
二进制文件部署
下载安装:
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 http "0.0.0.0:8090"
程序运行后会在当前目录生成beszel_data/id_ed25519.pub
ssh公钥,该公钥用于启动Agent服务。
创建管理员用户
启动中心 (hub) 后,导航至 http://localhost:8090 或您选择的地址。
系统将提示您创建帐户:
Agent部署
Docker 安装:
docker run -d \
--name beszel-agent \
--network host \
-v /var/run/docker.sock:/var/run/docker.sock:ro \
-e KEY="公钥" \
-e PORT=45876 \
henrygd/beszel-agent:latest
注意:
- 公钥需要填入前面保存的公钥信息
- Agent 必须使用主机网络模式才能访问网络接口指标,这将自动暴露端口,可自定义暴露端口
- 如果 Agent 和 Hub 位于不同的主机上,需要在 Agent 主机的防火墙上开放对应的端口权限,以允许 Hub 访问 Agent
Linux Agent部署
https://github.com/henrygd/beszel/releases/download/v0.9.1/beszel-agent_linux_amd64.tar.gz
Agent安装
下载安装:
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
OS_TYPE=$(uname -s)
ARCH_TYPE=$(uname -m | sed 's/x86_64/amd64/' | sed 's/armv7l/arm/' | sed 's/aarch64/arm64/')
DOWNLOAD_URL="https://github.com/henrygd/beszel/releases/latest/download/beszel-agent_${OS_TYPE}_${ARCH_TYPE}.tar.gz"
curl -sL "$DOWNLOAD_URL" -o beszel-agent.tar.gz
tar -xzf beszel-agent.tar.gz
tee ./beszel-agent >/dev/null
chmod +x beszel-agent
ls beszel-agent
运行程序:
PORT=45876 KEY="{SSH公钥}" ./beszel-agent
PORT=45876 KEY="ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIPZ+VU7l9+hY/ZObvIjVH3uqh4nVTtKUcFB49gXrkqdo" ./beszel-agent
Windows Agent部署
使用 PowerShell 脚本
PowerShell 是 Windows 原生支持的脚本工具,适合监控服务状态并发送数据。
示例脚本:
# 配置参数
$beszelHubUrl = "http://<Beszel_Hub_URL>:<port>/api/v1/publish"
$topic = "windows/services/status"
$serverName = $env:COMPUTERNAME
# 获取服务状态
$services = Get-Service | Select-Object Name, Status
# 构造 JSON 数据
$data = @{
server = $serverName
timestamp = (Get-Date).ToUniversalTime().ToString("o")
services = @()
}
foreach ($service in $services) {
$data.services += @{
name = $service.Name
status = $service.Status
}
}
# 将数据转换为 JSON
$jsonData = $data | ConvertTo-Json -Depth 2
# 发送数据到 Beszel Hub
Invoke-RestMethod -Uri $beszelHubUrl -Method POST -Body $jsonData -ContentType "application/json"
运行方式:
- 将脚本保存为
monitor-services.ps1
。 - 使用 Windows 任务计划程序(Task Scheduler)定时运行脚本,例如每 1 分钟执行一次。
使用 Python 脚本
如果需要更灵活的功能,可以使用 Python 脚本实现。
示例脚本:
import json
import socket
import requests
import subprocess
from datetime import datetime
# 配置
BESZEL_HUB_URL = "http://<Beszel_Hub_URL>:<port>/api/v1/publish"
TOPIC = "windows/services/status"
SERVER_NAME = socket.gethostname()
# 获取服务状态
def get_services_status():
services = []
result = subprocess.run(["sc", "query", "state= all"], capture_output=True, text=True)
for line in result.stdout.splitlines():
if "SERVICE_NAME" in line:
service_name = line.split(":")[1].strip()
if "STATE" in line:
status = line.split(":")[1].strip().split(" ")[1]
services.append({"name": service_name, "status": status})
return services
# 构造数据
data = {
"server": SERVER_NAME,
"timestamp": datetime.utcnow().isoformat(),
"services": get_services_status()
}
# 发送数据到 Beszel Hub
response = requests.post(
BESZEL_HUB_URL,
json={
"topic": TOPIC,
"payload": data
}
)
# 打印结果
print(f"Status Code: {response.status_code}, Response: {response.text}")
运行方式:
- 安装 Python 和
requests
库:pip install requests
。 - 将脚本保存为
monitor_services.py
。 - 使用 Windows 任务计划程序定时运行脚本。
配置 Beszel Hub 接收数据
在 Beszel Hub 中,配置一个主题来接收监控数据。例如,可以使用主题 windows/services/status
。
Beszel Hub 配置示例:
- 主题名称:
windows/services/status
- 数据格式:JSON
- 示例数据:
{ "server": "Server01", "timestamp": "2025-03-10T08:00:00Z", "services": [ {"name": "Spooler", "status": "Running"}, {"name": "W32Time", "status": "Stopped"} ] }
Agent 接入 Hub
配置您的第一个系统
单击右上角的 添加系统 (Add System) 按钮以打开系统创建对话框。
本示例中我们使用的是本地 unix 套接字,但您也可以使用远程代理。
在启动代理之前,请勿点击对话框中的 添加系统 (Add System) 按钮。
启动代理
docker指令
从 添加系统 (Add System) 对话框复制 docker-compose.yml 内容。
创建一个目录来存储代理的 docker-compose.yml 文件。
mkdir beszel-agent
cd beszel-agent
创建一个名为 docker-compose.yml 的文件,并粘贴 添加系统 (Add System) 对话框中提供的内容。
vim docker-compose.yml
启动代理
docker compose up -d
二进制文件安装说明
安装脚本仅适用于 Linux 系统
如果您使用的是其他操作系统,请手动下载并运行适合您系统的正确二进制文件。有关详细信息,请参阅 代理安装 页面或 编译 页面。
从 添加系统 (Add System) 对话框复制二进制安装命令。
打开终端并运行该命令。
这将下载正确的二进制文件,创建一个名为 beszel 的用户,并启动代理。它还将创建一个服务以使其在重新启动后继续运行,并可以选择启用自动每日更新。
完成添加系统
现在代理正在运行,请单击对话框中的 添加系统 (Add System) 按钮。
您将在表格中看到新系统。如果它变为绿色,则表示一切正常。
如果它变为红色,请查看 常见问题 页面。