本文档列出了 OneBots 项目中已实现的所有生产就绪功能。
- ✅ 实现位置:
packages/core/src/middleware/rate-limit.ts - ✅ 功能: 防止 API 滥用,保护服务器资源
- ✅ 特性:
- 基于时间窗口的速率限制
- 支持自定义键生成(默认使用 IP)
- 自动设置响应头(X-RateLimit-*)
- 集成安全审计日志
- ✅ 集成: 已在
BaseApp中自动启用
- ✅ 实现位置:
packages/core/src/middleware/token-validator.ts - ✅ 功能: 支持多种令牌验证方式
- ✅ 特性:
- 从 Header 或 Query 参数获取令牌
- 支持 Bearer Token 格式
- 可配置验证函数
- 集成安全审计日志
- ✅ 实现位置:
packages/core/src/middleware/token-manager.ts - ✅ 功能: 令牌生命周期管理
- ✅ 特性:
- 令牌生成和验证
- 令牌过期检查
- 令牌刷新机制
- 自动清理过期令牌
- 令牌撤销功能
- ✅ 实现位置:
packages/core/src/middleware/token-validator.ts - ✅ 功能: 请求签名验证
- ✅ 特性:
- 支持多种 HMAC 算法(默认 SHA256)
- 时间安全比较
- 防止重放攻击
- ✅ 实现位置:
packages/core/src/middleware/security-audit.ts - ✅ 功能: 记录所有安全相关事件
- ✅ 特性:
- 认证成功/失败记录
- 无效令牌记录
- 速率限制触发记录
- 可疑请求记录
- 错误事件记录
- JSON Lines 格式日志
- 按日期分割日志文件
- ✅ 日志位置:
{dataDir}/audit/security-audit-{date}.log
- ✅ 实现位置:
packages/core/src/retry.ts - ✅ 功能: 自动重试失败的操作
- ✅ 特性:
- 指数退避策略
- 随机抖动(防止惊群效应)
- 可配置重试次数和延迟
- 智能错误判断(只重试网络错误)
- 连接管理器(用于 WebSocket 重连)
- ✅ 实现位置:
packages/core/src/circuit-breaker.ts - ✅ 功能: 防止级联故障
- ✅ 特性:
- 三种状态:关闭、开启、半开
- 基于失败次数和错误率的触发
- 自动恢复机制
- 状态监控和统计
- ✅ 实现位置:
packages/core/src/connection-pool.ts - ✅ 功能: 管理 HTTP/WebSocket 连接
- ✅ 特性:
- 连接复用
- 最大/最小连接数控制
- 空闲连接自动清理
- 连接验证
- 等待队列管理
- ✅ 实现位置:
packages/core/src/metrics.ts - ✅ 功能: 收集系统性能指标
- ✅ 特性:
- 计数器(Counter)
- 仪表(Gauge)
- 直方图(Histogram)
- 标签支持
- 时间窗口统计
- 自动清理过期数据
- ✅ 实现位置:
packages/core/src/middleware/metrics-collector.ts - ✅ 功能: 自动收集 HTTP 请求指标
- ✅ 特性:
- 请求计数(按方法、路径)
- 响应时间统计
- 错误率统计
- 状态码分布
- ✅ 实现位置:
packages/core/src/base-app.ts(setupHealthEndpoints) - ✅ 端点:
GET /metrics - ✅ 功能: 导出 Prometheus 格式指标
- ✅ 指标包括:
- 应用信息(版本、运行时间)
- 内存使用(RSS、堆内存)
- 适配器和账号状态
- HTTP 请求指标(请求数、响应时间、错误率)
- ✅ 实现位置:
packages/core/src/base-app.ts(setupHealthEndpoints) - ✅ 端点:
GET /health- 存活探针GET /ready- 就绪探针
- ✅ 功能:
/health: 基础健康检查/ready: 检查所有适配器和账号是否就绪
- ✅ 实现位置:
packages/core/src/errors.ts - ✅ 功能: 分类错误处理
- ✅ 特性:
- 错误分类(网络、配置、运行时等)
- 错误严重程度
- 错误上下文
- 错误包装和转换
- 可恢复性判断
- ✅ 实现位置:
packages/core/src/logger.ts - ✅ 功能: 结构化日志
- ✅ 特性:
- 性能测量
- 上下文信息
- 日志级别
- 错误追踪
- ✅ 实现位置:
packages/core/src/config-validator.ts - ✅ 功能: 配置 Schema 验证
- ✅ 特性:
- 类型验证
- 默认值处理
- 错误报告
| 类别 | 功能 | 状态 | 完成度 |
|---|---|---|---|
| 安全性 | 速率限制 | ✅ 完成 | 100% |
| 令牌验证 | ✅ 完成 | 100% | |
| 令牌管理 | ✅ 完成 | 100% | |
| HMAC 签名 | ✅ 完成 | 100% | |
| 安全审计 | ✅ 完成 | 100% | |
| 稳定性 | 重试机制 | ✅ 完成 | 100% |
| 熔断器 | ✅ 完成 | 100% | |
| 连接池 | ✅ 完成 | 100% | |
| 监控 | 指标收集 | ✅ 完成 | 100% |
| Prometheus 导出 | ✅ 完成 | 100% | |
| 健康检查 | ✅ 完成 | 100% | |
| 错误处理 | 错误分类 | ✅ 完成 | 100% |
| 日志系统 | ✅ 完成 | 100% | |
| 配置 | 配置验证 | ✅ 完成 | 100% |
所有功能已在 BaseApp 中自动集成,无需额外配置即可使用。
- 速率限制 - 默认 1 分钟 100 次请求
- 安全审计日志 - 自动记录到
{dataDir}/audit/ - 性能指标收集 - 自动收集所有 HTTP 请求指标
- 健康检查端点 -
/health,/ready,/metrics
import { App } from 'onebots';
import { initTokenManager, createManagedTokenValidator } from '@onebots/core';
// 初始化令牌管理器(可选)
const tokenManager = initTokenManager({
defaultExpiration: 3600000, // 1小时
autoRefresh: true,
});
const app = new App({
port: 6727,
log_level: 'info',
});
await app.start();- 速率限制存储: 当前使用内存存储,生产环境建议使用 Redis
- 安全审计日志: 日志文件会按日期分割,建议定期归档
- 性能指标: 默认保留最近 1000 个样本,可根据需要调整
- 令牌管理: 令牌管理器需要手动初始化才能使用
- Redis 支持: 将速率限制和安全审计日志存储到 Redis
- 分布式追踪: 集成 OpenTelemetry 或 Jaeger
- 告警系统: 基于指标设置告警规则
- 性能优化: 添加缓存层和连接池优化