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, 告警通知, 搜索引擎查询, 测试用例, 自动化攻击, 请求拦截, 运维监控