Files
alert-message-center/README.md
d0zingcat b03707a794 init
Signed-off-by: d0zingcat <iamtangli42@gmail.com>
2026-01-09 23:44:05 +08:00

4.5 KiB
Raw Blame History

Alert Message Center

这是一个基于 Bun, Hono, Drizzle ORM (SQLite)React (Vite + Tailwind) 构建的企业级告警管理系统。

它采用 Topic (主题) 订阅模型,类似于 Sentry 的告警分发机制。告警发送到特定的 Topic系统根据订阅关系通过 飞书机器人私聊 (Private Message) 将告警精准推送给订阅该 Topic 的用户。

核心理念

  • Topic (主题): 业务逻辑上的告警分类,例如 payment-service-error, frontend-performance, daily-report
  • User (用户): 接收告警的实体,绑定飞书 User ID。
  • Subscription (订阅): 用户订阅感兴趣的 Topic。
  • Private Message (私聊): 告警不再发送到嘈杂的群组,而是直接私聊发送给相关负责人,确保触达。

功能特性

  • 精准分发: 告警只发给订阅的人,避免群消息轰炸。
  • 集中管理: 统一管理所有告警入口和订阅关系,无需维护大量硬编码的 Webhook URL。
  • 飞书集成: 使用飞书开放平台 API支持发送富文本和卡片消息。
  • 全局监控: 提供 Grafana 风格的系统负载看板,实时追踪告警接收数、应发消息数及发送成功率。
  • 现代化技术栈: 全栈 TypeScript高性能 Bun 运行时。

快速开始

1. 前置准备

你需要创建一个飞书企业自建应用 (Custom App)

  1. 访问 飞书开发者后台
  2. 创建企业自建应用。
  3. 启用机器人能力: 在 "添加应用能力" -> "机器人" 中启用。
  4. 申请权限: 在 "权限管理" 中申请以下权限:
    • im:message (获取与发送单聊、群组消息)
    • im:message:send_as_bot (以应用身份发送消息)
    • (可选) contact:user.id:readonly (通过手机号或邮箱获取用户 ID)
  5. 发布版本: 创建版本并发布,等待管理员审核通过。
  6. 获取 App ID and App Secret

2. 安装依赖

确保你已经安装了 Bun

# 在根目录运行
bun install

3. 配置环境变量

apps/server 目录下 (或者在启动命令中) 配置环境变量:

export FEISHU_APP_ID="你的AppID"
export FEISHU_APP_SECRET="你的AppSecret"

4. 启动开发环境

这将同时启动后端 API (端口 3000) 和前端界面 (端口 5173)。

bun run dev

访问前端界面: http://localhost:5173

5. 使用指南

第一步:配置 Topic

  1. 进入 Topics 页面,点击 "Add Topic"。
  2. 填写 Name (显示名) 和 Slug (唯一标识,用于 URL)。
    • 例如: Name: "支付服务异常", Slug: payment-error

第二步:添加用户

  1. 进入 Users 页面,添加用户。
  2. 必须填入用户的 飞书 User ID (Open ID 或 User ID)。
    • 提示: 可以在飞书管理后台查看用户的 User ID或者通过 API 获取。

第三步:订阅告警

  1. 回到 Topics 页面。
  2. 点击 Topic 卡片上的 订阅图标 (用户组图标)。
  3. 勾选需要接收该 Topic 告警的用户。

第四步:发送告警

使用你的程序或脚本向系统发送 POST 请求:

POST http://localhost:3000/api/webhook/:slug

示例 (curl):

curl -X POST http://localhost:3000/api/webhook/payment-error \
  -H "Content-Type: application/json" \
  -d '{
    "msg_type": "text",
    "content": {
      "text": "支付接口响应超时 (500ms)"
    }
  }'

系统会查找订阅了 payment-error 的所有用户,并通过飞书机器人给他们分别发送私聊消息。

API 参考

发送告警

POST /api/webhook/:slug

Parameters:

  • slug: Topic 的唯一标识符。

Body: 直接透传给飞书消息 API 的 contentmsg_type

  1. 文本消息:
{
  "msg_type": "text",
  "content": {
    "text": "告警内容..."
  }
}
  1. 富文本/卡片消息: 请参考 飞书发送消息 API 文档 构建 content

项目结构

  • apps/server: 后端服务 (Hono + Drizzle)
    • src/index.ts: 入口文件
    • src/feishu.ts: 飞书 API 客户端
    • src/webhook.ts: 告警处理与分发逻辑
    • src/db: 数据库 Schema (Topics, Users, Subscriptions)
  • apps/web: 前端界面 (React + Vite)
    • src/views/SystemLoadView.tsx: 实时监控仪表盘
    • src/views/AdminView.tsx: 后台管理与仪表盘集成