Sujalkansara/api-monitoring

GitHub: Sujalkansara/api-monitoring

一个基于 NestJS 和 Next.js 的全栈 API 监控平台,通过定时健康检查、响应时间分析和自动告警帮助团队及时发现接口故障。

Stars: 1 | Forks: 0

# API Monitor MVP 一个为 MVP 演示构建的简单 API 监控和错误告警平台。 ## 功能 - **Dashboard** - 监控概览、正常/失败计数、响应时间图表 - **监控 CRUD** - 创建、编辑、删除、暂停/恢复 API 监控 - **监控引擎** - 后台 worker 每隔 X 分钟检查一次 API - **事件日志** - 存储每次检查的结果,包括响应时间和错误信息 - **基础告警** - 连续 3 次失败后发送邮件或 Telegram 告警 ## 技术栈 **后端:** - NestJS (Node.js) - PostgreSQL (Prisma ORM) - BullMQ + Redis (任务队列) - node-cron (调度) **前端:** - Next.js 15 (App Router) - TypeScript - Tailwind CSS - shadcn/ui 组件 - Recharts (图表) ## 快速开始 ### 1. 启动基础设施 ``` docker-compose up -d ``` ### 2. 设置后端 ``` cd backend cp .env.example .env npm install npx prisma migrate dev --name init npm run start:dev ``` ### 3. 设置前端 ``` cd frontend npm install npm run dev ``` ### 4. 打开应用 - 前端:http://localhost:3000 - 后端 API:http://localhost:4000/api ## 环境变量 根据 `.env.example` 模板创建 `.env` 文件。 **后端 `.env`:** ``` DATABASE_URL="postgresql://postgres:@localhost:5432/api_monitor" REDIS_HOST=localhost REDIS_PORT=6379 PORT=4000 ALERT_TYPE=email ALERT_EMAIL=admin@example.com SMTP_HOST=smtp.gmail.com SMTP_PORT=587 SMTP_USER=your-email@gmail.com SMTP_PASS=your-app-password ``` ## 项目结构 ``` api-monitor-mvp/ ├── docker-compose.yml # PostgreSQL + Redis ├── backend/ │ ├── src/ │ │ ├── monitors/ # Monitor CRUD API │ │ ├── monitor-logs/ # Logs API │ │ ├── alerts/ # Alerts API + BullMQ processor │ │ ├── workers/ # Cron scheduler + check processor │ │ ├── common/ # Prisma service │ │ ├── app.module.ts │ │ └── main.ts │ └── prisma/ │ └── schema.prisma # Database schema ├── frontend/ │ ├── src/app/ # Next.js pages │ │ ├── page.tsx # Dashboard │ │ ├── monitors/page.tsx # Monitor CRUD │ │ ├── logs/page.tsx # Logs viewer │ │ └── alerts/page.tsx # Alerts viewer │ ├── src/components/ │ │ ├── ui/ # shadcn/ui components │ │ ├── layout/ # Sidebar, theme │ │ └── charts/ # Recharts components │ └── src/lib/ │ ├── api.ts # API client │ └── utils.ts # Utilities ``` ## API Endpoint | 方法 | Endpoint | 描述 | |--------|----------|-------------| | GET | `/api/monitors` | 列出所有监控 | | POST | `/api/monitors` | 创建监控 | | GET | `/api/monitors/:id` | 获取监控详情 | | PATCH | `/api/monitors/:id` | 更新监控 | | DELETE | `/api/monitors/:id` | 删除监控 | | POST | `/api/monitors/:id/toggle` | 暂停/恢复 | | GET | `/api/monitors/stats` | Dashboard 统计数据 | | GET | `/api/logs` | 列出日志 | | GET | `/api/logs/failures` | 最近的失败记录 | | GET | `/api/alerts` | 列出告警 | | POST | `/api/alerts/:id/resolve` | 解决告警 | ## 工作原理 1. **调度器** (`MonitorWorker`) 通过 cron 每分钟运行一次 2. 检查哪些监控任务已到期(基于设定的时间间隔) 3. 将检查任务添加到 BullMQ 队列中 4. **处理器** (`CheckProcessor`) 执行 HTTP 请求 5. 将结果存储在 `monitor_logs` 表中 6. 在 `monitors` 表中跟踪连续失败次数 7. 连续失败 3 次后,创建告警并将通知加入队列 8. **告警处理器** 通过队列发送邮件/Telegram 通知
标签:API监控, NestJS, PostgreSQL, 告警通知, 搜索引擎查询, 测试用例, 自动化攻击, 请求拦截, 运维监控