{"repo":"yigehaozi/relay-status-monitor","free":true,"listed":false,"github":"https://github.com/yigehaozi/relay-status-monitor","clone":"git clone https://github.com/yigehaozi/relay-status-monitor.git","description":"自托管的 AI API 中转站状态监控面板，支持 SUB2API / New API、余额与延迟采集、模型测速、可用率统计及飞书告警。","language":"TypeScript","stars":20,"topics":["ai-api","api-monitoring","new-api","nextjs","openai-api","postgresql","prisma","self-hosted","status-dashboard","sub2api"],"license":"MIT","category":"self-hosted-apps","readme_excerpt":"Relay Status Monitor 一个面向 AI API 中转站的自托管状态监控面板。它可以统一管理多个 SUB2API 与 New API 上游，按 Key/分组采集余额、延迟、可用率和模型测速数据，并通过告警规则与飞书 Webhook 发送异常通知。 仓库只包含程序源码、公开文档和合成演示数据，不包含生产数据库、真实上游凭证、运行日志或内部开发记录。 界面预览 所有预览均使用合成演示数据，不对应真实服务、余额或账号。 桌面端 手机端 主要能力 - 多上游管理：支持 SUB2API 与 New API，可为一个上游配置多个独立 Key/分组。 - 指标采集：记录余额、接口延迟、模型测试延迟、首 Token 延迟和流式 TPS。 - 轻重分层：日常刷新只查询余额和模型列表；重量采集会发送少量模型生成请求。 - 状态聚合：分别维护 Key 状态和上游汇总状态，支持在线、降级、离线和未知状态。 - 远端元数据：New API 可同步 Token 名称、分组名称、分组说明和倍率。 - 告警管理：支持余额、延迟、连续失败和最近一小时可用率规则，并提供冷却与自动恢复。 - 通知渠道：当前支持飞书自定义机器人 Webhook，可选签名密钥。 - 响应式界面：桌面端与手机端均可使用，并支持深色/浅色主题。 - 本地认证：使用用户名和密码登录，登录会话保存在 HttpOnly Cookie 中。 支持的上游 类型 余额 延迟/模型列表 模型与流式测速 远端 Key 元数据 所需凭证 --- --- --- --- --- --- SUB2API GET /v1/usage GET /v1/models POST /v1/chat/completions 仅使用余额响应中可用的分组字段 API Key NEW API GET /api/user/self GET /v1/models POST /v1/chat/completions Token 搜索、Token 用量和用户分组接口 API Key；余额和完整元数据还需要 Access Token 与用户 ID 不同部署或二次开发版本的接口可能存在差异。添加上游后，请先使用“测试”或“刷新”确认兼容性。重量测试会产生真实模型请求并消耗少量额度。 技术栈 - Next.js 14、React 18、TypeScript - Tailwind CSS、shadcn/ui、TanStack Table、Recharts - Prisma 6、PostgreSQL - bcrypt、JWT、AES-256-GCM 详细设计见 系统架构。 Quick Start（快速开始） 环境要求 - Node.js 20 LTS 或更新版本 - pnpm 9 或更新版本 - PostgreSQL 14 或更新版本 - 可选： curl 与系统 cron ，用于定时采集 1. 获取源码 2. 配置环境变量 至少设置数据库与应用加密密钥： 可以使用 OpenSSL 生成随机密钥： 环境变量说明： 变量 必填 说明 --- --- --- DATABASE URL 是 PostgreSQL 连接字符串。生产环境建议使用独立数据库和最小权限账号。 APP ENCRYPTION KEY 是 用于加密上游凭证并签发登录会话；应用运行和 demo seed 均需要，建议至少 32 字节随机值。 CRON SECRET 建议 定时采集接口的 Bearer 密钥，也可以登录后在设置页保存。数据库设置优先于环境变量。 NEXT PUBLIC AP","default_branch":null,"files":null,"tree":[],"storefront":"/r/yigehaozi","claimed":false,"request_supported":{"post":"https://gitbuyer.com/r/yigehaozi/relay-status-monitor/request-supported","requests":0},"note":"indexed from public GitHub; nothing is for sale on this page. Clone it from GitHub. Paid listings live at /search."}