- [x] 完成log模块镜像构建、本地端到端写日志——收集——查询流程; - [x] 完成bind模块构建; - [x] 内置域名IP自动更新脚本,使用 /private/argus/etc目录下文件进行同步,容器启动时自动写IP,定时任务刷新更新DNS服务器IP和DNS规则; Co-authored-by: root <root@curious.host.com> Reviewed-on: #8 Reviewed-by: sundapeng <sundp@mail.zgclab.edu.cn>
208 lines
6.1 KiB
Bash
Executable File
208 lines
6.1 KiB
Bash
Executable File
#!/usr/bin/env bash
|
||
set -euo pipefail
|
||
|
||
echo "======================================="
|
||
echo "ARGUS DNS监控功能测试"
|
||
echo "======================================="
|
||
echo ""
|
||
|
||
# 记录测试开始时间
|
||
test_start_time=$(date +%s)
|
||
|
||
# 函数:显示测试步骤
|
||
show_step() {
|
||
echo ""
|
||
echo "🔄 Step $1: $2"
|
||
echo "----------------------------------------"
|
||
}
|
||
|
||
# 函数:验证步骤结果
|
||
verify_step() {
|
||
if [ $? -eq 0 ]; then
|
||
echo "✅ $1 - SUCCESS"
|
||
else
|
||
echo "❌ $1 - FAILED"
|
||
exit 1
|
||
fi
|
||
}
|
||
|
||
# 函数:等待服务就绪
|
||
wait_for_services() {
|
||
echo "[INFO] Waiting for services to be ready..."
|
||
local max_attempts=60
|
||
local attempt=1
|
||
|
||
while [ $attempt -le $max_attempts ]; do
|
||
if curl -fs http://localhost:9200/_cluster/health >/dev/null 2>&1 && \
|
||
curl -fs http://localhost:5601/api/status >/dev/null 2>&1; then
|
||
echo "[OK] Services are ready!"
|
||
return 0
|
||
fi
|
||
echo " Waiting for services... ($attempt/$max_attempts)"
|
||
sleep 5
|
||
((attempt++))
|
||
done
|
||
|
||
echo "[ERROR] Services not ready after $max_attempts attempts"
|
||
return 1
|
||
}
|
||
|
||
# 函数:检查容器中的/etc/resolv.conf
|
||
check_resolv_conf() {
|
||
local service_name=$1
|
||
local expected_dns=$2
|
||
|
||
echo "[INFO] 检查 $service_name 容器的 /etc/resolv.conf..."
|
||
|
||
local resolv_content=$(docker exec "${service_name}" cat /etc/resolv.conf 2>/dev/null || echo "")
|
||
if echo "$resolv_content" | grep -q "nameserver $expected_dns"; then
|
||
echo "✅ $service_name resolv.conf contains nameserver $expected_dns"
|
||
return 0
|
||
else
|
||
echo "❌ $service_name resolv.conf does not contain nameserver $expected_dns"
|
||
echo "实际内容:"
|
||
echo "$resolv_content"
|
||
return 1
|
||
fi
|
||
}
|
||
|
||
# 函数:检查DNS监控日志
|
||
check_dns_monitor_logs() {
|
||
local service_name=$1
|
||
|
||
echo "[INFO] 检查 $service_name 的DNS监控日志..."
|
||
|
||
local dns_logs=$(docker exec "$service_name" tail -n 20 /var/log/supervisor/dns-monitor.log 2>/dev/null || echo "")
|
||
if [ -n "$dns_logs" ]; then
|
||
echo "✅ $service_name DNS监控日志存在"
|
||
echo "最近的日志:"
|
||
echo "$dns_logs"
|
||
return 0
|
||
else
|
||
echo "❌ $service_name DNS监控日志为空或不存在"
|
||
return 1
|
||
fi
|
||
}
|
||
|
||
# 函数:确保目录结构存在
|
||
ensure_directories() {
|
||
echo "[INFO] 确保目录结构存在..."
|
||
# 确保目录存在
|
||
mkdir -p ./private/argus/etc/
|
||
echo "✅ 目录结构准备完成(注:使用真实的update-dns.sh脚本)"
|
||
}
|
||
|
||
# 开始DNS监控测试
|
||
show_step "1" "Bootstrap - Initialize environment"
|
||
./scripts/01_bootstrap.sh
|
||
verify_step "Bootstrap"
|
||
|
||
# 确保目录结构
|
||
ensure_directories
|
||
|
||
show_step "2" "Startup - Start all services"
|
||
./scripts/02_up.sh
|
||
verify_step "Service startup"
|
||
|
||
# 等待服务完全就绪
|
||
wait_for_services || exit 1
|
||
|
||
show_step "3" "Create initial DNS configuration"
|
||
# 创建初始的DNS配置文件 - 只有一个IP
|
||
echo "[INFO] 创建初始的dns.conf文件 (8.8.8.8)..."
|
||
cat > ./private/argus/etc/dns.conf << 'EOF'
|
||
8.8.8.8
|
||
EOF
|
||
|
||
echo "✅ 初始dns.conf文件创建成功 (8.8.8.8)"
|
||
verify_step "Initial DNS configuration creation"
|
||
|
||
# 等待DNS监控检测到配置文件
|
||
echo "[INFO] 等待DNS监控检测并处理初始配置..."
|
||
sleep 15
|
||
|
||
show_step "4" "Verify initial DNS configuration processing"
|
||
# 检查两个容器的DNS监控日志
|
||
check_dns_monitor_logs "logging-mvp-es-1"
|
||
verify_step "Elasticsearch DNS monitor logs"
|
||
|
||
check_dns_monitor_logs "logging-mvp-kibana-1"
|
||
verify_step "Kibana DNS monitor logs"
|
||
|
||
# 检查resolv.conf是否包含新的DNS服务器
|
||
check_resolv_conf "logging-mvp-es-1" "8.8.8.8"
|
||
verify_step "Elasticsearch resolv.conf initial check"
|
||
|
||
check_resolv_conf "logging-mvp-kibana-1" "8.8.8.8"
|
||
verify_step "Kibana resolv.conf initial check"
|
||
|
||
show_step "5" "Modify DNS configuration and test auto-update"
|
||
# 修改DNS配置文件 - 改为另一个IP
|
||
echo "[INFO] 修改dns.conf文件,改为1.1.1.1..."
|
||
cat > ./private/argus/etc/dns.conf << 'EOF'
|
||
1.1.1.1
|
||
EOF
|
||
|
||
echo "✅ dns.conf文件更新成功,改为1.1.1.1"
|
||
|
||
# 等待DNS监控检测到配置变化
|
||
echo "[INFO] 等待DNS监控检测配置变化并执行更新..."
|
||
sleep 15
|
||
|
||
show_step "6" "Verify DNS configuration auto-update"
|
||
# 再次检查DNS监控日志,应该看到配置变化检测
|
||
echo "[INFO] 检查DNS监控是否检测到配置变化..."
|
||
|
||
# 检查elasticsearch容器
|
||
echo "[INFO] 检查elasticsearch容器的DNS监控日志(最近30行)..."
|
||
docker exec logging-mvp-es-1 tail -n 30 /var/log/supervisor/dns-monitor.log || true
|
||
|
||
# 检查kibana容器
|
||
echo "[INFO] 检查kibana容器的DNS监控日志(最近30行)..."
|
||
docker exec logging-mvp-kibana-1 tail -n 30 /var/log/supervisor/dns-monitor.log || true
|
||
|
||
# 验证新的DNS服务器是否被添加到resolv.conf
|
||
check_resolv_conf "logging-mvp-es-1" "1.1.1.1"
|
||
verify_step "Elasticsearch resolv.conf after update"
|
||
|
||
check_resolv_conf "logging-mvp-kibana-1" "1.1.1.1"
|
||
verify_step "Kibana resolv.conf after update"
|
||
|
||
show_step "7" "Final verification - Check DNS configuration"
|
||
# 最终验证DNS配置
|
||
echo "[INFO] 最终验证elasticsearch容器的resolv.conf..."
|
||
docker exec logging-mvp-es-1 cat /etc/resolv.conf
|
||
|
||
echo "[INFO] 最终验证kibana容器的resolv.conf..."
|
||
docker exec logging-mvp-kibana-1 cat /etc/resolv.conf
|
||
|
||
echo "[INFO] 最终dns.conf内容:"
|
||
cat ./private/argus/etc/dns.conf
|
||
|
||
verify_step "Final DNS configuration verification"
|
||
|
||
show_step "8" "Cleanup - Stop all services"
|
||
./scripts/05_down.sh
|
||
verify_step "Service cleanup"
|
||
|
||
# 清理测试文件
|
||
rm -f ./private/argus/etc/dns.conf
|
||
# 注:不删除update-dns.sh,因为这是真实的脚本
|
||
|
||
# 计算总测试时间
|
||
test_end_time=$(date +%s)
|
||
total_time=$((test_end_time - test_start_time))
|
||
|
||
echo ""
|
||
echo "======================================="
|
||
echo "🎉 DNS监控功能测试完成!"
|
||
echo "======================================="
|
||
echo "📊 测试总结:"
|
||
echo " • 总耗时: ${total_time}秒"
|
||
echo " • 初始DNS配置: 8.8.8.8"
|
||
echo " • 更新DNS配置: 1.1.1.1"
|
||
echo " • DNS监控脚本正常工作"
|
||
echo " • 容器resolv.conf自动覆盖更新成功"
|
||
echo ""
|
||
echo "✅ DNS自动更新功能测试通过!"
|
||
echo "" |