编程 go-oam:一个给网管 Agent 用的 Go 通信 SDK

2026-09-03 10:14:58

go-oam:一个给网管 Agent 用的 Go 通信 SDK

项目地址:https://github.com/TsMask/go-oam

go-oam 是一个用 Go 编写的网络运维(OAM,Operations, Administration, Maintenance)场景 SDK。它将 WebSocket 通信、HTTP 数据推送、系统状态采集与远程连接能力打包成独立模块,用于搭建 Agent 与网管系统(NMS)之间的通信层。

它的定位是「通信层工具箱」:可以只引入某个独立模块,例如单独使用 pkg/ 下的文件与系统工具;也可以将 ws/push/ 组合,搭出 OAM Agent 与 NMS 之间的完整通信基座。

核心功能与技术栈

ws/ 模块提供 WebSocket 服务端与客户端,支持 JSON / MsgPack / Protobuf 三种编解码方式,内置发布订阅(Pub/Sub)模型、中间件机制(鉴权、日志、限流)、心跳保活与客户端自动重连。

push/ 模块实现 HTTP 数据推送框架:同步方式支持失败重试,异步方式通过队列与重试策略解耦高频上报和网络抖动。配套的 Metrics 与 History 均支持分片存储,另有 Timer 周期定时器用于定时采集与上报。

pkg/ 为基础工具包,包含系统状态采集(基于 gopsutil/v4,读取 CPU、内存、磁盘)、SSH / SFTP / Telnet 远程连接、命令执行与 PTY 伪终端、文件上传与归档、ringbuffer 环形缓冲、TCP/UDP Socket 封装,以及加密摘要、时间解析、随机生成等工具。

主要依赖:

  • WebSocket:github.com/coder/websocket
  • HTTP 客户端:github.com/go-resty/resty/v2
  • MsgPack / Protobuf:vmihailenco/msgpack/v5google.golang.org/protobuf
  • 系统状态采集:github.com/shirou/gopsutil/v4
  • PTY:github.com/creack/pty
  • SSH / SFTP:golang.org/x/crypto/sshgithub.com/pkg/sftp
  • 语言版本:Go 1.25+

架构设计

SDK 采用分层模块化设计。顶层入口为 oam.New(),目前负责版本配置与查询;下层按职责拆分为两个通信模块和一个基础工具包。ws/ 内部包含 server(连接管理与发布订阅)、client(状态机与自动重连)、codec(编解码)与 protocol(Protobuf 定义);push/ 由 client(Worker 队列与重试)、history、metrics、timer 组成。pkg/ 不依赖前两者,可独立引入。

目录结构(精简):

go-oam/
├── oam.go          # SDK 入口与版本
├── ws/             # WebSocket:server/client/codec/protocol/types
├── push/           # 推送:client/history/metrics/timer
├── pkg/            # 工具:cmd/crypto/file/ssh/state/socket/telnet...
└── examples/       # ws 与 push 示例

各模块均带有独立的 README 文档说明。

快速开始

引入 SDK(需 Go 1.25+):

go get github.com/tsmask/go-oam

运行最小示例,启动 WebSocket 服务端并连接:

go run ./examples/ws/server
go run ./examples/ws/client

push/ 模块另提供 usage(综合示例)与 stats(指标/历史基准)可一键运行。

适用与需谨慎的场景

适合用在网管平台、设备监控或运维中台这类需要与大量设备维持长连接、可靠上报采集指标、偶尔远程执行命令的场景。ws/ + push/ 可以组装成 Agent 到 NMS 的通信链路,或单独取用 pkg/ 下的 SSH、文件、系统采集等工具嵌入现有项目。模块间零耦合的设计,按需引入的成本较低。

需要留意的是:gopsutil 对于跨平台指标的支持并不完全一致,在 Linux 之外的环境需要针对采集项做验证;项目整体面向 Go 服务端集成,若 Agent 端是其他语言或需要极小的二进制体积,需要自行评估依赖开销。此外 WebSocket 生产部署涉及 TLS 与反向代理层配置,接入前要做好对应规划。

复制全文 生成海报 Go SDK 网络运维 WebSocket SSH

推荐文章

程序员茄子在线接单