200 lines
5.4 KiB
Bash
200 lines
5.4 KiB
Bash
#!/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<boolean> {
|
||
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
|