Methexx/Oncallr
GitHub: Methexx/Oncallr
OnCallr 是一个面向单团队的实时事件响应与值班管理平台,支持 Webhook 告警接入、自动升级、事件时间线追踪和 AI 复盘报告生成。
Stars: 0 | Forks: 0
# OnCallr — 实时事件与值班管理平台
## 1. 项目简介
OnCallr 是一个面向工程团队的单团队事件响应与值班管理平台。它可以检测或接收事件,实时立即通知当前值班的工程师,在无人响应时自动升级,跟踪完整的事件时间线,并在事件解决后生成 AI 起草的复盘报告。
它是 PagerDuty 或 Opsgenie 等工具的精简版、作品集级版本——旨在展示实时系统、基于时间的调度逻辑和应用 AI,而不是为了在商业上与这些产品竞争。
## 2. 问题描述
工程团队需要在生产环境出现故障(例如服务中断、错误率激增、延迟增加)时立即知晓。如果没有结构化的流程:
- 告警可能会在 Slack 等聊天工具中被遗漏或淹没
- 不清楚在任何特定时间由谁负责响应
- 如果责任人无法处理,没有任何机制会自动升级
- 险情排除后,没人记录发生过什么,导致相同的事件反复发生
OnCallr 通过清晰的自动化升级 pipeline 以及在每个事件结束时的强制文档记录步骤(复盘报告)解决了这些问题。
## 3. 目标
### 主要目标
为单个工程团队提供实时的事件检测、通知和升级,并包含完整的事件历史记录和 AI 辅助复盘报告。
### 次要目标
- 可视化的值班调度(谁在什么时间值班)
- 基于 Webhook 的事件接入(以便外部工具可以触发事件)
- 带有评论和审计追踪的事件时间线
- 分析功能:MTTA(平均确认时间)和 MTTR(平均解决时间)
- 简洁、快速、可演示的 dashboard UX
### 非目标(在 v1 版本中明确不包含的内容)
- 多租户支持(一个平台上存在多个组织)
- 真实的外部监控集成(Datadog、Sentry 等)—— 改为通过 webhook endpoint 进行通用模拟
- 短信/电话告警(仅限推送/应用内通知 + 电子邮件)
- 移动应用
## 4. 目标用户
### 工程师
需求:
- 在需要值班时能立即知晓
- 在分配给他们事件时获得即时通知
- 一种简单的方式来确认、调查和解决事件
- 在接手他人的事件时获取上下文(时间线、评论)
### 团队负责人 / Admin
需求:
- 能够查看所有服务中所有事件的全貌
- 能够配置值班轮换和升级策略
- 团队响应速度的分析数据(MTTA/MTTR)
- 可审查、可编辑的 AI 生成的复盘报告,用于记录归档
## 5. 核心功能(摘要 —— 详情请参阅 features.md)
1. **服务** —— 被监控的逻辑单元(例如“支付 API”、“认证服务”)
2. **值班调度** —— 将工程师分配到基于时间的轮班中的轮换机制
3. **Webhook 接入** —— 外部系统向每个服务的唯一 URL 发送 POST 请求以创建事件
4. **实时通知** —— Socket.io 将事件告警即时推送到值班工程师的 dashboard
5. **升级引擎** —— 如果在配置的超时时间内未确认,将自动升级给链条中的下一个人
6. **事件时间线** —— 记录每次状态变更、升级和评论的完整审计追踪
7. **AI 复盘报告** —— 事件解决后,根据事件时间线起草结构化的复盘报告;由人工进行编辑和最终确认
8. **分析 Dashboard** —— MTTA、MTTR、按服务统计的事件量、最繁忙的值班时段
## 6. 角色
| 角色 | 权限 |
|---|---|
| **工程师** | 查看分配给自己的事件,确认/评论/解决事件,查看自己的轮班,查看自己的复盘报告 |
| **Admin** | 包含工程师的所有权限,另外:创建/编辑服务,配置升级策略,创建/编辑调度,查看所有事件,查看分析数据 |
这是一个单团队系统 —— 没有组织/租户边界。所有用户都属于同一个团队。
## 7. 技术架构
### 技术栈
| 层级 | 技术 | 原因 |
|---|---|---|
| 前端 | Next.js 14 + Tailwind + shadcn/ui | 构建快,dashboard UI 整洁,熟悉的技术栈 |
| 实时通信 | Socket.io | 成熟,文档齐全,与 Fastify 配合良好 |
| 后端 | Fastify (TypeScript) | 轻量级、速度快,在其他项目中已使用过 |
| 数据库 | PostgreSQL | 为事件/调度/用户提供关系完整性 |
| 任务队列 / 定时器 | Redis + BullMQ | 用于升级定时器的持久化延迟任务 —— 与 `setTimeout` 不同,它能在服务器重启后依然生效 |
| AI | OpenAI `gpt-4o-mini` | 根据结构化的事件数据起草复盘报告 |
| 认证 | JWT (HTTP-only cookie, web) | 与之前的项目采用相同的模式 |
| 邮件(可选后备方案) | Resend | 如果用户没有在查看 dashboard,则提供电子邮件通知 |
| 托管 | Vercel (前端) + Railway (后端, Postgres, Redis) | 低成本,简单的部署 pipeline |
### 高层架构
```
┌─────────────┐ webhook POST ┌──────────────────┐
│ External │ ─────────────────────────▶ │ Fastify API │
│ Monitor / │ │ (webhook intake) │
│ curl demo │ └─────────┬─────────┘
└─────────────┘ │
▼
┌──────────────────┐
│ PostgreSQL │
│ (incidents, etc.) │
└─────────┬─────────┘
│
┌───────────────────────┼───────────────────────┐
▼ ▼
┌──────────────────┐ ┌──────────────────┐
│ Socket.io │ ───── live push ───────▶│ Next.js client │
│ (real-time layer) │ │ (dashboard) │
└──────────────────┘ └──────────────────┘
▲
│ schedule / cancel
▼
┌──────────────────┐
│ Redis + BullMQ │
│ (escalation jobs) │
└──────────────────┘
```
### 文件夹结构(建议)
```
oncallr/
├── apps/
│ ├── web/ # Next.js frontend
│ │ ├── app/
│ │ ├── components/
│ │ └── lib/
│ └── api/ # Fastify backend
│ ├── src/
│ │ ├── routes/
│ │ ├── services/ # business logic (escalation, ai, etc.)
│ │ ├── jobs/ # BullMQ job definitions
│ │ ├── sockets/ # Socket.io event handlers
│ │ ├── db/ # migrations, schema, queries
│ │ └── plugins/
├── packages/
│ └── shared-types/ # shared TS types between web and api
└── docs/
├── 00-master-overview.md
└── features.md
```
## 8. 开发阶段
| 阶段 | 持续时间 | 交付物 |
|---|---|---|
| 1. 基础建设 | 1 周 | 认证、服务 CRUD、基础 dashboard 布局 |
| 2. 调度 | 1.5 周 | 值班轮换、日历视图、“当前谁在值班” |
| 3. Webhook + 实时核心 | 1.5 周 | Webhook endpoint、Socket.io 实时通知 |
| 4. 升级引擎 | 1.5 周 | BullMQ 延迟任务、升级链条逻辑 |
| 5. 事件时间线与评论 | 1 周 | 事件日志、评论、状态转换 |
| 6. AI 复盘报告 | 1 周 | 生成、编辑、保存 |
| 7. 分析与完善 | 1 周 | MTTA/MTTR 图表、部署、演示完善 |
**总计:约 9 周**
## 9. MVP 定义
OnCallr 的 MVP 完成标准如下:
- Admin 可以创建服务和值班调度
- 向服务的唯一 URL 发送 Webhook POST 请求可以创建事件
- 当前值班的工程师会收到即时的实时通知
- 如果在配置的超时时间内未确认,事件将自动升级给下一个人
- 工程师可以确认、评论并解决事件
- 已解决的事件可以生成 AI 起草的复盘报告,该报告可以编辑和保存
- Admin 可以查看基础分析数据(MTTA、MTTR、事件量)
## 10. 作品集价值
本项目展示了:
- 实时系统设计(Socket.io,实时状态同步)
- 持久化的、基于时间的任务调度(Redis/BullMQ —— 而不是原生的 `setTimeout`)
- 状态机设计(事件生命周期:触发 → 已确认 → 已解决)
- 将 AI 应用于结构化文档生成(而不仅仅是 chatbot 包装器)
- 安全防范意识(webhook token 验证、速率限制)
- 针对调度和审计追踪数据的关系型数据库设计
- 包含真实工程领域指标(MTTA/MTTR)的 dashboard/分析 UX
本项目的初衷是让它看起来像是一个令人信服的“我了解生产环境事件响应工具是如何运作的”项目,而不仅仅是一个 CRUD 演示。
标签:AI复盘, 值班管理, 告警系统, 搜索引擎查询, 测试用例, 自动化升级, 自动化攻击, 运维