Nerve:分布式基础设施智能管理平台的设计与实现
作者 : mmwei3 (2025-10-28)
组织 : 智算运营部
项目地址 : https://github.com/pwxwmm/nerve
开源协议 : MIT License分布式基础设施智能管理平台的设计与实现
- Nerve:分布式基础设施智能管理平台的设计与实现
- 项目背景
- [什么是 Nerve?](#什么是 Nerve?)
- 架构设计
- 核心特性
- [1. 一键安装](#1. 一键安装)
- [2. 完整的数据采集](#2. 完整的数据采集)
- [3. 实时通信](#3. 实时通信)
- [4. 任务执行系统](#4. 任务执行系统)
- [5. 插件系统](#5. 插件系统)
- 快速开始
- [1. 初始化数据库](#1. 初始化数据库)
- [2. 构建并启动 Server](#2. 构建并启动 Server)
- [3. 验证运行](#3. 验证运行)
- [4. 安装 Agent](#4. 安装 Agent)
- 使用场景
- [场景 1:大规模基础设施监控](#场景 1:大规模基础设施监控)
- [场景 2:批量运维任务](#场景 2:批量运维任务)
- [场景 3:自定义监控插件](#场景 3:自定义监控插件)
- 技术亮点
- [1. 高性能设计](#1. 高性能设计)
- [2. 高可靠性](#2. 高可靠性)
- [3. 可扩展性](#3. 可扩展性)
- [4. 安全性](#4. 安全性)
- 监控和告警
- [Prometheus 集成](#Prometheus 集成)
- [Grafana 仪表板](#Grafana 仪表板)
- 项目现状
- 未来规划






在大规模基础设施管理的场景下,如何高效地监控和管理数千台服务器一直是一个挑战。传统的脚本采集方式存在依赖复杂、部署困难、扩展性差等问题。本文将介绍我们团队设计并实现的 Nerve ------ 一个轻量级、生产就绪的分布式基础设施智能管理平台。
项目背景
在生产环境中,我们常常需要:
- 实时监控数千台服务器的硬件信息和系统状态
- 统一管理和分发运维任务
- 快速发现和处理异常
- 支持大规模的集群管理
传统的基于 Python 脚本的方案虽然灵活,但存在以下痛点:
- 部署复杂:每台机器需要安装 Python 环境和依赖库
- 维护困难:脚本分散在各处,更新和同步困难
- 扩展性差:难以支持动态扩展和插件化
- 监控不足:缺乏统一的状态管理和实时通信机制
基于这些需求,我们设计了 Nerve 系统。
什么是 Nerve?
Nerve 是一个轻量级的分布式基础设施智能管理平台,其口号是:
"Nerve --- the distributed intelligence beneath your infrastructure."
Nerve 提供了:
- ✅ 零依赖安装:Agent 是单一二进制文件,无需 Python 环境
- ✅ 一键部署 :
curl | sh即可完成 Agent 安装 - ✅ 实时通信:基于 WebSocket 的双向实时通信
- ✅ 完整监控:详细的硬件信息采集(CPU、内存、GPU、磁盘、网络、IPMI)
- ✅ 任务执行:远程命令执行、脚本运行、Hook 插件系统
- ✅ 水平扩展:设计支持 6000+ 台机器
架构设计
整体架构
┌─────────────┐ HTTP/gRPC ┌──────────────┐
│ Agent │ ◄──────────────────────────► │ Center │
│ (nerve-agent)│ Heartbeat + Tasks │(nerve-center)│
│ │ │ │
│ • Collector │ │ • API Server │
│ • Heartbeat │ │ • Scheduler │
│ • Task Exec │ │ • Registry │
│ • Hook Sys │ │ • Storage │
└─────────────┘ └──────────────┘
系统采用经典的 Agent-Server 架构:
- Agent (nerve-agent):运行在每个被管理的机器上,负责采集系统信息、执行任务、发送心跳
- Server (nerve-center):中央管理服务器,负责 Agent 注册、任务调度、数据存储
技术选型
为什么选择 Go?
- 单二进制部署:编译后为单一可执行文件,无外部依赖
- 高性能:原生并发支持,适合高并发场景
- 跨平台:支持 Linux、Darwin、Windows
- 资源占用低:Agent 大小约 10MB,内存占用 < 100MB
数据存储方案
- MongoDB:主存储,适合半结构化数据,高性能写入
- Redis:缓存层,存储在线 Agent 列表、任务队列等热数据
- Prometheus:指标收集和监控
核心模块
Agent 端
-
系统信息采集模块
- CPU 详细信息(型号、核心数、缓存、指令集)
- 内存信息(总量、DIMM 详情、ECC 状态)
- GPU 信息(NVIDIA/AMD 检测、显存、温度)
- 磁盘信息(容量、RAID、SMART 状态)
- 网络信息(接口详情、IP 地址、流量统计)
- IPMI 管理接口信息
-
心跳机制
- 30秒间隔心跳
- 自动检测离线状态
- 实时上报系统状态
-
任务执行引擎
- 支持命令、脚本、Hook 三种任务类型
- 任务超时保护机制
- 执行结果上报
-
插件系统
- 动态加载 Hook 插件
- 支持自定义扩展功能
Server 端
-
Agent 管理
- Agent 注册和生命周期管理
- 状态监控和离线检测
- Agent 分组和集群管理
-
任务调度
- 任务分发和执行结果收集
- 任务队列管理
- 执行历史记录
-
API 服务
- RESTful API
- WebSocket 实时通信
- 安全认证(Token、TLS)
-
Web UI
- Vue.js 现代化管理界面
- 实时监控和可视化
- 任务管理和集群配置
核心特性
1. 一键安装
Agent 安装极其简单,只需一条命令:
bash
curl -fsSL https://your-server/install.sh | sh -s -- \
--token=<auth_token> \
--server=https://nerve-center.example.com/api
安装脚本会自动:
- 下载 Agent 二进制文件
- 创建 systemd 服务
- 启动并配置 Agent
2. 完整的数据采集
Agent 采集的系统信息包括:
- CPU: 型号、厂商、频率、缓存、指令集、核心数、架构
- Memory: 总量、DIMM 详情、ECC 状态、内存频率
- GPU: NVIDIA/AMD 检测、显存、温度、功耗、驱动版本
- Disk: 容量、型号、SMART 状态、文件系统、RAID 信息
- Network: 接口详情、IP 地址、流量统计、MAC 地址
- IPMI: 管理接口信息、BMC 状态
- System: 操作系统、内核版本、启动时间、负载
3. 实时通信
- WebSocket 双向通信,支持 Server 主动下发任务
- 心跳机制:30秒心跳,自动检测离线
- 实时状态更新:系统状态实时同步
4. 任务执行系统
支持三种任务类型,均具备超时保护:
- Command - 执行 Shell 命令(超时保护)
- Script - 执行脚本文件(沙箱隔离)
- Hook - 执行插件钩子(动态加载)
5. 插件系统
通过 Hook 机制实现可扩展性:
yaml
# 示例 Hook 插件配置
name: custom-monitor
description: 自定义监控脚本
trigger:
type: scheduled
interval: 300
execution:
type: script
path: /opt/scripts/monitor.sh
快速开始
1. 初始化数据库
bash
./scripts/init-db.sh
这会自动创建 MongoDB 数据库、集合和索引。
2. 构建并启动 Server
bash
export GOPROXY="https://mirrors.aliyun.com/goproxy/,direct"
export GO111MODULE=on
go mod download
cd server && go build -o nerve-center && cd ..
./server/nerve-center --addr :8090 --debug
3. 验证运行
bash
curl http://localhost:8090/health
# 应该返回: {"status":"ok"}
4. 安装 Agent
在新机器上运行:
bash
curl -fsSL http://your-server:8090/api/install?token=YOUR_TOKEN | bash
使用场景
场景 1:大规模基础设施监控
- 规模:6000+ 台服务器
- 需求:统一监控硬件状态、系统负载、网络流量
- 解决方案:部署 Agent 到所有机器,通过 Server 统一收集和展示
场景 2:批量运维任务
- 需求:在数百台机器上执行相同的运维任务
- 解决方案:通过 Server 创建任务,自动分发到所有 Agent 执行
场景 3:自定义监控插件
- 需求:需要执行自定义的监控脚本或工具
- 解决方案:通过 Hook 插件系统,动态加载和执行自定义脚本
技术亮点
1. 高性能设计
- 并发处理:Go 协程处理大量并发请求
- 异步任务:任务执行不阻塞主流程
- 缓存优化:Redis 缓存热点数据
2. 高可靠性
- 自动重启:Agent 异常自动重启(systemd 管理)
- 离线检测:自动检测并标记离线 Agent
- 数据持久化:重要数据持久化到 MongoDB
3. 可扩展性
- 水平扩展:支持多个 Server 实例负载均衡
- 插件系统:通过 Hook 机制实现功能扩展
- 多集群支持:支持多集群管理和 Agent 分组
4. 安全性
- Token 认证:Bearer Token 安全认证
- TLS/HTTPS:支持加密通信
- 权限控制:基于角色的访问控制(RBAC)
- 审计日志:完整的操作审计记录
监控和告警
Prometheus 集成
Nerve 集成了 Prometheus,提供了完整的指标收集:
- Agent 状态指标(在线数、离线数、心跳率)
- 任务执行指标(成功率、失败率、平均耗时)
- API 性能指标(请求率、响应时间、错误率)
- 系统健康指标(数据库连接、存储使用)
Grafana 仪表板
提供了开箱即用的 Grafana 仪表板,包括:
- Agent 概览面板
- 任务性能面板
- API 性能面板
- 系统健康面板
项目现状
目前项目已完成核心功能实现:
- ✅ Agent 核心功能(100%):系统信息采集、心跳、任务执行
- ✅ Server 核心功能(100%):Agent 管理、任务调度、API 服务
- ✅ Web UI(100%):现代化管理界面
- ✅ Prometheus 集成(100%):指标收集和监控
- ✅ 安全功能(100%):TLS、Token、审计、权限控制
项目地址 : https://github.com/pwxwmm/nerve
未来规划
- 📊 日志聚合:集成 ELK 或 Loki 实现日志统一管理
- ☁️ 多云支持:支持跨云平台管理
- 🔍 服务发现:自动发现和注册 Agent
- 📈 性能优化:大规模集群的性能优化
- 🛡️ 安全增强:更细粒度的安全控制
Nerve 是一个轻量级、高性能、易扩展的基础设施管理平台。通过 Agent-Server 架构、Go 语言实现、以及完善的插件系统,Nerve 能够很好地解决大规模基础设施管理的痛点。
核心优势:
- 零依赖部署:单一二进制,无需 Python 环境
- 一键安装 :
curl | sh即可完成部署 - 实时通信:WebSocket 双向实时通信
- 完整监控:详细的硬件和系统信息采集
- 水平扩展:支持 6000+ 台机器管理
如果你也在寻找一个轻量级、高性能的基础设施管理解决方案,不妨试试 Nerve。项目已在 GitHub 开源,欢迎 Star 和贡献代码!
项目地址 : https://github.com/pwxwmm/nerve
文档 : 快速开始指南 | 项目结构 | API 文档