avatar

黄金月河3.1

浴火重生

  • 首页
  • Linux基础
  • 运维
  • Github
  • Python
  • 网络安全
  • 软路由
  • 时光手札
  • 关于
Home 轻量级监控告警工具 beszel
文章

轻量级监控告警工具 beszel

Posted 2025-03-11 Updated 2025-03- 11
By 奈幽
22~28 min read

轻量级监控告警工具 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) 按钮。

您将在表格中看到新系统。如果它变为绿色,则表示一切正常。

系统创建表单截图

如果它变为红色,请查看 常见问题 页面。

运维
License:  CC BY 4.0
Share

Further Reading

Apr 8, 2025

rhel9 安装docker和docker-compose

1、rhel9 安装docker 1.1、yum安装 1.1.1、添加镜像源 sudo bash -c "cat > /etc/yum.repos.d/docker-ce.repo"<< EOF [docker-ce-stable] name = docker-ce-stable baseurl

Mar 17, 2025

告别手动运维!Certimate 开源工具实现 SSL 证书全生命周期自动化

告别手动运维!Certimate 开源工具实现 SSL 证书全生命周期自动化 一、为什么需要自动化证书管理? 作为个人开发者或中小企业运维,管理多域名 SSL 证书往往陷入「申请-部署-遗忘续期」的循环。Let's Encrypt 等免费证书 90 天有效期的设定,让每季度的重复性操作成为噩梦——某

Mar 11, 2025

轻量级监控告警工具 beszel

轻量级监控告警工具 beszel 项目信息 项目地址:https://github.com/henrygd/beszel 官方文档:https://beszel.dev/zh/guide/getting-started Beszel 是一个轻量级的服务器监控平台,包含 Docker 统计信息、历史数

OLDER

Debian12上安装Docker和Docker Compose

NEWER

告别手动运维!Certimate 开源工具实现 SSL 证书全生命周期自动化

Recently Updated

  • 奈幽的渗透测试总结-红队
  • 基于Docker的虚拟 Chrome 浏览器
  • Metasploit Framework (MSF) 使用指南
  • rhel9 安装docker和docker-compose
  • 内网穿透工具:zrok

Trending Tags

Halo elasticsearch debian openwrt KeepassXC 必看精选 webdav 热门文章 docker Linux

Contents

©2025 黄金月河3.1. Some rights reserved.

Using the Halo theme Chirpy