140 lines
4.7 KiB
Markdown
140 lines
4.7 KiB
Markdown
# auto-check
|
||
|
||
自动化目标扫描 + SSH 登录 + 远程压力测试工具(支持 CIDR 和 IP 范围格式)。
|
||
|
||
基于 [cobra](https://github.com/spf13/cobra) 命令行框架。
|
||
|
||
## 功能
|
||
|
||
| 子命令 | 功能 | 包 |
|
||
|--------|------|-----|
|
||
| `run` | 完整流程:发现 → SSH → 压测 | 全部 |
|
||
| `scan` | 仅扫描目标,发现存活设备 | `pkg/discovery` |
|
||
| `stress` | 对指定 IP 执行压力测试 | `pkg/stress` + `pkg/sshclient` |
|
||
|
||
## 安装
|
||
|
||
```bash
|
||
go build -o auto-check .
|
||
```
|
||
|
||
## 使用
|
||
|
||
```bash
|
||
# 查看帮助
|
||
./auto-check --help
|
||
|
||
# 仅扫描目标(CIDR 格式)
|
||
./auto-check scan --cidr 192.168.1.0/24
|
||
|
||
# 仅扫描目标(IP 范围格式)
|
||
./auto-check scan --cidr 192.168.1.1-192.168.1.100
|
||
|
||
# 对指定主机执行压力测试
|
||
./auto-check stress --ips 192.168.1.100,192.168.1.101 --user root --password secret --stress cpu,memory,disk
|
||
|
||
# 完整流程(扫描 → SSH → 压测)
|
||
./auto-check run --cidr 192.168.1.0/24 --user root --password secret --stress cpu,memory,disk
|
||
```
|
||
|
||
## 全局标志
|
||
|
||
| 标志 | 默认值 | 说明 |
|
||
|------|--------|------|
|
||
| `--cidr` | `192.168.1.0/24` | 目标网段或 IP 范围 (CIDR 或 起始IP-结束IP) |
|
||
| `--user` | `root` | SSH 用户名 |
|
||
| `--password` | _(空)_ | SSH 密码 |
|
||
| `--key` | _(空)_ | SSH 私钥路径 |
|
||
| `--port` | `22` | SSH 端口 |
|
||
| `--timeout` | `3s` | 超时 |
|
||
| `--concurrency` | `50` | 并发扫描数 |
|
||
| `--report` | _(自动生成)_ | 报告输出路径 |
|
||
|
||
## 子命令标志
|
||
|
||
### `run` / `stress`
|
||
| 标志 | 默认值 | 说明 |
|
||
|------|--------|------|
|
||
| `--stress` | `cpu,memory` | 压测类型: `cpu`, `memory`, `disk`, `memnative`, `full` |
|
||
| `--duration` | `30s` | 持续时间 |
|
||
| `--threads` | `4` | 线程数 |
|
||
| `--ips` | _(必填,仅stress)_ | 目标 IP (逗号分隔) |
|
||
|
||
## 压力测试类型
|
||
|
||
| 类型 | 工具 | 说明 |
|
||
|------|------|------|
|
||
| `cpu` | stress-ng | CPU 全方法压测 |
|
||
| `memory` | stress-ng | 内存压测 |
|
||
| `disk` | stress-ng | 磁盘IO混合压测 |
|
||
| `memnative` | stressapptest | 内存稳定性精压(数据完整性校验) |
|
||
| `full` | stress-ng | CPU+内存+磁盘 三合一综合压测 |
|
||
|
||
## 压测执行方式(Docker 容器)
|
||
|
||
压测统一在 Docker 容器中执行:工具与测试脚本预装在镜像里,无需在目标机在线安装,环境一致性好(飞牛 NAS 默认已安装 Docker)。
|
||
|
||
### 架构设计
|
||
```
|
||
auto-check/
|
||
├── docker/ # Docker 镜像维护目录(独立)
|
||
│ └── stress-test/
|
||
│ ├── Dockerfile # 镜像定义
|
||
│ ├── scripts/ # 测试脚本(打包进镜像)
|
||
│ │ ├── run.sh # 入口脚本(环境变量驱动)
|
||
│ │ ├── cpu.sh # CPU 压测
|
||
│ │ ├── memory.sh # 内存压测
|
||
│ │ ├── disk.sh # 磁盘压测
|
||
│ │ └── ...
|
||
│ └── README.md
|
||
└── pkg/stress/
|
||
└── runner.go # 核心逻辑:送镜像 + 驱动容器测试
|
||
```
|
||
|
||
### 工作流程
|
||
1. 检测目标机 Docker 可用性(不可用则判失败)
|
||
2. 检查镜像是否存在(不存在则上传工程目录中的镜像 tar 并 `docker load`,不依赖 registry)
|
||
3. 启动容器执行测试(脚本在镜像内,环境变量传参)
|
||
4. 解析容器输出 → 生成报告
|
||
|
||
### 配置方式(在 `auto-check.yaml` 中)
|
||
```yaml
|
||
stress:
|
||
docker_image: "stress-test:latest" # 压测镜像(飞牛 NAS 默认支持 Docker)
|
||
docker_tar: "docker/stress-test/stress-test.tar" # 本地镜像文件,目标机无镜像时自动上传并 load
|
||
docker_args: "--network=host --privileged"
|
||
```
|
||
|
||
### 构建镜像(维护时使用)
|
||
```bash
|
||
cd docker/stress-test
|
||
docker build -t stress-test:latest .
|
||
# 导出到工程目录,供测试时上传分发(不依赖 registry)
|
||
docker save -o stress-test.tar stress-test:latest
|
||
```
|
||
|
||
### 详细文档
|
||
镜像维护说明请参考:[docker/stress-test/README.md](docker/stress-test/README.md)
|
||
|
||
## 项目结构
|
||
|
||
```
|
||
auto-check/
|
||
├── main.go
|
||
├── cmd/
|
||
│ └── root.go # 所有子命令
|
||
├── pkg/
|
||
│ ├── discovery/ # 设备发现
|
||
│ ├── sshclient/ # SSH 客户端
|
||
│ ├── stress/ # 压力测试(Docker 容器驱动)
|
||
│ │ ├── types.go # 类型定义
|
||
│ │ ├── tools.go # Docker 环境检测
|
||
│ │ ├── metrics.go # 指标定义 + 配置
|
||
│ │ └── runner.go # 调度器(送镜像 + 驱动容器)
|
||
│ └── report/ # 报告模块
|
||
├── go.mod
|
||
└── README.md
|
||
```
|
||
|
||
> ⚠️ 请在授权设备上使用,未授权扫描/测试可能违反法律法规。
|