Uroboros

技术 · TECH2026.08.24
33 次阅读

web服务接入beszel api

给我自己的web服务接入beszel的restful api

引言  

一直以来都使用开源工具beszel作为我服务器的探针工具,这个工具部署简单,用起来也很方便,但他也有一个缺点,必须登录以后才能查看面板数据,正好最近闲的无聊,就开始研究在我自己的管理后台中接入beszel的api,方便自己查看。

一、创建账号    

beszel后台使用的是pocketbase,所以我们可以选择先创建一个仅查看的账号:

https://static.ua42.com/blog/article/N-CXFyXZNg8mEFnH2yreS.png

二、授予权限

选到对应的服务器,授予这个用户权限:

https://static.ua42.com/blog/article/aKFD81RBXCVmTVQV2gTgV.png

三、调用接口

到这里我们的准备工作就完成了,因为我后端语言是go,没有pocketbase的SDK,所以我选择直接调用他的服务端接口。如果用的是nodejs作为后端,会简单很多,可以直接使用官方提供的SDK。

流程很简单,第一步是通过登录接口拿到用户token,这里用curl 示例

bash
复制代码
curl -X POST \
  'https://example.com/api/collections/users/auth-with-password' \
  -H 'Content-Type: application/json' \
  -d '{
    "identity": "<example@xx.com>",
    "password": "<your_password>"
  }'

拿到token后请求系统列表:

bash
复制代码
curl -X GET \
  'https://example.com/api/collections/systems/records?page=1&perPage=500' \
  -H 'Content-Type: application/json' \
  -H 'Authorization: Bearer <your_token>'

此时我们可以获取到可以查看的系统列表数据:

列表中我们需要获取的数据就是id和info了,关于info的定义我们可以从项目的源代码中查看: https://github.com/henrygd/beszel/blob/main/internal/entities/system/system.go

json
复制代码
{
    "items": [
        {
            ...
            "host": "", 
            "id": "your_system_id", 
            "info": {
                "t": 2, 
                "u": 48235071, 
                "cpu": 1.14, 
                "mp": 60.79, 
                "dp": 24.34, 
                "v": "0.18.6", 
                "bb": 4755, 
                "la": [
                    0, 
                    0, 
                    0
                ], 
                "ct": 1
            }
            ...
        }
    ]
    ...
}

这里只能获取到部分数据,我们还需要获取某个系统详细的信息:

bash
复制代码
curl -X GET \
  'https://example.com/api/collections/system_details/records/<上一步获取到的id>' \
  -H 'Content-Type: application/json' \
  -H 'Authorization: Bearer <your_token>'
{
    "arch": "x86_64", 
    "collectionId": "", 
    "collectionName": "system_details", 
    "cores": 2, 
    "cpu": "AMD EPYC 7K62 48-Core Processor", 
    "hostname": "localhost", 
    "id": "", 
    "kernel": "6.1.0-29-cloud-amd64", 
    "memory": 2075701248, 
    "os": 0, 
    "os_name": "Debian GNU/Linux 12 (bookworm)", 
    "podman": false, 
    "system": "", 
    "threads": 2, 
    "updated": "2026-08-17 11:34:15.518Z"
}

然后将这两步获取到的数据组装好返回给前端就好了。

四、最终效果:

https://static.ua42.com/blog/article/A8A6oLGR5IlDVmXIcXX-T.png

后期可以自己选择要不要接入图表,因为我目前只需要简单查看,就暂时不接入了。

 

工具Golang