# 监控告警 **本文引用的文件** - [server/src/app.ts](file://server/src/app.ts) - [server/src/middleware/performance.ts](file://server/src/middleware/performance.ts) - [server/src/services/sentry.service.ts](file://server/src/services/sentry.service.ts) - [server/src/middleware/errorHandler.ts](file://server/src/middleware/errorHandler.ts) - [server/src/services/logger.service.ts](file://server/src/services/logger.service.ts) - [server/src/services/log.service.ts](file://server/src/services/log.service.ts) - [server/src/services/queue.service.ts](file://server/src/services/queue.service.ts) - [server/src/config/index.ts](file://server/src/config/index.ts) - [server/src/modules/subscription/subscription.controller.ts](file://server/src/modules/subscription/subscription.controller.ts) - [.codebuddy/rules/harness.mdc](file://.codebuddy/rules/harness.mdc) ## 目录 1. [简介](#简介) 2. [项目结构](#项目结构) 3. [核心组件](#核心组件) 4. [架构总览](#架构总览) 5. [详细组件分析](#详细组件分析) 6. [依赖关系分析](#依赖关系分析) 7. [性能考量](#性能考量) 8. [故障排查指南](#故障排查指南) 9. [结论](#结论) 10. [附录](#附录) ## 简介 本文件面向AI有声书生成平台的运维与开发团队,提供一套完整的监控告警方案。内容覆盖系统监控指标定义、性能监控配置、业务监控设置;涵盖Sentry错误监控集成、日志收集分析与APM性能监控;解释告警规则配置、通知渠道设置与告警升级策略;并提供关键指标仪表板设计、自定义监控图表与趋势分析思路,以及系统健康检查、容量规划与性能瓶颈识别方法,帮助实现数据驱动的运维决策。 ## 项目结构 围绕监控与告警的关键模块分布如下: - 应用入口与中间件:应用启动、路由注册、全局中间件(性能、安全、限流、Sentry、HTTP日志等) - 错误与异常:统一错误处理中间件与自定义错误类型 - 错误监控:Sentry初始化、错误捕获、上下文与标签设置 - 日志体系:Winston HTTP日志、请求日志服务与错误模式分析 - 性能监控:内置性能中间件与指标导出路由 - 队列与任务:任务队列、状态统计与进度回调 - 配置中心:模型与服务配置、默认模型切换策略 - 业务监控:订阅与配额接口(可用于业务指标采集) ```mermaid graph TB A["应用入口
server/src/app.ts"] --> B["性能监控中间件
server/src/middleware/performance.ts"] A --> C["Sentry错误监控
server/src/services/sentry.service.ts"] A --> D["错误处理中间件
server/src/middleware/errorHandler.ts"] A --> E["Winston HTTP日志
server/src/services/logger.service.ts"] A --> F["请求日志服务
server/src/services/log.service.ts"] A --> G["队列服务
server/src/services/queue.service.ts"] A --> H["配置中心
server/src/config/index.ts"] A --> I["订阅/配额接口
server/src/modules/subscription/subscription.controller.ts"] ``` **图示来源** - [server/src/app.ts:1-194](file://server/src/app.ts#L1-L194) - [server/src/middleware/performance.ts:1-109](file://server/src/middleware/performance.ts#L1-L109) - [server/src/services/sentry.service.ts:1-113](file://server/src/services/sentry.service.ts#L1-L113) - [server/src/middleware/errorHandler.ts:1-67](file://server/src/middleware/errorHandler.ts#L1-L67) - [server/src/services/logger.service.ts:1-114](file://server/src/services/logger.service.ts#L1-L114) - [server/src/services/log.service.ts:1-354](file://server/src/services/log.service.ts#L1-L354) - [server/src/services/queue.service.ts:1-347](file://server/src/services/queue.service.ts#L1-L347) - [server/src/config/index.ts:1-117](file://server/src/config/index.ts#L1-L117) - [server/src/modules/subscription/subscription.controller.ts:47-99](file://server/src/modules/subscription/subscription.controller.ts#L47-L99) **章节来源** - [server/src/app.ts:1-194](file://server/src/app.ts#L1-L194) ## 核心组件 - 应用入口与中间件链:负责注册全局中间件、静态资源、路由与健康检查端点,并在启动时进行外部依赖连通性检测与优雅关闭处理。 - 性能监控中间件:统计总请求数、平均响应时间、慢请求、端点级指标与错误率,并提供指标导出路由。 - Sentry错误监控:初始化SDK、按环境采样、过滤无关错误、捕获异常与消息、设置用户与标签、并作为Koa中间件统一上报。 - 错误处理中间件:统一捕获异常,构造标准化错误响应,并在开发环境输出堆栈。 - 日志体系:Winston控制台与文件输出、HTTP请求日志、请求日志服务(内存+持久化)、错误模式识别与修复建议。 - 队列服务:基于Redis/Bull的任务队列,提供任务添加、状态查询、进度更新、统计与降级回退至内存队列。 - 配置中心:集中管理模型配置、默认模型、启用模型、模型切换策略(如限流/配额/服务不可用等)。 - 业务监控:订阅/配额接口可用于统计用户使用情况、Token消耗与限额校验,支撑业务指标采集。 **章节来源** - [server/src/app.ts:63-130](file://server/src/app.ts#L63-L130) - [server/src/middleware/performance.ts:1-109](file://server/src/middleware/performance.ts#L1-L109) - [server/src/services/sentry.service.ts:1-113](file://server/src/services/sentry.service.ts#L1-L113) - [server/src/middleware/errorHandler.ts:1-67](file://server/src/middleware/errorHandler.ts#L1-L67) - [server/src/services/logger.service.ts:1-114](file://server/src/services/logger.service.ts#L1-L114) - [server/src/services/log.service.ts:1-354](file://server/src/services/log.service.ts#L1-L354) - [server/src/services/queue.service.ts:1-347](file://server/src/services/queue.service.ts#L1-L347) - [server/src/config/index.ts:1-117](file://server/src/config/index.ts#L1-L117) - [server/src/modules/subscription/subscription.controller.ts:47-99](file://server/src/modules/subscription/subscription.controller.ts#L47-L99) ## 架构总览 下图展示监控与告警在系统中的位置与交互: ```mermaid graph TB subgraph "客户端" U["用户/前端/第三方"] end subgraph "服务端" R["Koa路由与控制器"] PM["性能监控中间件"] EH["错误处理中间件"] SL["Sentry错误监控"] WL["Winston日志"] LS["请求日志服务"] QS["队列服务"] CFG["配置中心"] end subgraph "外部依赖" RD["Redis"] DB["数据库"] ST["对象存储/本地存储"] end U --> R R --> PM R --> EH EH --> SL R --> WL WL --> LS R --> QS R --> CFG QS --> RD R --> DB R --> ST ``` **图示来源** - [server/src/app.ts:63-130](file://server/src/app.ts#L63-L130) - [server/src/middleware/performance.ts:1-109](file://server/src/middleware/performance.ts#L1-L109) - [server/src/services/sentry.service.ts:1-113](file://server/src/services/sentry.service.ts#L1-L113) - [server/src/services/logger.service.ts:1-114](file://server/src/services/logger.service.ts#L1-L114) - [server/src/services/log.service.ts:1-354](file://server/src/services/log.service.ts#L1-L354) - [server/src/services/queue.service.ts:1-347](file://server/src/services/queue.service.ts#L1-L347) - [server/src/config/index.ts:1-117](file://server/src/config/index.ts#L1-L117) ## 详细组件分析 ### 性能监控中间件 - 指标维度 - 全局:总请求数、平均响应时间、慢请求数、错误数、错误率 - 端点级:端点调用次数、平均耗时、最大耗时、错误数 - 实现要点 - 在每个请求前后计算耗时并更新指标 - 超阈值(默认1秒)记录慢请求日志 - 通过响应头返回本次响应时间 - 提供指标导出路由,便于外部监控系统抓取 - 可观测性价值 - 识别慢端点与异常波动 - 评估整体吞吐与延迟表现 - 为容量规划与限流策略提供依据 ```mermaid flowchart TD Start(["进入中间件"]) --> Mark["记录开始时间"] Mark --> Next["执行下游中间件/控制器"] Next --> Done{"是否抛错?"} Done --> |否| Calc["计算耗时并更新指标"] Done --> |是| Err["统计错误并抛出"] Calc --> Slow{"是否慢请求?"} Slow --> |是| Warn["记录慢请求日志"] Slow --> |否| Resp["设置响应头并返回"] Warn --> Resp Err --> End(["结束"]) Resp --> End ``` **图示来源** - [server/src/middleware/performance.ts:29-76](file://server/src/middleware/performance.ts#L29-L76) **章节来源** - [server/src/middleware/performance.ts:1-109](file://server/src/middleware/performance.ts#L1-L109) - [server/src/app.ts:96-97](file://server/src/app.ts#L96-L97) ### Sentry错误监控集成 - 初始化与采样 - 读取DSN与环境变量,生产环境降低追踪采样率,开启CPU性能分析 - 提供错误过滤策略(如忽略特定连接拒绝错误) - 上下文与标签 - 设置用户ID、URL、方法等标签,便于聚合与检索 - 支持捕获异常与消息,并可附加上下文元数据 - 与Koa集成 - 作为中间件统一捕获未处理异常并上报 ```mermaid sequenceDiagram participant C as "客户端" participant K as "Koa应用" participant EH as "错误处理中间件" participant S as "Sentry" C->>K : 发起请求 K->>EH : 进入错误处理 EH-->>K : 执行业务逻辑 K-->>EH : 抛出异常 EH->>S : captureException(带标签/用户) S-->>EH : 上报完成 EH-->>C : 返回错误响应 ``` **图示来源** - [server/src/services/sentry.service.ts:92-110](file://server/src/services/sentry.service.ts#L92-L110) - [server/src/middleware/errorHandler.ts:3-24](file://server/src/middleware/errorHandler.ts#L3-L24) **章节来源** - [server/src/services/sentry.service.ts:1-113](file://server/src/services/sentry.service.ts#L1-L113) - [server/src/middleware/errorHandler.ts:1-67](file://server/src/middleware/errorHandler.ts#L1-L67) ### 日志收集与分析 - Winston日志 - 控制台彩色输出、错误文件与常规文件滚动、HTTP请求日志文件 - 支持按级别输出与结构化元数据 - 请求日志服务 - 内存中维护请求日志,限制最大条数并异步落盘 - 提供过滤、统计、错误模式分析与自动修复建议 - 统计错误数、告警数、平均响应时间与Top路径 ```mermaid flowchart TD A["接收请求日志"] --> B["写入内存日志"] B --> C{"超过最大条数?"} C --> |是| D["截断旧日志"] C --> |否| E["保持"] D --> F["异步落盘"] E --> F F --> G["控制台输出"] G --> H["错误模式匹配与建议"] ``` **图示来源** - [server/src/services/log.service.ts:140-171](file://server/src/services/log.service.ts#L140-L171) - [server/src/services/log.service.ts:217-271](file://server/src/services/log.service.ts#L217-L271) **章节来源** - [server/src/services/logger.service.ts:1-114](file://server/src/services/logger.service.ts#L1-L114) - [server/src/services/log.service.ts:1-354](file://server/src/services/log.service.ts#L1-L354) ### 队列与任务监控 - 队列能力 - 基于Redis/Bull的任务队列,支持任务添加、状态查询、进度更新、统计与暂停/恢复 - 当Redis不可用时自动降级至内存队列,保证基本可用 - 监控点 - 各队列等待/活跃/完成/失败/延迟任务数 - 任务超时与失败原因 - 进度回调与实时状态更新 ```mermaid classDiagram class QueueService { +addTask(queueType, data, options) Promise +getTaskStatus(queueType, jobId) Promise +updateProgress(queueType, jobId, progress, data) Promise +getQueueStats(queueType) Promise +pauseQueue(queueType) Promise +resumeQueue(queueType) Promise +closeAll() Promise } class RedisService { +isAvailable() boolean } QueueService --> RedisService : "依赖" ``` **图示来源** - [server/src/services/queue.service.ts:48-347](file://server/src/services/queue.service.ts#L48-L347) **章节来源** - [server/src/services/queue.service.ts:1-347](file://server/src/services/queue.service.ts#L1-L347) ### 配置中心与模型切换 - 配置管理 - 统一加载模型供应商、默认模型、启用模型列表 - 提供按类型筛选模型与获取下一个可用模型的能力 - 模型切换策略 - 根据错误关键字判断是否需要切换(如限流、配额、服务不可用、4xx/5xx等) - 用于在多模型场景下的自动容灾与降级 **章节来源** - [server/src/config/index.ts:1-117](file://server/src/config/index.ts#L1-L117) ### 业务监控(订阅与配额) - 接口能力 - 用户Token余额查询、使用记录分页查询、配额检查与兼容旧接口 - 监控价值 - 作为业务指标采集入口,结合日志与Sentry事件,形成用户行为与消费趋势画像 - 支撑容量规划与付费转化分析 **章节来源** - [server/src/modules/subscription/subscription.controller.ts:47-99](file://server/src/modules/subscription/subscription.controller.ts#L47-L99) ## 依赖关系分析 - 组件耦合 - 应用入口对中间件与服务的依赖清晰,中间件链顺序影响可观测性数据质量 - 性能中间件与Sentry中间件需位于错误处理之前以确保异常被正确捕获与上报 - 外部依赖 - Redis用于队列持久化,不可用时触发降级 - 数据库与对象存储/本地存储在启动阶段进行连通性检测 - 潜在风险 - 队列不可用时,任务可能丢失或阻塞 - 日志文件滚动与磁盘空间占用需监控 - Sentry采样率与过滤策略需定期评估 ```mermaid graph LR APP["应用入口"] --> PM["性能中间件"] APP --> EH["错误处理中间件"] EH --> SEN["Sentry"] APP --> LOG["Winston日志"] LOG --> LGS["请求日志服务"] APP --> Q["队列服务"] Q --> RDS["Redis"] APP --> CFG["配置中心"] ``` **图示来源** - [server/src/app.ts:63-130](file://server/src/app.ts#L63-L130) - [server/src/services/queue.service.ts:53-59](file://server/src/services/queue.service.ts#L53-L59) - [server/src/services/logger.service.ts:18-65](file://server/src/services/logger.service.ts#L18-L65) - [server/src/services/log.service.ts:42-63](file://server/src/services/log.service.ts#L42-L63) **章节来源** - [server/src/app.ts:133-191](file://server/src/app.ts#L133-L191) ## 性能考量 - 指标采集 - 性能中间件提供端点级与全局指标,建议结合Prometheus/Grafana进行长期趋势分析 - 队列统计可反映任务积压与处理能力 - 资源与容量 - Redis可用性直接影响队列可靠性,建议部署哨兵/集群并监控连接池 - 对象存储/本地存储的IO与带宽需纳入容量规划 - 瓶颈识别 - 结合慢请求日志与Sentry错误事件,定位热点端点与异常模式 - 通过日志服务的Top路径与错误分析,识别高频失败路径 [本节为通用指导,无需具体文件引用] ## 故障排查指南 - 健康检查 - 通过健康检查端点快速判断服务可用性 - 错误处理 - 统一错误响应与堆栈输出,便于快速定位问题 - 日志定位 - 使用Winston文件与请求日志服务,结合错误模式匹配与修复建议 - 队列问题 - 检查队列状态与统计,必要时暂停/恢复或清空队列 - Sentry事件 - 通过标签与用户上下文快速关联问题与用户 **章节来源** - [server/src/app.ts:91-94](file://server/src/app.ts#L91-L94) - [server/src/middleware/errorHandler.ts:3-24](file://server/src/middleware/errorHandler.ts#L3-L24) - [server/src/services/log.service.ts:217-297](file://server/src/services/log.service.ts#L217-L297) - [server/src/services/queue.service.ts:290-330](file://server/src/services/queue.service.ts#L290-L330) - [server/src/services/sentry.service.ts:75-87](file://server/src/services/sentry.service.ts#L75-L87) ## 结论 本方案以“可观测性即基础设施”为核心理念,通过性能中间件、Sentry错误监控、Winston日志与请求日志服务、队列统计与配置中心,构建了覆盖系统、性能与业务的监控体系。建议在此基础上完善告警规则、通知渠道与升级策略,并持续迭代指标与仪表板,以支撑数据驱动的运维与产品决策。 [本节为总结,无需具体文件引用] ## 附录 ### 告警规则与通知策略建议 - 规则维度 - 错误率:全局错误率、端点错误率 - 延迟与慢请求:平均响应时间、慢请求占比 - 队列积压:等待/失败任务数、长时间未完成任务 - 资源健康:Redis可用性、存储IO、数据库连接数 - 业务指标:Token消耗、配额使用、用户活跃度 - 通知渠道 - 邮件、即时通讯群组、电话(严重级别) - 升级策略 - 一级告警:10分钟未处置自动升级 - 二级告警:30分钟未处置自动升级 - 三级告警:1小时未处置自动升级 [本节为通用指导,无需具体文件引用] ### 关键指标仪表板设计 - 面板建议 - 全局概览:请求总量、错误率、慢请求、平均响应时间 - 端点热力:Top N慢端点、错误分布 - 队列看板:各队列任务状态、处理速率 - 业务看板:用户配额使用、Token消耗趋势 - 图表类型 - 折线图(趋势)、柱状图(分布)、热力图(端点) [本节为通用指导,无需具体文件引用] ### 系统健康检查与部署验证 - 健康检查端点:/health - 部署验证流程参考:启动服务后验证健康与静态资源可用性 **章节来源** - [server/src/app.ts:91-94](file://server/src/app.ts#L91-L94) - [.codebuddy/rules/harness.mdc:100-148](file://.codebuddy/rules/harness.mdc#L100-L148)