#!/bin/bash set -e echo "🚀 轻量级监控系统配置" echo "========================" # 颜色定义 RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' NC='\033[0m' # 检查 Sentry 配置 check_sentry() { echo -e "${YELLOW}📋 检查 Sentry 配置...${NC}" if [ -z "$NEXT_PUBLIC_SENTRY_DSN" ]; then echo -e "${RED}❌ Sentry DSN 未配置${NC}" echo "请在 .env.production 中设置 NEXT_PUBLIC_SENTRY_DSN" return 1 fi echo -e "${GREEN}✅ Sentry 已配置${NC}" } # 配置 Google Analytics setup_google_analytics() { echo -e "${YELLOW}📋 配置 Google Analytics...${NC}" echo "请输入 Google Analytics 测量 ID:" read -p "GA Measurement ID (格式: G-XXXXXXXXXX): " ga_id if [ -z "$ga_id" ]; then echo -e "${YELLOW}⚠️ 跳过 Google Analytics 配置${NC}" return 0 fi # 更新环境变量 if [ -f ".env.production" ]; then if grep -q "NEXT_PUBLIC_GA_MEASUREMENT_ID" .env.production; then sed -i.bak "s/NEXT_PUBLIC_GA_MEASUREMENT_ID=.*/NEXT_PUBLIC_GA_MEASUREMENT_ID=$ga_id/" .env.production else echo "NEXT_PUBLIC_GA_MEASUREMENT_ID=$ga_id" >> .env.production fi echo -e "${GREEN}✅ Google Analytics 已配置${NC}" else echo -e "${RED}❌ 找不到 .env.production 文件${NC}" return 1 fi } # 配置 UptimeRobot setup_uptime_robot() { echo -e "${YELLOW}📋 配置 UptimeRobot...${NC}" echo "" echo "请按照以下步骤配置 UptimeRobot:" echo "" echo "1. 访问 https://uptimerobot.com/" echo "2. 注册免费账号" echo "3. 创建新的 Monitor:" echo " - Monitor Type: HTTP(s)" echo " - URL: https://www.novalon.cn" echo " - Monitoring Interval: 5 minutes" echo "4. 添加 Alert Contacts:" echo " - Email: ops@novalon.cn" echo "" read -p "配置完成后按 Enter 继续..." } # 创建健康检查端点 create_health_check() { echo -e "${YELLOW}📋 创建健康检查端点...${NC}" # 检查是否已存在 if [ -d "src/app/api/health" ]; then echo -e "${GREEN}✅ 健康检查端点已存在${NC}" return 0 fi mkdir -p src/app/api/health cat > src/app/api/health/route.ts << 'EOF' import { NextResponse } from 'next/server'; export async function GET() { try { // 检查数据库连接 const dbConnected = await checkDatabaseConnection(); // 获取系统信息 const uptime = process.uptime(); return NextResponse.json({ status: 'healthy', timestamp: new Date().toISOString(), version: process.env.npm_package_version || '1.0.0', checks: { database: dbConnected ? 'connected' : 'disconnected', uptime: Math.floor(uptime) } }); } catch (error) { return NextResponse.json({ status: 'unhealthy', timestamp: new Date().toISOString(), error: 'Health check failed' }, { status: 500 }); } } async function checkDatabaseConnection(): Promise { try { // 这里添加实际的数据库连接检查逻辑 return true; } catch { return false; } } EOF echo -e "${GREEN}✅ 健康检查端点已创建${NC}" } # 配置 Sentry 告警 setup_sentry_alerts() { echo -e "${YELLOW}📋 配置 Sentry 告警...${NC}" echo "" echo "请按照以下步骤配置 Sentry 告警:" echo "" echo "1. 登录 Sentry Dashboard" echo "2. 进入 Settings → Alerts" echo "3. 创建新的 Alert Rule:" echo " - Issue: Critical Errors" echo " - Environment: Production" echo " - Frequency: Immediately" echo " - Email: ops@novalon.cn" echo "" read -p "配置完成后按 Enter 继续..." } # 显示配置摘要 show_summary() { echo "" echo -e "${GREEN}========================================${NC}" echo -e "${GREEN}🎉 轻量级监控配置完成!${NC}" echo -e "${GREEN}========================================${NC}" echo "" echo "📊 监控组件:" echo "" echo -e " • Sentry: ${GREEN}✅${NC} 错误监控和性能追踪" echo -e " • UptimeRobot: ${YELLOW}⚠️ 需要手动配置${NC} 可用性监控" echo -e " • Google Analytics: ${YELLOW}⚠️ 需要手动配置${NC} 访问统计" echo -e " • Health Check: ${GREEN}✅${NC} 内部服务状态" echo -e " • Email Alerts: ${GREEN}✅${NC} ops@novalon.cn" echo "" echo "📋 下一步操作:" echo "" echo " 1. 配置 UptimeRobot: https://uptimerobot.com/" echo " 2. 配置 Google Analytics: https://analytics.google.com/" echo " 3. 配置 Sentry 告警: Sentry Dashboard → Settings → Alerts" echo "" echo "📚 详细文档: docs/LIGHTWEIGHT_MONITORING.md" echo "" } # 主函数 main() { echo "" # 检查 Sentry check_sentry # 配置 Google Analytics echo "" read -p "是否配置 Google Analytics? (y/n): " setup_ga if [[ $setup_ga =~ ^[Yy]$ ]]; then setup_google_analytics fi # 配置 UptimeRobot echo "" read -p "是否配置 UptimeRobot? (y/n): " setup_uptime if [[ $setup_uptime =~ ^[Yy]$ ]]; then setup_uptime_robot fi # 创建健康检查 create_health_check # 配置 Sentry 告警 setup_sentry_alerts # 显示摘要 show_summary } # 运行主函数 main