refactor: 优化argus-metric模块e2e测试;

refs #20
This commit is contained in:
sundapeng.sdp 2025-10-13 18:12:29 +08:00
parent c098f1d3ce
commit d279d8a6a8
14 changed files with 302 additions and 32 deletions

View File

@ -1,7 +1,7 @@
.env .env
data/ data/
images-cache/ images-cache/
private-test-node/
*.tar *.tar
*.log *.log
.DS_Store .DS_Store

View File

@ -1,3 +1,8 @@
networks:
default:
name: argus-debug-net
external: true
services: services:
ftp: ftp:
build: build:
@ -23,7 +28,8 @@ services:
- ${DATA_ROOT:-./data}/ftp:/private/argus/ftp - ${DATA_ROOT:-./data}/ftp:/private/argus/ftp
- ${DATA_ROOT:-./data}/etc:/private/argus/etc - ${DATA_ROOT:-./data}/etc:/private/argus/etc
networks: networks:
- argus-network default:
ipv4_address: 172.30.0.40
logging: logging:
driver: "json-file" driver: "json-file"
options: options:
@ -51,7 +57,8 @@ services:
- ${DATA_ROOT:-./data}/prometheus:/private/argus/metric/prometheus - ${DATA_ROOT:-./data}/prometheus:/private/argus/metric/prometheus
- ${DATA_ROOT:-./data}/etc:/private/argus/etc - ${DATA_ROOT:-./data}/etc:/private/argus/etc
networks: networks:
- argus-network default:
ipv4_address: 172.30.0.41
logging: logging:
driver: "json-file" driver: "json-file"
options: options:
@ -81,7 +88,8 @@ services:
- ${DATA_ROOT:-./data}/grafana:/private/argus/metric/grafana - ${DATA_ROOT:-./data}/grafana:/private/argus/metric/grafana
- ${DATA_ROOT:-./data}/etc:/private/argus/etc - ${DATA_ROOT:-./data}/etc:/private/argus/etc
networks: networks:
- argus-network default:
ipv4_address: 172.30.0.42
depends_on: depends_on:
- prometheus - prometheus
logging: logging:
@ -90,16 +98,27 @@ services:
max-size: "10m" max-size: "10m"
max-file: "3" max-file: "3"
networks: test-node:
argus-network: image: ubuntu:22.04
driver: bridge container_name: argus-metric-test-node
name: argus-network hostname: test-metric-node-001
restart: unless-stopped
depends_on:
- ftp
- prometheus
environment:
- FTP_SERVER=${FTP_SERVER:-172.30.0.40}
- FTP_USER=${FTP_USER:-ftpuser}
- FTP_PASSWORD=${FTP_PASSWORD:-ZGClab1234!}
- FTP_PORT=${FTP_PORT:-21}
volumes: volumes:
ftp_data: - ${DATA_ROOT:-./data}/agent:/private/argus/agent
driver: local command: sleep infinity
prometheus_data: networks:
driver: local default:
grafana_data: ipv4_address: 172.30.0.50
driver: local logging:
driver: "json-file"
options:
max-size: "10m"
max-file: "3"

View File

@ -0,0 +1,18 @@
#!/bin/bash
set -e
SCRIPT_DIR="$(dirname "$0")"
echo "=========================================="
echo "Argus Metric E2E Test"
echo "=========================================="
bash "$SCRIPT_DIR/01_start_services.sh"
bash "$SCRIPT_DIR/02_publish_artifact.sh"
bash "$SCRIPT_DIR/03_test_node_install.sh"
bash "$SCRIPT_DIR/04_verify_install.sh"
echo "=========================================="
echo "E2E 测试完成"
echo "=========================================="

View File

@ -0,0 +1,19 @@
#!/bin/bash
set -e
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
echo "[01] 启动所有服务..."
bash "$SCRIPT_DIR/common/start-all.sh"
echo "[01] 等待服务就绪..."
sleep 5
echo "[01] 检查服务状态..."
docker ps | grep argus-ftp
docker ps | grep argus-prometheus
docker ps | grep argus-grafana
docker ps | grep argus-metric-test-node
echo "[01] 所有服务已启动"

View File

