Files
membank/auto-check/README.md
张威33321 a8fa159f0f chore: 同步本地更改
- 新增 aio-mcp 项目框架
- 新增 .trae/skills/ OCR/SKU 设计工具
- 更新 auto-check 配置和 stress 包
- 删除 fnhelp 文档目录
- 更新 Docker 压力测试脚本
2026-08-27 20:38:13 +08:00

8.8 KiB
Raw Blame History

auto-check

自动化目标扫描 + SSH 登录 + 远程压力测试工具(支持 CIDR 和 IP 范围格式)。

基于 cobra 命令行框架。

功能

子命令 功能
run 完整流程:发现 → SSH → 压测 全部
scan 仅扫描目标,发现存活设备 pkg/discovery
stress 对指定 IP 执行压力测试 pkg/stress + pkg/sshclient

安装

go build -o auto-check .

使用

# 查看帮助
./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, fnstable, full
--duration 30s 持续时间
--threads 4 线程数
--ips (必填,仅stress) 目标 IP (逗号分隔)

压力测试类型

类型 工具 说明
cpu stress-ng CPU 全方法压测
memory stress-ng 内存压测
disk stress-ng 磁盘IO混合压测
memnative stressapptest 内存稳定性精压(数据完整性校验)
fnstable fnscript 稳定性门禁:社区脚本 self_inspection.py 先行检测硬件stress CPU + memtester 内存校验),通过后自有压测再跑;未通过则自有压测全部跳过
full stress-ng CPU+内存+磁盘 三合一综合压测

稳定性门禁fnstable

基于飞牛社区 fnscriptMITself_inspection.pyvendor 原样收录在 docker/stress-test/vendor/fnscript/,源码不做修改:

  1. 门禁先跑社区脚本CPU 稳定性(stress+ 内存数据校验(memtester 可用内存 97% 单遍30-120 分钟)
  2. 门禁通过 → 自有压测工具stress-ng/fio 等)再跑一遍,按自有格式出报告
  3. 门禁失败 → 自有压测全部 skip报告仍完整输出硬件已有问题无需再跑

适配说明(不改社区脚本源码的代价,已在适配层 scripts/fnstable.sh 规避):

  • 脚本 CLI 模式无论成败 exit code 均为 0结果按 stdout 关键词("未发现问题")判定
  • --memory 有 y/n 交互确认,用 printf 'y\ny\n' 管道喂入
  • 依赖python3/psutil/memtester/stress/sudo预装在压测镜像中

配置(auto-check.yamlstress.fn_memory 控制门禁是否执行 memtester 内存校验(默认 true快速验证可设 false

压测执行方式Docker 容器)

压测统一在 Docker 容器中执行:工具与测试脚本预装在镜像里,无需在目标机在线安装,环境一致性好(飞牛 NAS 默认已安装 Docker

架构设计

auto-check/
├── docker/                    # Docker 镜像维护目录(独立)
│   └── stress-test/
│       ├── Dockerfile         # 镜像定义
│       ├── build.sh           # 构建 + 导出 + 同步配置(时间戳 tag
│       ├── scripts/           # 测试脚本(打包进镜像)
│       │   ├── run.sh         # 入口脚本(环境变量驱动 + 门禁调度)
│       │   ├── fnstable.sh    # 稳定性门禁适配器fnscript 社区脚本 → 结构化协议)
│       │   ├── cpu.sh         # CPU 压测
│       │   ├── memory.sh      # 内存压测
│       │   ├── disk.sh        # 磁盘压测
│       │   └── ...
│       └── vendor/fnscript/   # 社区脚本原样收录self_inspection.pyMIT
└── pkg/stress/
    └── runner.go              # 核心逻辑:送镜像 + 驱动容器测试

工作流程

  1. 检测目标机 Docker 可用性(不可用则判失败)
  2. 检查镜像是否存在(不存在则上传工程目录中的镜像 tar 并 docker load,不依赖 registry
  3. 启动容器执行测试(脚本在镜像内,环境变量传参)
  4. 解析容器输出 → 生成报告

容器内执行流程run.sh

  1. 系统信息(===SYSTEM_INFO===
  2. 温度监控后台采样(temp_start.sh
  3. 稳定性门禁(fnstable.shtypes 含 fnstablefnscript 社区脚本先行检测硬件稳定性,未通过则后续自有压测全部 skip
  4. 各项压测先单项cpu/memory/disk/memnative、综合full最后
  5. 温度监控收尾(===MONITOR:temp===
  6. 内核日志(===MONITOR:dmesg===-T 带时间戳)+ 结束标记

配置方式(在 auto-check.yaml 中)

stress:
  docker_image: "stress-test:20260824-153045"       # 压测镜像 tagbuild.sh 自动维护)
  docker_tar: "docker/stress-test/stress-test.tar"  # 本地镜像文件,目标机无镜像时自动上传并 load
  docker_args: "--network=host --privileged"

容器运行时环境变量

变量 说明 默认值
AUTOCHECK_TYPES 测试类型(逗号分隔) cpu,memory
AUTOCHECK_DURATION 持续时间(秒) 30
AUTOCHECK_THREADS 线程数 4
AUTOCHECK_MEM_SIZE_MB 内存压测大小 0 (自动)
AUTOCHECK_DISK_SIZE_MB 磁盘压测大小 1024
AUTOCHECK_DISK_DIR 磁盘压测目录 /tmp
AUTOCHECK_TEMP_INTERVAL 温度采样间隔 10
AUTOCHECK_SAMPLE_INTERVAL 运行时采样间隔 2
AUTOCHECK_FN_MEMORY fnstable 门禁是否执行 memtester 内存校验 1

容器运行时挂载(由 auto-check 自动添加)

挂载 作用
-v /sys:/sys:ro 容器内是独立 sysfs挂载后才能读到宿主机硬件传感器温度采集依赖此项
-v /etc/localtime:/etc/localtime:ro 容器时区与宿主机一致dmesg 时间戳与采样时间才准确

注意:镜像内已设置 LC_ALL=C.UTF-8。若 locale 为纯 Csensors 会输出 "+51.0 C"(无 ° 符号),导致温度正则失配、采集不到数据。

构建镜像(维护时使用)

固定分发模式:不依赖 registry镜像以 tar 文件形式放在工程目录。推荐用 build.sh(自动时间戳 tag

cd docker/stress-test
./build.sh                       # 自动取当前时间戳YYYYMMDD-HHMMSS
./build.sh 20260824-153045       # 手动指定时间戳(重打/复现)

build.sh 会同时完成:

  1. 用时间戳 tag 构建镜像(不保留 latestdocker images 可区分每次构建)
  2. 导出两份 tar带时间戳归档 stress-test-<时间戳>.tar + 同步覆盖 stress-test.tarauto-check 默认引用)
  3. 自动更新 auto-check.yamldocker_image 字段,确保配置与新 tag 同步

手动构建(不推荐)需自行同步 auto-check.yamldocker_image;旧时间戳镜像可 docker rmi stress-test:<旧时间戳> 清理。

镜像内预装工具

工具 用途
stress-ng CPU/内存/磁盘压测
fio 磁盘 IO 测试
lm-sensors 温度监控
sysstat 系统性能统计
procps 进程监控
python3 + psutil fnscript 稳定性门禁运行环境
memtester fnstable 门禁内存数据校验
stress fnstable 门禁 CPU 压测
sudo fnscript 脚本内部调用 sudo memtester(容器以 root 运行,无密码)

项目结构

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

⚠️ 请在授权设备上使用,未授权扫描/测试可能违反法律法规。