import{_ as s,c as i,o as a,a4 as n}from"./chunks/framework.BmdFiWrL.js";const y=JSON.parse('{"title":"API 接口","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"guide/api.md","filePath":"guide/api.md","lastUpdated":1732521523000}'),h={name:"guide/api.md"},t=n(`

API 接口

哪吒监控支持使用 API 接口查询面板中 Agent 的状态信息

创建 Token

哪吒面板的 API 接口允许使用 Token 认证与 Cookies 认证。要新建一个 Token,在进入管理面板后,点击右上角的头像,选择 “API Token”,进入 Token 管理页面。点击 “API Token”,自定义备注后,点击 “添加”。

如需删除一个 Token,请选择相应的 Token,点击右侧的删除图标。

WARNING

Token 是 API 接口的鉴权凭据,它对你的面板的信息安全非常重要,请不要泄漏你的 Token 给他人。

认证方式

确保在请求头中包含 Authorization: Token 进行身份认证。

Token 认证方式:

Request Headers:
Authorization: Token

使用说明

WARNING

下面示例中的负数时间戳为(0000-00-00),目前表示 Dashboard 上线后该 Agent 从未汇报过,但不建议用正负性判断状态。

TIP

请求方式为 GET,返回格式为 JSON

获取服务器列表

请求:

GET /api/v1/server/list?tag=

参数:

返回示例:

json
{
    "code": 0,
    "message": "success",
    "result": [
        {
            "id": 1,
            "name": "Server1",
            "tag": "Tag1",
            "last_active": 1653014667,
            "ipv4": "1.1.1.1",
            "ipv6": "",
            "valid_ip": "1.1.1.1"
        },
        {
            "id": 2,
            "name": "Server2",
            "tag": "Tag2",
            "last_active": -62135596800,
            "ipv4": "",
            "ipv6": "",
            "valid_ip": ""
        }
    ]
}

获取服务器详情

请求:

GET /api/v1/server/details?id=&tag=

参数:

返回示例:

json
{
    "code": 0,
    "message": "success",
    "result": [
        {
            "id": 1,
            "name": "Server1",
            "tag": "Tag1",
            "last_active": 1653015042,
            "ipv4": "1.1.1.1",
            "ipv6": "",
            "valid_ip": "1.1.1.1",
            "host": {
                "Platform": "darwin",
                "PlatformVersion": "12.3.1",
                "CPU": [
                    "Apple M1 Pro 1 Physical Core"
                ],
                "MemTotal": 17179869184,
                "DiskTotal": 2473496842240,
                "SwapTotal": 0,
                "Arch": "arm64",
                "Virtualization": "",
                "BootTime": 1652683962,
                "CountryCode": "hk",
                "Version": ""
            },
            "status": {
                "CPU": 17.33,
                "MemUsed": 14013841408,
                "SwapUsed": 0,
                "DiskUsed": 2335048912896,
                "NetInTransfer": 2710273234,
                "NetOutTransfer": 695454765,
                "NetInSpeed": 10806,
                "NetOutSpeed": 5303,
                "Uptime": 331080,
                "Load1": 5.23,
                "Load5": 4.87,
                "Load15": 3.99,
                "TcpConnCount": 195,
                "UdpConnCount": 70,
                "ProcessCount": 437
            }
        },
        {
            "id": 2,
            "name": "Server2",
            "tag": "Tag2",
            "last_active": -62135596800,
            "ipv4": "",
            "ipv6": "",
            "valid_ip": "",
            "host": {
                "Platform": "",
                "PlatformVersion": "",
                "CPU": null,
                "MemTotal": 0,
                "DiskTotal": 0,
                "SwapTotal": 0,
                "Arch": "",
                "Virtualization": "",
                "BootTime": 0,
                "CountryCode": "",
                "Version": ""
            },
            "status": {
                "CPU": 0,
                "MemUsed": 0,
                "SwapUsed": 0,
                "DiskUsed": 0,
                "NetInTransfer": 0,
                "NetOutTransfer": 0,
                "NetInSpeed": 0,
                "NetOutSpeed": 0,
                "Uptime": 0,
                "Load1": 0,
                "Load5": 0,
                "Load15": 0,
                "TcpConnCount": 0,
                "UdpConnCount": 0,
                "ProcessCount": 0
            }
        }
    ]
}

获取 ICMP Ping / TCPing 数据

此 API 无需认证。(除限制游客访问的服务器)

请求:

GET /api/v1/monitor/{id}

参数:

返回示例:

json
{
    "code": 0,
    "message": "success",
    "result": [
        {
            "monitor_id": 1,
            "server_id": 1,
            "monitor_name": "Monitor1",
            "server_name": "Server1",
            "created_at": [
                1722142860000,
                1722142920000
            ],
            "avg_delay": [
                68.2275,
                70.1129
            ]
        },
        {
            "monitor_id": 2,
            "server_id": 1,
            "monitor_name": "Monitor2",
            "server_name": "Server1",
            "created_at": [
                1722142860000,
                1722142920000
            ],
            "avg_delay": [
                66.656,
                68.2153
            ]
        },
        {
            "monitor_id": 3,
            "server_id": 1,
            "monitor_name": "Monitor3",
            "server_name": "Server1",
            "created_at": [
                1722142860000,
                1722142920000
            ],
            "avg_delay": [
                61.4525,
                62.342
            ]
        }
    ]
}

注: created_atavg_delay 为对应关系。

自动注册节点

说明: 用于自动化注册节点的脚本,示例代码详见下文。

参考: https://github.com/naiba/nezha/pull/472

http
POST /api/v1/server/register?simple=1

参数:

请求体 (Payload):

你可以设置为空内容({}), 然后nezha面板会使用默认值进行填充

你也可以设置自己的请求参数:

json
{
  "Name": "abcd",        // 节点名称
  "Tag": "",             // 标签,可选
  "Note": "",            // 备注信息,可选
  "HideForGuest": "on"   // 是否对访客隐藏
}

使用案例

获取所有服务器信息

python
import requests

url = "http://your-dashboard/api/v1/server/list"
headers = {
    "Authorization": "your_token"
}

response = requests.get(url, headers=headers)
data = response.json()

for server in data['result']:
    print(f"Server Name: {server['name']}, Last Active: {server['last_active']}, IP: {server['valid_ip']}")

获取特定服务器详情

python
import requests

server_id = 1  # 替换为你的服务器ID
url = f"http://your-dashboard/api/v1/server/details?id={server_id}"
headers = {
    "Authorization": "your_token"
}

response = requests.get(url, headers=headers)
data = response.json()

server = data['result'][0]
print(f"Server Name: {server['name']}")
print(f"CPU Usage: {server['status']['CPU']}%")
print(f"Memory Used: {server['status']['MemUsed']} bytes")
print(f"Disk Used: {server['status']['DiskUsed']} bytes")
print(f"Network In Speed: {server['status']['NetInSpeed']} bytes/s")
print(f"Network Out Speed: {server['status']['NetOutSpeed']} bytes/s")

通过以上示例代码,可以轻松获取和处理服务器的状态信息,从而实现自动化监控和管理。

自动注册节点

  1. 创建文件 nezha_register.sh,将以下内容复制到文件中:
bash
#!/bin/bash

# Exit if NEZHA_TOKEN is not set
if [ -z "\${NEZHA_TOKEN}" ]; then
    echo "NEZHA_TOKEN is not set. Exiting."
    exit 0
fi

# Set default values if variables are not set
NEZHA_PROBE_ADDRESS="\${NEZHA_PROBE_ADDRESS:-probe.example.com}"
NEZHA_PROBE_PORT="\${NEZHA_PROBE_PORT:-5555}"
NEZHA_DASHBOARD_URL="\${NEZHA_DASHBOARD_URL:-https://nezha.example.com}"

NODE_NAME=\${NODE_NAME:-$(hostname)}

# Send POST request and capture response and HTTP status code
response=$(curl -s -o response_body.json -w "%{http_code}" -X POST "\${NEZHA_DASHBOARD_URL}/api/v1/server/register?simple=true" \\
  -H "Content-Type: application/json" \\
  -H "Authorization: \${NEZHA_TOKEN}" \\
  -d "{\\"Name\\": \\"\${NODE_NAME}\\"}")

# Extract HTTP status code and Nezha secret
HTTP_CODE="$response"
NEZHA_SECRET=$(cat response_body.json)
rm -f response_body.json

if [ "$HTTP_CODE" != "200" ]; then
    echo "Failed to get Nezha Secret. HTTP status code: $HTTP_CODE"
    exit 1
fi

# Additional check for NEZHA_SECRET to ensure it's not JSON-formatted (indicating failure)
if [[ "\${NEZHA_SECRET:0:1}" == "{" ]]; then
    echo "Failed to get Nezha Secret. Received response: \${NEZHA_SECRET}"
    exit 1
fi

# Download and execute the install script with cleanup
curl -fsSL https://raw.githubusercontent.com/nezhahq/scripts/main/install.sh -o nezha.sh && \\
chmod +x nezha.sh || { echo "Failed to download or make the script executable"; exit 1; }

# Clean up nezha.sh on exit
trap 'rm -f nezha.sh' EXIT

# Run the Nezha agent installation script
CMD="./nezha.sh install_agent "\${NEZHA_PROBE_ADDRESS}" "\${NEZHA_PROBE_PORT}" "\${NEZHA_SECRET}" --tls"

echo "Run commnad : \${CMD}"

eval $CMD
  1. 为脚本赋予可执行权限: chmod +x nezha_register.sh
  2. 从dashboard获取token, 比如为 POXbxorKJBM8wPMKX8r2PdMblyXvpggB
  3. 配置环境变量
bash
export NEZHA_TOKEN="POXbxorKJBM8wPMKX8r2PdMblyXvpggB" # 从面板获取
export NEZHA_PROBE_ADDRESS="your_probe_address"        # 填写探针地址
export NEZHA_DASHBOARD_URL="https://nezha.example.com" # 修改为你的面板地址
export NEZHA_PROBE_PORT="5555"                         # 修改为你的探针端口(如有不同)
  1. 运行注册脚本
bash
./nezha_register.sh
  1. 如果脚本成功运行,你会看到类似以下的日志:
bash
Run command: ./nezha.sh install_agent probe.example.com 5555 YOUR_SECRET --tls
`,62),k=[t];function l(p,e,E,r,d,F){return a(),i("div",null,k)}const o=s(h,[["render",l]]);export{y as __pageData,o as default};