作者: ruan 最后更新: 2025-11-05
- Go: 1.23.2 或更高版本
- Node.js: 18.x 或更高版本
- pnpm: 8.x 或更高版本
- Git: 最新版本
- IDE: GoLand、VS Code、Cursor 等
- Go插件: gopls (语言服务器)
- 代码检查: golangci-lint
- API测试: Postman、curl
- WebSocket测试: wscat、浏览器开发者工具
git clone https://github.com/ruanun/simple-server-status.git
cd simple-server-status# 下载 Go 依赖
go mod download
# 验证依赖
go mod verify
# 可选:整理依赖
go mod tidy# 进入前端目录
cd web
# 安装依赖
pnpm install
# 返回项目根目录
cd ..# 复制配置模板
cp configs/sss-agent.yaml.example sss-agent.yaml
# 编辑配置
nano sss-agent.yaml最小配置示例:
serverAddr: ws://localhost:8900/ws-report
serverId: dev-agent-1
authSecret: dev-secret-key
logLevel: debug# 复制配置模板
cp configs/sss-dashboard.yaml.example sss-dashboard.yaml
# 编辑配置
nano sss-dashboard.yaml最小配置示例:
port: 8900
address: 0.0.0.0
webSocketPath: ws-report
servers:
- name: Dev Agent 1
id: dev-agent-1
secret: dev-secret-key
group: development终端 1 - 启动 Dashboard:
# 在项目根目录
go run ./cmd/dashboard输出示例:
INFO Dashboard 启动中...
INFO HTTP 服务器监听: 0.0.0.0:8900
INFO WebSocket 路径: /ws-report
INFO 前端 WebSocket 路径: /ws-frontend
终端 2 - 启动 Agent:
# 在项目根目录
go run ./cmd/agent输出示例:
INFO Agent 启动中...
INFO 连接到 Dashboard: ws://localhost:8900/ws-report
INFO WebSocket 连接成功
INFO 开始采集系统信息...
终端 3 - 启动前端开发服务器:
cd web
pnpm run dev输出示例:
VITE v6.0.0 ready in 500 ms
➜ Local: http://localhost:5173/
➜ Network: use --host to expose
➜ press h + enter to show help
# 构建所有模块
make build
# 只构建 Agent
make build-agent
# 只构建 Dashboard
make build-dashboard
# 运行 Agent
./bin/sss-agent
# 运行 Dashboard
./bin/sss-dashboard# 1. 构建前端
cd web
pnpm install
pnpm run build:prod
cd ..
# 2. 使用 goreleaser 构建
goreleaser release --snapshot --clean
# 3. 二进制文件输出到 dist/ 目录
ls dist/simple-server-status/
├── cmd/ # 程序入口
│ ├── agent/main.go # Agent 启动入口
│ └── dashboard/main.go # Dashboard 启动入口
│
├── internal/ # 内部包(项目内部使用)
│ ├── agent/ # Agent 实现
│ │ ├── config/ # Agent 配置
│ │ ├── global/ # Agent 全局变量
│ │ ├── adaptive.go # 自适应采集
│ │ ├── errorhandler.go # 错误处理
│ │ ├── gopsutil.go # 系统信息采集
│ │ ├── mempool.go # 内存池
│ │ ├── monitor.go # 性能监控
│ │ ├── network_stats.go # 网络统计(并发安全)
│ │ ├── report.go # 数据上报
│ │ ├── validator.go # 配置验证
│ │ └── ws.go # WebSocket客户端
│ │
│ ├── dashboard/ # Dashboard 实现
│ │ ├── config/ # Dashboard 配置
│ │ ├── global/ # Dashboard 全局变量
│ │ ├── handler/ # HTTP 处理器
│ │ ├── response/ # HTTP 响应封装
│ │ ├── server/ # HTTP 服务器
│ │ ├── public/ # 前端静态文件嵌入
│ │ ├── config_validator.go # 配置验证
│ │ ├── error_handler.go # 错误处理
│ │ ├── frontend_websocket_manager.go # 前端 WebSocket 管理
│ │ ├── middleware.go # 中间件
│ │ └── websocket_manager.go # Agent WebSocket 管理
│ │
│ └── shared/ # 共享基础设施
│ ├── logging/ # 日志初始化
│ │ └── logger.go
│ ├── config/ # 配置加载器
│ │ └── loader.go
│ └── errors/ # 错误类型和处理
│ ├── types.go
│ └── handler.go
│
├── pkg/ # 公共包(可被外部引用)
│ └── model/ # 共享数据模型
│ ├── server.go # 服务器信息
│ ├── cpu.go # CPU 信息
│ ├── memory.go # 内存信息
│ ├── disk.go # 磁盘信息
│ └── network.go # 网络信息
│
├── configs/ # 配置文件示例
│ ├── sss-agent.yaml.example
│ └── sss-dashboard.yaml.example
│
├── web/ # Vue 3 前端
│ ├── src/
│ │ ├── api/ # API 和 WebSocket 客户端
│ │ ├── components/ # Vue 组件
│ │ ├── pages/ # 页面
│ │ ├── stores/ # 状态管理
│ │ └── utils/ # 工具函数
│ ├── package.json
│ └── vite.config.ts
│
├── deployments/ # 部署配置
├── docs/ # 文档
├── scripts/ # 脚本
├── go.mod # 统一的 Go 模块定义
├── Makefile # 构建任务
└── .goreleaser.yaml # 多平台构建配置
- 修改
internal/agent/下的文件 - 运行
go run ./cmd/agent测试 - 查看日志输出验证功能
- 修改
internal/dashboard/下的文件 - 运行
go run ./cmd/dashboard测试 - 使用 API 测试工具验证接口
- 修改
internal/shared/或pkg/model/下的文件 - 同时测试 Agent 和 Dashboard
- 确保向后兼容
cd web
# 启动开发服务器(自动热重载)
pnpm run dev
# 访问 http://localhost:5173- 修改
web/src/下的 Vue 组件 - Vite 自动热重载,浏览器立即更新
- 打开浏览器开发者工具查看 WebSocket 通信
cd web
# 类型检查
pnpm run type-check
# 构建生产版本
pnpm run build:prod
# 输出到 web/dist/使用 golangci-lint 进行代码检查:
# 安装 golangci-lint
go install github.com/golangci/golangci-lint/cmd/golangci-lint@latest
# 运行代码检查
golangci-lint run
# 或使用 Makefile
make lint项目使用的 linters(.golangci.yml):
errcheck- 检查未处理的错误gosimple- 简化代码建议govet- 静态分析ineffassign- 检测无效的赋值staticcheck- 高级静态分析unused- 检查未使用的代码gofmt- 格式化检查goimports- 导入排序检查misspell- 拼写检查unconvert- 不必要的类型转换- 等等...
cd web
# 类型检查
pnpm run type-check
# Lint 检查(如果配置了)
pnpm run lint
# 格式化代码(如果配置了)
pnpm run format使用 delve:
# 安装 delve
go install github.com/go-delve/delve/cmd/dlv@latest
# 调试 Agent
dlv debug ./cmd/agent
# 调试 Dashboard
dlv debug ./cmd/dashboardVS Code 调试配置 (.vscode/launch.json):
{
"version": "0.2.0",
"configurations": [
{
"name": "Debug Agent",
"type": "go",
"request": "launch",
"mode": "debug",
"program": "${workspaceFolder}/cmd/agent",
"cwd": "${workspaceFolder}"
},
{
"name": "Debug Dashboard",
"type": "go",
"request": "launch",
"mode": "debug",
"program": "${workspaceFolder}/cmd/dashboard",
"cwd": "${workspaceFolder}"
}
]
}Agent 日志:
# 实时查看
tail -f logs/agent.log
# 过滤错误
tail -f logs/agent.log | grep ERROR
# 过滤 WebSocket 相关
tail -f logs/agent.log | grep WebSocketDashboard 日志:
# 实时查看
tail -f logs/dashboard.log
# 查看连接事件
tail -f logs/dashboard.log | grep "连接\|断开"
# 查看错误
tail -f logs/dashboard.log | grep ERROR使用 wscat:
# 安装 wscat
pnpm add -g wscat
# 连接到 Dashboard(需要认证)
wscat -c ws://localhost:8900/ws-report \
-H "X-AUTH-SECRET: dev-secret-key" \
-H "X-SERVER-ID: dev-agent-1"
# 发送测试消息
> {"serverId":"dev-agent-1","serverName":"Test"}浏览器开发者工具:
- 打开浏览器开发者工具(F12)
- 切换到 "Network" 标签
- 过滤 "WS"(WebSocket)
- 查看 WebSocket 连接和消息
检查清单:
# 1. Dashboard 是否启动
ps aux | grep sss-dashboard
# 2. 端口是否监听
netstat -an | grep 8900
# 或
lsof -i :8900
# 3. 配置是否正确
cat sss-agent.yaml
cat sss-dashboard.yaml
# 4. 防火墙是否阻止
sudo ufw status检查:
- Dashboard 是否启动在 0.0.0.0:8900
- 浏览器控制台是否有错误
- WebSocket URL 是否正确(ws://localhost:8900/ws-frontend)
# 清理缓存
go clean -cache
# 重新下载依赖
rm go.sum
go mod tidy
# 验证依赖
go mod verify# 清理缓存
cd web
rm -rf node_modules dist
pnpm install
# 重新构建
pnpm run build:prodCPU Profile:
# Agent
go run ./cmd/agent -cpuprofile=cpu.prof
# 分析
go tool pprof cpu.prof内存 Profile:
# Agent
go run ./cmd/agent -memprofile=mem.prof
# 分析
go tool pprof mem.profpprof Web 界面:
go tool pprof -http=:8080 cpu.prof使用浏览器开发者工具:
- Performance 标签 - 记录性能
- Memory 标签 - 内存快照
- Network 标签 - 网络请求分析
版本: 1.0 作者: ruan 最后更新: 2025-11-05