@ -0,0 +1,60 @@
#!/bin/bash
set -e
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
TEST_DIR="$(cd "$SCRIPT_DIR/.." && pwd)"
PLUGIN_DIR="$(cd "$SCRIPT_DIR/../../client-plugins/all-in-one-full" && pwd)"
# 加载 .env
if [ -f "$TEST_DIR/.env" ]; then
source "$TEST_DIR/.env"
fi
# 检测容器挂载目录
if docker ps --format '{{.Names}}' | grep -q '^argus-ftp$'; then
FTP_MOUNT=$(docker inspect argus-ftp --format '{{range .Mounts}}{{if eq .Destination "/private/argus/ftp"}}{{.Source}}{{end}}{{end}}')
OUTPUT_DIR="${FTP_MOUNT}/share"
echo "[02] 容器挂载: $OUTPUT_DIR"
else
OUTPUT_DIR="${DATA_ROOT:-$TEST_DIR/data}/ftp/share"
echo "[02] 默认路径: $OUTPUT_DIR"
fi
OWNER="${FTP_UID:-2133}:${FTP_GID:-2015}"
cd "$PLUGIN_DIR"
echo "[02] 递增版本号..."
bash scripts/version-manager.sh bump minor
VERSION_FILE="config/VERSION"
if [ ! -f "$VERSION_FILE" ]; then
echo "[02] 错误: 未找到 $VERSION_FILE"
exit 1
fi
VERSION=$(cat "$VERSION_FILE" | tr -d '[:space:]')
echo "[02] 新版本: $VERSION"
echo "[02] 构建安装包..."
bash scripts/package_artifact.sh --force
echo "[02] 发布到 FTP: $OUTPUT_DIR"
sudo bash scripts/publish_artifact.sh "$VERSION" --output-dir "$OUTPUT_DIR" --owner "$OWNER"
echo "[02] 设置文件权限..."
# 设置所有者
sudo chown -R "$OWNER" "$OUTPUT_DIR"
# 设置目录权限为 755 (rwxr-xr-x)
sudo find "$OUTPUT_DIR" -type d -exec chmod 755 {} \;
# 设置文件权限为 644 (rw-r--r--)
sudo find "$OUTPUT_DIR" -type f -exec chmod 644 {} \;
# 特别处理 .sh 文件,给予执行权限 755
sudo find "$OUTPUT_DIR" -type f -name "*.sh" -exec chmod 755 {} \;
echo "[02] 权限设置完成 (UID:GID=$OWNER, dirs=755, files=644, scripts=755)"
echo "[02] 发布完成,验证文件..."
ls -lh "$OUTPUT_DIR"
echo "[02] 完成"

View File

@ -0,0 +1,30 @@
#!/bin/bash
set -e
FTP_SERVER="${FTP_SERVER:-172.30.0.40}"
FTP_USER="${FTP_USER:-ftpuser}"
FTP_PASSWORD="${FTP_PASSWORD:-ZGClab1234!}"
FTP_PORT="${FTP_PORT:-21}"
echo "[03] 进入测试节点执行安装..."
docker exec argus-metric-test-node bash -c "
set -e
if ! command -v curl &>/dev/null; then
echo '[03] curl 未安装,正在安装...'
apt-get update && apt-get install -y curl
fi
cd /tmp
echo '[03] 下载 setup.sh...'
curl -u ${FTP_USER}:${FTP_PASSWORD} ftp://${FTP_SERVER}:${FTP_PORT}/setup.sh -o setup.sh
echo '[03] 执行安装...'
chmod +x setup.sh
bash setup.sh --server ${FTP_SERVER} --user ${FTP_USER} --password '${FTP_PASSWORD}' --port ${FTP_PORT}
echo '[03] 安装完成'
"
echo "[03] 完成"

View File

