feat: 飞牛NAS成本审核更新 - 新增SKU、更新价格表、清理归档及订单记录,同步auto-check改动

This commit is contained in:
12600k-rog-d4
2026-08-27 00:44:44 +08:00
parent bde60dbea0
commit a172a9bb5e
82 changed files with 1804 additions and 1180 deletions

View File

@@ -1,26 +1,36 @@
# 压力测试工具镜像
#
# 用途:为 auto-check 提供预装压测工具的容器环境
# 优势:工具预装在镜像中,无需在线安装,环境一致性好,适合国内网络环境
# 用途:为 auto-check 提供预装压测工具与脚本的容器环境
# 优势:工具预装在镜像中,无需在目标机在线安装,环境一致性好
#
# 工作流程:
# 工作流程(固定分发模式,不依赖 registry
# 1. auto-check 检测目标机器的 Docker 可用性
# 2. 从 Registry 拉取镜像(或本地已存在则跳过)
# 3. 启动容器执行测试(脚本已打包在镜像中)
# 2. 目标机无镜像时,上传工程目录中导出的 tardocker save并 docker load
# 3. 启动容器执行测试(脚本已打包在镜像中,挂载 /sys 采集温度
# 4. 收集测试结果并解析
#
# 构建命令
# 构建与导出(推荐用脚本,自动时间戳 tag
# cd docker/stress-test
# docker build -t your-registry/stress-test:latest .
# docker push your-registry/stress-test:latest
# ./build.sh # 自动用当前时间戳打 tag
# ./build.sh 20260824-153045 # 或手动指定
# 脚本会同时:构建镜像(时间戳 tag) + 导出 tar + 同步 auto-check.yaml 配置
#
# 手动构建(如绕过脚本):
# cd docker/stress-test
# docker build -t stress-test:<时间戳> .
# docker save -o stress-test.tar stress-test:<时间戳>
# # 同步修改 ../../auto-check.yaml 的 docker_image
#
# 使用方式(在 auto-check.yaml 中配置):
# stress:
# use_docker: true
# docker_image: "your-registry/stress-test:latest"
# docker_image: "stress-test:<时间戳>"
# docker_tar: "docker/stress-test/stress-test.tar"
FROM debian:12-slim
# UTF-8 locale保证 sensors 输出带 ° 符号的温度格式(脚本正则依赖)
ENV LANG=C.UTF-8 LC_ALL=C.UTF-8
# 清理缓存,减少镜像体积
RUN apt-get update && apt-get install -y --no-install-recommends \
stress-ng \

View File

