diff --git a/src/metric/client-plugins/all-in-one-demo/scripts/sync_dns.sh b/src/metric/client-plugins/all-in-one-demo/scripts/sync_dns.sh index 9e05f24..b11ce37 100755 --- a/src/metric/client-plugins/all-in-one-demo/scripts/sync_dns.sh +++ b/src/metric/client-plugins/all-in-one-demo/scripts/sync_dns.sh @@ -126,41 +126,54 @@ compare_files() { fi } -# 将 DNS 配置追加到 /etc/resolv.conf +# 将 DNS 配置添加到 /etc/resolv.conf 开头 update_resolv_conf() { local dns_conf_file="$1" log_info "更新 /etc/resolv.conf 文件..." - - # 备份原始文件 - if [[ -f "$RESOLV_CONF" ]]; then - cp "$RESOLV_CONF" "${RESOLV_CONF}.backup.$(date +%Y%m%d_%H%M%S)" - log_info "已备份原始 resolv.conf 文件" - fi - - # 读取 DNS 配置文件并追加到 resolv.conf + + # 创建临时文件 + local temp_resolv="/tmp/resolv.conf.$$" + + # 将 dns.conf 内容转换为 nameserver 添加到临时文件开头 while IFS= read -r line; do - # 跳过空行和注释行 + # 跳过空行和注释 [[ -z "$line" || "$line" =~ ^[[:space:]]*# ]] && continue - - # 验证是否为有效的 IP 地址 - if [[ "$line" =~ ^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$ ]]; then - # 检查是否已存在相同的 nameserver 行 - if ! grep -q "nameserver $line" "$RESOLV_CONF" 2>/dev/null; then - echo "nameserver $line" >> "$RESOLV_CONF" - log_info "添加 DNS 服务器: $line" - else - log_info "DNS 服务器已存在,跳过: $line" - fi + # 验证 IP 格式 + if [[ "$line" =~ ^[0-9]{1,3}(\.[0-9]{1,3}){3}$ ]]; then + echo "nameserver $line" >> "$temp_resolv" + log_info "添加 DNS 到临时文件: $line" else - log_warning "跳过无效的 DNS 地址: $line" + log_warning "跳过无效 DNS: $line" fi done < "$dns_conf_file" - - # 设置文件权限 - chmod 644 "$RESOLV_CONF" - - log_success "/etc/resolv.conf 文件更新完成" + + # 将原 resolv.conf 内容追加到临时文件后面 + if [[ -f "$RESOLV_CONF" ]]; then + cat "$RESOLV_CONF" >> "$temp_resolv" + fi + + # 判断是否是 root + if [[ $(id -u) -eq 0 ]]; then + # root 直接写入 + tee "$RESOLV_CONF" < "$temp_resolv" >/dev/null + chmod 644 "$RESOLV_CONF" + else + # 非 root 尝试使用 sudo + if command -v sudo >/dev/null 2>&1; then + sudo tee "$RESOLV_CONF" < "$temp_resolv" >/dev/null + sudo chmod 644 "$RESOLV_CONF" + else + log_error "非 root 用户且系统未安装 sudo,无法更新 /etc/resolv.conf" + rm -f "$temp_resolv" + exit 1 + fi + fi + + # 清理临时文件 + rm -f "$temp_resolv" + + log_success "/etc/resolv.conf 已更新" } # 记录同步日志 diff --git a/src/metric/tests/client-test-node/build/Dockerfile b/src/metric/tests/client-test-node/build/Dockerfile new file mode 100644 index 0000000..e72dc1c --- /dev/null +++ b/src/metric/tests/client-test-node/build/Dockerfile @@ -0,0 +1,6 @@ +FROM ubuntu:22.04 +RUN apt-get update -qq && \ + DEBIAN_FRONTEND=noninteractive apt-get install -y -qq tzdata && \ + rm -rf /var/lib/apt/lists/* +ENV TZ=Asia/Shanghai + diff --git a/src/metric/tests/docker-compose.yml b/src/metric/tests/docker-compose.yml index 98e4140..8c9b724 100644 --- a/src/metric/tests/docker-compose.yml +++ b/src/metric/tests/docker-compose.yml @@ -15,6 +15,7 @@ services: container_name: argus-ftp restart: unless-stopped environment: + - TZ=Asia/Shanghai - FTP_BASE_PATH=/private/argus/ftp - FTP_PASSWORD=${FTP_PASSWORD:-ZGClab1234!} - DOMAIN=${FTP_DOMAIN:-prom.ftp.argus.com} @@ -27,6 +28,8 @@ services: volumes: - ${DATA_ROOT:-/private}/argus/metric/ftp:/private/argus/ftp - ${DATA_ROOT:-/private}/argus/etc:/private/argus/etc + - /etc/localtime:/etc/localtime:ro + - /etc/timezone:/etc/timezone:ro networks: default: ipv4_address: 172.30.0.40 @@ -48,6 +51,7 @@ services: container_name: argus-prometheus restart: unless-stopped environment: + - TZ=Asia/Shanghai - PROMETHEUS_BASE_PATH=/private/argus/metric/prometheus - PROMETHEUS_UID=${PROMETHEUS_UID:-2133} - PROMETHEUS_GID=${PROMETHEUS_GID:-2015} @@ -56,6 +60,8 @@ services: volumes: - ${DATA_ROOT:-/private}/argus/metric/prometheus:/private/argus/metric/prometheus - ${DATA_ROOT:-/private}/argus/etc:/private/argus/etc + - /etc/localtime:/etc/localtime:ro + - /etc/timezone:/etc/timezone:ro networks: default: ipv4_address: 172.30.0.41 @@ -76,6 +82,7 @@ services: container_name: argus-grafana restart: unless-stopped environment: + - TZ=Asia/Shanghai - GRAFANA_BASE_PATH=/private/argus/metric/grafana - GRAFANA_UID=${GRAFANA_UID:-2133} - GRAFANA_GID=${GRAFANA_GID:-2015} @@ -87,6 +94,8 @@ services: volumes: - ${DATA_ROOT:-/private}/argus/metric/grafana:/private/argus/metric/grafana - ${DATA_ROOT:-/private}/argus/etc:/private/argus/etc + - /etc/localtime:/etc/localtime:ro + - /etc/timezone:/etc/timezone:ro networks: default: ipv4_address: 172.30.0.42 @@ -99,20 +108,29 @@ services: max-file: "3" test-node: - image: ubuntu:22.04 + build: + context: ./client-test-node/build + dockerfile: Dockerfile + image: argus-metric-test-node:latest container_name: argus-metric-test-node hostname: test-metric-node-001 restart: unless-stopped + privileged: true depends_on: - ftp - prometheus environment: + - TZ=Asia/Shanghai + - DEBIAN_FRONTEND=noninteractive + - FTP_DOMAIN=${FTP_DOMAIN:-ftp.metric.argus.com} - FTP_SERVER=${FTP_SERVER:-172.30.0.40} - FTP_USER=${FTP_USER:-ftpuser} - FTP_PASSWORD=${FTP_PASSWORD:-ZGClab1234!} - FTP_PORT=${FTP_PORT:-21} volumes: - ${DATA_ROOT:-/private}/argus/agent:/private/argus/agent + - /etc/localtime:/etc/localtime:ro + - /etc/timezone:/etc/timezone:ro command: sleep infinity networks: default: @@ -122,3 +140,4 @@ services: options: max-size: "10m" max-file: "3" + diff --git a/src/metric/tests/scripts/03_test_node_install.sh b/src/metric/tests/scripts/03_test_node_install.sh index cfe5116..b0402f2 100755 --- a/src/metric/tests/scripts/03_test_node_install.sh +++ b/src/metric/tests/scripts/03_test_node_install.sh @@ -1,12 +1,17 @@ #!/bin/bash set -e +FTP_DOMAIN="${FTP_DOMAIN:-ftp.metric.argus.com}" FTP_SERVER="${FTP_SERVER:-172.30.0.40}" FTP_USER="${FTP_USER:-ftpuser}" FTP_PASSWORD="${FTP_PASSWORD:-ZGClab1234!}" FTP_PORT="${FTP_PORT:-21}" +# 优先使用域名,如果域名不可用则使用 IP +FTP_HOST="${FTP_DOMAIN:-$FTP_SERVER}" + echo "[03] 进入测试节点执行安装..." +echo "[03] 使用 FTP 地址: ${FTP_HOST}:${FTP_PORT}" docker exec argus-metric-test-node bash -c " set -e @@ -18,11 +23,11 @@ fi cd /tmp echo '[03] 下载 setup.sh...' -curl -u ${FTP_USER}:${FTP_PASSWORD} ftp://${FTP_SERVER}:${FTP_PORT}/setup.sh -o setup.sh +curl -u ${FTP_USER}:${FTP_PASSWORD} ftp://${FTP_HOST}:${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} +bash setup.sh --server ${FTP_HOST} --user ${FTP_USER} --password '${FTP_PASSWORD}' --port ${FTP_PORT} echo '[03] 安装完成' " diff --git a/src/metric/tests/scripts/common/start-all.sh b/src/metric/tests/scripts/common/start-all.sh index 003efc2..1b25bcb 100755 --- a/src/metric/tests/scripts/common/start-all.sh +++ b/src/metric/tests/scripts/common/start-all.sh @@ -43,6 +43,7 @@ BUILD_DIRS=( "../ftp/build" "../prometheus/build" "../grafana/build" + "client-test-node/build" ) for dir in "${BUILD_DIRS[@]}"; do @@ -86,7 +87,7 @@ echo "2. 准备 Docker 镜像..." # 检查镜像是否存在 IMAGE_CACHE_DIR="$TEST_DIR/images-cache" -IMAGES=("argus-metric-ftp:latest" "argus-metric-prometheus:latest" "argus-metric-grafana:latest" "ubuntu:22.04") +IMAGES=("argus-metric-ftp:latest" "argus-metric-prometheus:latest" "argus-metric-grafana:latest" "argus-metric-test-node:latest") all_images_exist=true for image in "${IMAGES[@]}"; do @@ -122,8 +123,8 @@ else "argus-metric-grafana:latest") cache_file="${IMAGE_CACHE_DIR}/argus-grafana.tar" ;; - "ubuntu:22.04") - cache_file="${IMAGE_CACHE_DIR}/test-node.tar" + "argus-metric-test-node:latest") + cache_file="${IMAGE_CACHE_DIR}/argus-test-node.tar" ;; esac @@ -170,8 +171,8 @@ else "argus-metric-grafana:latest") docker save -o "${IMAGE_CACHE_DIR}/argus-grafana.tar" "$image" && echo " 已保存: argus-grafana.tar" ;; - "ubuntu:22.04") - docker save -o "${IMAGE_CACHE_DIR}/test-node.tar" "$image" && echo " 已保存: test-node.tar" + "argus-metric-test-node:latest") + docker save -o "${IMAGE_CACHE_DIR}/argus-test-node.tar" "$image" && echo " 已保存: argus-test-node.tar" ;; esac done