jaya6400/openmetadata-incident-bot
GitHub: jaya6400/openmetadata-incident-bot
一个构建在 OpenMetadata 之上的 AI 辅助数据质量事件响应工具,通过自动整合负责人信息、血缘影响分析和 AI 摘要,将原始的数据质量告警转化为可快速分诊的 Slack 通知和仪表盘视图。
Stars: 0 | Forks: 0
# OM Incident Bot
OM Incident Bot 是一个构建在 OpenMetadata 之上的 AI 辅助事件响应层。它将数据质量故障转化为感知负责人的 Slack 告警、基于血缘的影响上下文,以及用于更快分类的清晰事件仪表盘。
## 1. 关于本项目
数据质量事件通常会在分析、数据工程和业务团队中引发连锁反应。仅仅一个失败的测试本身并不能提供足够的信息。团队仍然需要回答:
- 具体是什么失败了?
- 谁负责它?
- 哪些下游资产受到了影响?
- 应该优先处理什么?
OM Incident Bot 通过将 OpenMetadata 作为上下文系统,并将其与 Slack 和 AI 结合以创建实用的事件响应工作流来解决这一问题。
该项目包含两个主要部分:
- 一个用于事件分类、血缘检查和负责人可见性的 React 仪表盘
- 一个接收 OpenMetadata 事件、使用元数据上下文丰富事件并发送 Slack 告警的 Express 后端
## 2. 在线链接
- 前端: [网站链接](https://openmetadata-incident-bot-jd.vercel.app/)
- 演示视频: [视频链接](https://youtu.be/M84QhdeTKWc?si=0faRELARzTOCbNHU)
## 3. 解决的问题
该项目解决了一个核心问题:
**OpenMetadata 可以检测数据质量问题,但团队在做出响应之前,仍需耗费时间手动收集负责人、血缘和操作上下文。**
OM Incident Bot 通过以下方式缩小了这一差距:
- 接收来自 OpenMetadata 的测试用例失败事件
- 识别表负责人
- 获取血缘以了解爆炸半径
- 生成简短的 AI 摘要进行分类
- 发送富文本 Slack 告警
- 在响应式 UI 中展示事件以便后续跟进
简而言之,它将失败的数据质量信号转化为可操作的事件工作流。
## 4. 使用的技术栈
### 前端
- React 19
- TypeScript
- Vite
- Framer Motion
- CSS
### 后端
- Node.js
- Express
- TypeScript
- Axios
- body-parser
- cors
### 集成
- OpenMetadata APIs
- Slack API
- Google Gemini API
## 5. 项目架构
## 高层流程
1. OpenMetadata 发出测试用例事件。
2. 后端接收 webhook。
3. 后端从 OpenMetadata 获取元数据上下文。
4. 解析血缘和所有权。
5. Gemini 生成简短的分类摘要。
6. 将 Slack 告警发送到正确的频道,并附上负责人上下文。
7. 前端仪表盘展示事件、血缘和负责人。
8. 用户还可以将最近的 OpenMetadata 事件/结果记录拉取到仪表盘中。
## 仓库结构
```
openmetadata-incident-bot/
├─ client/
│ ├─ public/
│ ├─ src/
│ │ ├─ components/
│ │ ├─ styles/
│ │ ├─ types/
│ │ ├─ utils/
│ │ └─ App.tsx
│ └─ package.json
├─ server/
│ ├─ src/
│ │ ├─ controllers/
│ │ ├─ models/
│ │ ├─ routes/
│ │ ├─ services/
│ │ └─ index.ts
│ └─ package.json
└─ README.md
```
后端遵循简洁的受 MVC 启发的结构:
- `routes/` 定义 API 端点
- `controllers/` 处理请求/响应逻辑
- `models/` 管理事件数据结构和存储逻辑
- `services/` 包含 OpenMetadata、Slack 和 Gemini 的集成逻辑
这使得项目模块化、易读且更易于维护。
## 前端架构
前端是一个 Vite + React 仪表盘,包含三个主要视图:
- Incident Feed
- Lineage
- Owners
该 UI 为操作使用进行了优化:
- 粘性顶部栏操作
- 移动端侧边栏菜单
- 按状态过滤的事件流
- 负责人和血缘上下文
- 适用于桌面和移动端的响应式布局
## 后端架构
后端暴露 REST 端点和集成处理器:
- `POST /api/webhook`
- `POST /api/slack/commands`
- `GET /api/incidents`
- `GET /api/om-incidents`
- `GET /api/lineage`
- `GET /api/owners`
- `GET /health`
后端负责:
- 接收 webhook 事件
- 使用 OpenMetadata 数据丰富事件
- 发送 Slack 告警
- 生成 Gemini 摘要
- 将规范化的事件数据提供给前端
## OpenMetadata 认证与 API 使用
本项目通过以下方式使用 OpenMetadata 个人访问令牌:
- `OPMD_JWT_TOKEN`
该令牌从后端在 Authorization 头中发送:
```
Authorization: Bearer
```
### 使用的 OpenMetadata APIs
#### 1. 测试用例事件状态 API
用于从 OpenMetadata 进行基于拉取的事件/结果同步:
```
GET /api/v1/dataQuality/testCases/testCaseIncidentStatus
```
目的:
- 获取最近的 OpenMetadata 事件状态记录
- 在仪表盘中显示失败和已解决/通过的记录
#### 2. 测试用例详情 API
用于使用负责人和实体详情丰富 webhook 事件:
```
GET /api/v1/testCases/name/:fqn?fields=owner,testDefinition,entityLink
```
目的:
- 解析测试用例的负责人详情
- 将失败的测试用例映射回其元数据上下文
#### 3. 表详情 API
在多处使用:
```
GET /api/v1/tables/name/:tableFqn?fields=owners
GET /api/v1/tables/name/:tableFqn?fields=owners,tags,description,testSuite
```
目的:
- 在测试用例查找不可用时作为后备负责人查找方案
- Slack 斜杠命令响应
- 表描述、标签和测试套件丰富
#### 4. 表血缘 API
用于影响分析:
```
GET /api/v1/lineage/table/name/:tableFqn
```
目的:
- 查找上游依赖
- 查找受影响的下游表
- 支持仪表盘血缘视图
- 支持 Slack 血缘命令
## PAT 如何在系统中流转
1. 您在 OpenMetadata 中生成一个 PAT。
2. 该 PAT 作为 `OPMD_JWT_TOKEN` 存储在后端环境变量中。
3. 后端使用 Axios 调用 OpenMetadata APIs。
4. 前端从不直接存储或暴露 PAT。
5. 前端仅通过 `VITE_API_URL` 与您的后端通信。
这使得 OpenMetadata 的访问控制在服务器端进行。
## 6. 本地设置
### 克隆仓库
```
git clone https://github.com/jaya6400/openmetadata-incident-bot.git
cd openmetadata-incident-bot
```
### 启动后端
```
cd server
npm install
npm run dev
```
### 启动前端
```
cd client
npm install
npm run dev
```
### 后端环境变量
创建 `server/.env`:
```
PORT=3001
OPMD_URL=https://sandbox.open-metadata.org
OPMD_JWT_TOKEN=YOUR_OPENMETADATA_PAT
OWNER_EMAIL=owner@example.com
SLACK_BOT_TOKEN=YOUR_SLACK_BOT_TOKEN
SLACK_CHANNEL_ID=YOUR_SLACK_CHANNEL_ID
GEMINI_API_KEY=YOUR_GEMINI_API_KEY
```
### 前端环境变量
创建 `client/.env`:
```
VITE_API_URL=http://localhost:3001
VITE_OM_URL=https://sandbox.open-metadata.org
```
### 常用的本地 URL
- 前端:`http://localhost:5173`
- 后端:`http://localhost:3001`
- 健康检查:`http://localhost:3001/health`
## 7. 部署
## 前端部署
前端旨在部署在 Vercel 上。
步骤:
1. 将 `client` 应用导入 Vercel。
2. 将 `VITE_API_URL` 设置为您部署的后端 URL。
3. 如有需要,设置 `VITE_OM_URL`。
4. 部署并将最终链接添加到 README 中。
前端链接:
`ADD_VERCEL_LINK_HERE`
## 后端部署
后端部署在 Railway 托管平台上。
必需的环境变量:
- `PORT`
- `OPMD_URL`
- `OPMD_JWT_TOKEN`
- `OWNER_EMAIL`
- `SLACK_BOT_TOKEN`
- `SLACK_CHANNEL_ID`
- `GEMINI_API_KEY`
重要的部署说明:
- 仅将 OpenMetadata PAT 保留在后端
- 切勿在前端暴露 `OPMD_JWT_TOKEN`
## 8. 截图
### 前端 UI
- Incident Feed 桌面视图
- 移动端响应式视图
- Lineage 页面
- Owners 页面
### Slack App
- Slack 事件告警消息
- Slack `/om-status` 命令输出
- Slack `/om-lineage` 命令输出
- Slack `/om-owner` 命令输出
## 9. 使用的编码助手:
- Claude Code, VS code copilot
## 10. 作者
**Jaya Dubey**
- 作品集:[链接](https://jaya-dubey-resume.netlify.app/)
- LinkedIn:[链接](https://www.linkedin.com/in/jaya6400)
为 [OpenMetadata Hackathon](https://www.wemakedevs.org/hackathons/openmetadata) 而建。
标签:AI摘要, API集成, Express, GNU通用公共许可证, MITM代理, Node.js, OpenMetadata, React, Slack集成, Syscalls, TypeScript, Vite, 事故管理, 人工智能辅助, 仪表盘, 可观测性, 告警通知, 安全插件, 影响分析, 数据工程, 数据治理, 数据血缘, 数据质量, 自动化攻击