@@ -29,20 +29,52 @@
固定分发模式:不依赖 registry镜像以 tar 文件形式放在工程目录,
目标机无镜像时由 auto-check 自动上传并 `docker load`
### 推荐:使用构建脚本(自动时间戳 tag
`build.sh` 会以 `YYYYMMDD-HHMMSS` 格式自动生成时间戳 tag`stress-test:20260824-153045`
便于在 `docker images` 中一眼区分新旧版本。脚本会同时:
1. 用时间戳 tag 构建镜像(**不再保留 `latest`**
2. 导出两份 tar带时间戳的归档 + 同步覆盖 `stress-test.tar`auto-check 默认引用)
3. 自动更新 `auto-check.yaml``docker_image` 字段,确保配置与新 tag 同步
```bash
cd docker/stress-test
docker build -t stress-test:latest .
# 导出到工程目录(供 auto-check 上传分发,已加入 .gitignore
docker save -o stress-test.tar stress-test:latest
./build.sh # 自动取当前时间戳
./build.sh 20260824-153045 # 手动指定时间戳(重打/复现
```
产物:
| 文件 | 用途 |
|------|------|
| 镜像 `stress-test:<时间戳>` | 唯一 tag`docker images` 可看到每次构建 |
| Tar `stress-test-<时间戳>.tar` | 带时间戳归档,保留历史版本 |
| Tar `stress-test.tar` | auto-check 默认引用,脚本自动覆盖为最新 |
| `auto-check.yaml` | `docker_image` 自动同步为新 tag |
> 旧时间戳镜像可手动 `docker rmi stress-test:<旧时间戳>` 清理。
### 手动构建(不推荐)
如需绕过脚本手动构建,必须自行同步 `auto-check.yaml`
```bash
cd docker/stress-test
docker build -t stress-test:20260824-153045 . # 必须带时间戳
docker save -o stress-test.tar stress-test:20260824-153045
# 然后编辑 ../../auto-check.yaml把 docker_image 改成新 tag
```
> 注意:手动构建如忘记带时间戳,重复构建后会丢失版本信息,调试时易混淆。
## 使用
`auto-check.yaml` 中配置:
`auto-check.yaml` 中配置`docker_image``build.sh` 自动维护)
```yaml
stress:
docker_image: "stress-test:latest"
docker_image: "stress-test:20260824-153045" # 每次构建自动更新为新时间戳
docker_tar: "docker/stress-test/stress-test.tar"
docker_args: "--network=host --privileged"
```
@@ -68,7 +100,16 @@ stress:
2. 温度监控后台采样(`temp_start.sh`
3. 各项压测先单项cpu/memory/disk/memnative、综合full最后
4. 温度监控收尾(`===MONITOR:temp===`
5. 内核日志(`===MONITOR:dmesg===`+ 结束标记
5. 内核日志(`===MONITOR:dmesg===``-T` 带时间戳+ 结束标记
## 容器运行时挂载(由 auto-check 自动添加)
| 挂载 | 作用 |
|------|------|
| `-v /sys:/sys:ro` | 容器内是独立 sysfs挂载后才能读到宿主机硬件传感器温度采集依赖此项 |
| `-v /etc/localtime:/etc/localtime:ro` | 容器时区与宿主机一致dmesg 时间戳与采样时间才准确 |
> 注意:镜像内已设置 `LC_ALL=C.UTF-8`。若 locale 为纯 C`sensors` 会输出 "+51.0 C"(无 ° 符号),导致温度正则失配、采集不到数据。
## 镜像内容

View File

@@ -0,0 +1,78 @@
#!/usr/bin/env bash
# build.sh - 构建压测镜像并以时间戳打 tag
#
# 目的:每次构建都生成唯一 tag如 stress-test:20260824-153045
# 便于在 docker images 中区分新旧版本,避免 latest 重复构建后无法追溯。
#
# 用法:
# ./build.sh # 自动使用当前时间戳 (YYYYMMDD-HHMMSS)
# ./build.sh 20260824-153045 # 手动指定时间戳(用于复现/重打)
#
# 产物:
# - 镜像: stress-test:<timestamp> (仅时间戳 tag不再保留 latest
# - Tar : stress-test-<timestamp>.tar (带时间戳归档)
# + stress-test.tar auto-check 默认引用,同步覆盖)
# - auto-check.yaml 的 docker_image 字段会被自动同步为新时间戳 tag
#
# 注意:
# - 脚本会自动 cd 到自身所在目录,可从任意位置调用
# - 需要本地有 Docker 可用
# - 每次构建会覆盖上一份 stress-test.tar时间戳 tar 保留可作历史归档
# - 旧时间戳镜像可执行 docker rmi stress-test:<old-ts> 清理
set -euo pipefail
# 切到脚本所在目录Dockerfile 在这里)
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
cd "$SCRIPT_DIR"
# 时间戳:支持外部传入,否则取当前时间
TS="${1:-$(date +%Y%m%d-%H%M%S)}"
IMAGE_NAME="stress-test"
TAG_TS="${IMAGE_NAME}:${TS}"
TAR_TS="${IMAGE_NAME}-${TS}.tar"
TAR_LATEST="${IMAGE_NAME}.tar"
# auto-check.yaml 路径(相对本脚本 ../..
YAML_FILE="$SCRIPT_DIR/../../auto-check.yaml"
echo "==> 时间戳: ${TS}"
echo "==> 构建镜像: ${TAG_TS}"
docker build -t "${TAG_TS}" .
echo "==> 导出 Tar: ${TAR_TS}"
docker save -o "${TAR_TS}" "${TAG_TS}"
echo "==> 同步 Latest Tar: ${TAR_LATEST}"
cp -f "${TAR_TS}" "${TAR_LATEST}"
# 同步 auto-check.yaml 中的 docker_image 为新时间戳 tag
if [ -f "$YAML_FILE" ]; then
if grep -q '^[[:space:]]*docker_image:' "$YAML_FILE"; then
if ! grep -q "${TAG_TS}" "$YAML_FILE"; then
# -i.bak 同时生成备份(兼容 GNU sed / BSD sed改完再删
sed -i.bak -E "s|(docker_image:[[:space:]]*\")[^\"]+(\")|\1${TAG_TS}\2|" "$YAML_FILE"
rm -f "${YAML_FILE}.bak"
echo "==> 已更新 ${YAML_FILE##*/}: docker_image -> ${TAG_TS}"
else
echo "==> ${YAML_FILE##*/} 中 docker_image 已是 ${TAG_TS},跳过"
fi
else
echo "==> 未在 ${YAML_FILE##*/} 中找到 docker_image 字段,请手动更新"
fi
else
echo "==> 未找到 ${YAML_FILE},请手动确保 docker_image 与新 tag 一致"
fi
echo ""
echo "=========================================="
echo " 构建完成"
echo "=========================================="
echo " 镜像 Tag: ${TAG_TS}"
echo " Tar 文件: ${TAR_TS}"
echo " ${TAR_LATEST} (auto-check 默认引用)"
echo ""
echo "==> 本机 ${IMAGE_NAME} 镜像列表:"
docker images "${IMAGE_NAME}" --format "table {{.Repository}}\t{{.Tag}}\t{{.CreatedAt}}\t{{.Size}}"

View File

@@ -1,5 +1,10 @@
echo '===MONITOR:dmesg==='
DMESG_ERR=$(dmesg --level=err,crit,alert,emerg 2>/dev/null | tail -30 || true)
# -T 输出人类可读时间戳(如 [Mon Aug 24 10:23:45 2026]
# 依赖挂载宿主机 /etc/localtime 保证时区正确;老内核不支持 -T 时回退
DMESG_ERR=$(dmesg -T --level=err,crit,alert,emerg 2>/dev/null | tail -30)
if [ -z "$DMESG_ERR" ]; then
DMESG_ERR=$(dmesg --level=err,crit,alert,emerg 2>/dev/null | tail -30 || true)
fi
if [ -n "$DMESG_ERR" ]; then
echo 'status:fail'
echo "output:${DMESG_ERR}"

View File

@@ -4,6 +4,11 @@
# 系统信息 → 温度监控启动 → 各项压测(先单项、后综合)→ 温度监控收尾 → 内核日志
set -e
# 统一 UTF-8 locale否则 sensors 输出 "+51.0 C"(无 ° 符号),
# 脚本中 (?=°C) 的温度正则会全部失配,导致温度采集不到
export LC_ALL=C.UTF-8
export LANG=C.UTF-8
# 默认值docker -e 传入时覆盖)
export AUTOCHECK_TYPES="${AUTOCHECK_TYPES:-cpu,memory}"
export AUTOCHECK_DURATION="${AUTOCHECK_DURATION:-30}"