@ -0,0 +1,96 @@
#!/bin/bash
set -e
echo "[04] 验证安装结果 - 检查监控端口..."
echo "=========================================="
# 检查容器是否运行
if ! docker ps --format '{{.Names}}' | grep -q '^argus-metric-test-node$'; then
echo "错误: 容器 argus-metric-test-node 未运行"
exit 1
fi
ERRORS=0
# ==================== 检查监听端口 ====================
echo ""
echo "[1] 检查监听端口..."
echo "----------------------------------------"
CHECK_RESULT=$(docker exec argus-metric-test-node bash -c '
if command -v netstat >/dev/null 2>&1; then
echo "使用 netstat 检查端口:"
if netstat -tlnp 2>/dev/null | grep -E ":(9100|9400|2020)"; then
echo "✓ 找到监控端口"
exit 0
else
echo "✗ 未找到监控端口 (9100/9400/2020)"
exit 1
fi
elif command -v ss >/dev/null 2>&1; then
echo "使用 ss 检查端口:"
if ss -tlnp 2>/dev/null | grep -E ":(9100|9400|2020)"; then
echo "✓ 找到监控端口"
exit 0
else
echo "✗ 未找到监控端口 (9100/9400/2020)"
exit 1
fi
elif command -v lsof >/dev/null 2>&1; then
echo "使用 lsof 检查端口:"
if lsof -i :9100 -i :9400 -i :2020 2>/dev/null | grep LISTEN; then
echo "✓ 找到监控端口"
exit 0
else
echo "✗ 未找到监控端口 (9100/9400/2020)"
exit 1
fi
else
echo "? 没有可用的端口检查工具 (netstat/ss/lsof),跳过此检查"
exit 0
fi
')
echo "$CHECK_RESULT"
# 只有在明确失败时才计入错误exit 1没有工具exit 0不算错误
if echo "$CHECK_RESULT" | grep -q "✗ 未找到监控端口"; then
ERRORS=$((ERRORS + 1))
fi
# ==================== 测试端口连通性 ====================
echo ""
echo "[2] 测试端口连通性..."
echo "----------------------------------------"
docker exec argus-metric-test-node bash -c '
if command -v curl >/dev/null 2>&1; then
FAILED=0
for port in 9100 9400 2020; do
echo -n "端口 $port: "
if curl -s --connect-timeout 2 "http://localhost:$port/metrics" > /dev/null 2>&1; then
echo "✓ 可访问 (/metrics)"
elif curl -s --connect-timeout 2 "http://localhost:$port/" > /dev/null 2>&1; then
echo "✓ 可访问 (根路径)"
else
echo "✗ 不可访问"
FAILED=$((FAILED + 1))
fi
done
exit $FAILED
else
echo "? curl 不可用,跳过连通性测试"
exit 0
fi
' || ERRORS=$((ERRORS + 1))
echo ""
echo "=========================================="
if [ $ERRORS -eq 0 ]; then
echo "✓ [04] 验证完成 - 所有端口检查通过"
else
echo "✗ [04] 验证失败 - 发现 $ERRORS 个问题"
echo ""
echo "调试建议:"
echo " 1. 进入容器检查: docker exec -it argus-metric-test-node bash"
echo " 2. 查看进程: docker exec argus-metric-test-node ps aux"
echo " 3. 查看日志: docker exec argus-metric-test-node cat /tmp/argus_install.log"
exit 1
fi
echo "=========================================="

View File

@ -0,0 +1,11 @@
#!/bin/bash
set -e
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
echo "[05] 清理环境..."
bash "$SCRIPT_DIR/common/stop-all.sh" || true
echo "[05] 清理完成"

View File

@ -6,7 +6,8 @@
set -e set -e
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
cd "$SCRIPT_DIR" TEST_DIR="$(cd "$SCRIPT_DIR/../.." && pwd)"
cd "$TEST_DIR"
echo "==========================================" echo "=========================================="
echo " 路径检查脚本" echo " 路径检查脚本"
@ -18,15 +19,15 @@ echo ""
# 检查配置文件 # 检查配置文件
echo "检查配置文件..." echo "检查配置文件..."
if [ -f "$SCRIPT_DIR/docker-compose.yml" ]; then if [ -f "$TEST_DIR/docker-compose.yml" ]; then
echo " ✓ docker-compose.yml 存在" echo " ✓ docker-compose.yml 存在"
else else
echo " ✗ docker-compose.yml 不存在" echo " ✗ docker-compose.yml 不存在"
fi fi
if [ -f "$SCRIPT_DIR/.env" ]; then if [ -f "$TEST_DIR/.env" ]; then
echo " ✓ .env 存在" echo " ✓ .env 存在"
elif [ -f "$SCRIPT_DIR/env.example" ]; then elif [ -f "$TEST_DIR/env.example" ]; then
echo " ⚠ .env 不存在,但 env.example 存在" echo " ⚠ .env 不存在,但 env.example 存在"
else else
echo " ✗ .env 和 env.example 都不存在" echo " ✗ .env 和 env.example 都不存在"

View File

@ -6,7 +6,8 @@
set -e set -e
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
cd "$SCRIPT_DIR" TEST_DIR="$(cd "$SCRIPT_DIR/../.." && pwd)"
cd "$TEST_DIR"
# 加载 .env 文件(如果存在) # 加载 .env 文件(如果存在)
if [ -f .env ]; then if [ -f .env ]; then
@ -21,7 +22,7 @@ PROMETHEUS_UID=${PROMETHEUS_UID:-2133}
PROMETHEUS_GID=${PROMETHEUS_GID:-2015} PROMETHEUS_GID=${PROMETHEUS_GID:-2015}
GRAFANA_UID=${GRAFANA_UID:-2133} GRAFANA_UID=${GRAFANA_UID:-2133}
GRAFANA_GID=${GRAFANA_GID:-2015} GRAFANA_GID=${GRAFANA_GID:-2015}
DATA_ROOT=${DATA_ROOT:-./data} DATA_ROOT=${DATA_ROOT:-$TEST_DIR/data}
echo "开始初始化目录结构..." echo "开始初始化目录结构..."
echo "数据目录: ${DATA_ROOT}" echo "数据目录: ${DATA_ROOT}"

View File

@ -6,7 +6,8 @@
set -e set -e
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
cd "$SCRIPT_DIR" TEST_DIR="$(cd "$SCRIPT_DIR/../.." && pwd)"
cd "$TEST_DIR"
# 检测 docker-compose 命令 # 检测 docker-compose 命令
if command -v docker-compose &> /dev/null; then if command -v docker-compose &> /dev/null; then
@ -19,7 +20,7 @@ else
fi fi
# 镜像缓存目录 # 镜像缓存目录
IMAGE_CACHE_DIR="./images-cache" IMAGE_CACHE_DIR="$TEST_DIR/images-cache"
mkdir -p "$IMAGE_CACHE_DIR" mkdir -p "$IMAGE_CACHE_DIR"
# 定义镜像列表 # 定义镜像列表

View File

@ -6,13 +6,14 @@
set -e set -e
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
cd "$SCRIPT_DIR" TEST_DIR="$(cd "$SCRIPT_DIR/../.." && pwd)"
cd "$TEST_DIR"
echo "==========================================" echo "=========================================="
echo " Argus Metrics 一键启动脚本" echo " Argus Metrics 一键启动脚本"
echo "==========================================" echo "=========================================="
echo "" echo ""
echo "当前工作目录: $SCRIPT_DIR" echo "当前工作目录: $TEST_DIR"
echo "" echo ""
# 检查 Docker 和 Docker Compose # 检查 Docker 和 Docker Compose
@ -22,7 +23,7 @@ if ! command -v docker &> /dev/null; then
fi fi
# 检测 docker-compose 命令(兼容新旧版本) # 检测 docker-compose 命令(兼容新旧版本)
COMPOSE_FILE="$SCRIPT_DIR/docker-compose.yml" COMPOSE_FILE="$TEST_DIR/docker-compose.yml"
if command -v docker-compose &> /dev/null; then if command -v docker-compose &> /dev/null; then
DOCKER_COMPOSE="docker-compose -f $COMPOSE_FILE" DOCKER_COMPOSE="docker-compose -f $COMPOSE_FILE"
echo "使用: docker-compose" echo "使用: docker-compose"
@ -65,6 +66,18 @@ fi
# 加载环境变量 # 加载环境变量
source .env source .env
# 检查并创建 Docker 网络
echo "检查 Docker 网络..."
NETWORK_NAME="argus-debug-net"
if docker network inspect "$NETWORK_NAME" >/dev/null 2>&1; then
echo "网络 $NETWORK_NAME 已存在"
else
echo "创建网络 $NETWORK_NAME..."
docker network create --driver bridge --subnet 172.30.0.0/16 "$NETWORK_NAME"
echo "网络创建成功"
fi
echo ""
echo "1. 初始化目录结构..." echo "1. 初始化目录结构..."
bash "$SCRIPT_DIR/init-directories.sh" bash "$SCRIPT_DIR/init-directories.sh"
@ -72,7 +85,7 @@ echo ""
echo "2. 准备 Docker 镜像..." echo "2. 准备 Docker 镜像..."
# 检查镜像是否存在 # 检查镜像是否存在
IMAGE_CACHE_DIR="./images-cache" IMAGE_CACHE_DIR="$TEST_DIR/images-cache"
IMAGES=("argus-metric-ftp:latest" "argus-metric-prometheus:latest" "argus-metric-grafana:latest") IMAGES=("argus-metric-ftp:latest" "argus-metric-prometheus:latest" "argus-metric-grafana:latest")
all_images_exist=true all_images_exist=true
@ -128,7 +141,7 @@ else
echo "" echo ""
echo "部分镜像缺失,开始构建..." echo "部分镜像缺失,开始构建..."
echo "工作目录: $(pwd)" echo "工作目录: $(pwd)"
cd "$SCRIPT_DIR" cd "$TEST_DIR"
$DOCKER_COMPOSE build $DOCKER_COMPOSE build
# 询问是否保存镜像 # 询问是否保存镜像

View File

@ -5,10 +5,11 @@
set -e set -e
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
cd "$SCRIPT_DIR" TEST_DIR="$(cd "$SCRIPT_DIR/../.." && pwd)"
cd "$TEST_DIR"
# 检测 docker-compose 命令(兼容新旧版本) # 检测 docker-compose 命令(兼容新旧版本)
COMPOSE_FILE="$SCRIPT_DIR/docker-compose.yml" COMPOSE_FILE="$TEST_DIR/docker-compose.yml"
if command -v docker-compose &> /dev/null; then if command -v docker-compose &> /dev/null; then
DOCKER_COMPOSE="docker-compose -f $COMPOSE_FILE" DOCKER_COMPOSE="docker-compose -f $COMPOSE_FILE"
elif docker compose version &> /dev/null 2>&1; then elif docker compose version &> /dev/null 2>&1; then