简介
本指南面向在 DouPHP 中搭建与使用“告警系统”的运维与开发人员,目标是:
- 定义告警规则与阈值(如错误率、响应时间)
- 配置通知渠道(邮件、短信、钉钉机器人、企业微信等)
- 制定告警策略(抑制、聚合、升级)
- 编写自定义业务指标告警
- 完成告警测试验证与历史记录统计分析
说明:当前仓库未提供内置的“告警引擎”,但已具备日志、健康检查、邮件/短信管理、微信公众号能力与通用设置持久化机制。可基于这些能力组合实现告警闭环。
项目结构
围绕告警相关能力,本项目涉及以下关键位置:
- 健康检查与记录:后台健康模块控制器
- 通知渠道:邮件订阅列表、短信参数初始化入口
- 日志与限流:统一日志工具(含通道、上下文、速率限制)
- 第三方集成:微信公众号消息处理
- 系统设置:参数持久化与审计
graph TB
A["管理员界面"] --> B["健康检查<br/>HealthController"]
A --> C["邮件管理<br/>EmailController"]
A --> D["短信管理<br/>SmsController"]
B --> E["健康服务/模型"]
C --> F["邮件服务/存储"]
D --> G["短信参数种子/存储"]
H["应用代码"] --> I["日志工具<br/>Log"]
I --> J["外部系统/存储"]
K["微信公众号回调"] --> L["WeixinService"]
M["系统设置"] --> N["SettingService"]
核心组件
- 健康检查与记录:用于采集系统健康状态、维护随访记录与字段配置,可作为告警数据源与处置流程载体。
- 通知渠道:
- 邮件:订阅邮箱列表管理与标记已读等。
- 短信:短信参数初始化入口,便于后续扩展短信告警。
- 日志与限流:统一日志写入、上下文注入、通道选择与每分钟速率限制,适合承载告警事件与防抖。
- 微信公众号:被动消息处理,可用于接收或转发告警到企业微信生态。
- 系统设置:统一的参数持久化与审计,便于集中管理告警阈值、渠道密钥等。
架构总览
下图展示从“指标采集—规则判定—通知发送—记录归档”的告警闭环,结合现有组件进行落地。
sequenceDiagram
participant App as "业务应用"
participant Log as "日志工具(Log)"
participant Eval as "规则评估(建议新增)"
participant Notify as "通知渠道(邮件/短信/企微)"
participant Store as "存储/数据库"
participant Admin as "管理后台"
App->>Log : 写入运行日志/指标
Log-->>Store : 持久化日志
App->>Eval : 上报指标(错误率/耗时等)
Eval->>Eval : 阈值判断/抑制/聚合
Eval-->>Notify : 触发告警事件
Notify-->>Admin : 发送邮件/短信/企微消息
Notify-->>Store : 记录告警历史
Admin->>Store : 查看告警历史与健康记录
详细组件分析
健康检查与告警处置
- 功能要点
- 健康档案列表、详情、删除、批量操作
- 切换允许编辑、切换状态
- 新增/修改/删除随访记录
- 字段配置子页(用于扩展健康指标)
- 告警用途
- 将“健康检查项”作为告警对象,通过“状态”和“随访”记录处置过程
- 通过字段配置扩展指标维度(如错误率、响应时间)
flowchart TD
Start(["进入健康页面"]) --> List["加载健康档案列表"]
List --> Detail{"查看详情?"}
Detail -- 是 --> View["显示详情与随访"]
Detail -- 否 --> Action{"批量操作?"}
Action -- 是 --> Batch["执行批量动作"]
Action -- 否 --> Field["字段配置"]
Field --> EditField["新增/更新/删除字段"]
View --> Followup["新增/修改/删除随访"]
Followup --> End(["完成"])
Batch --> End
通知渠道:邮件
- 功能要点
- 邮件订阅列表分页展示
- 标记已读并跳转
- 批量删除
- 告警用途
- 可将告警事件投递至邮件订阅列表,或通过邮件服务发送告警邮件
- 结合系统设置保存邮件服务器参数
通知渠道:短信
- 功能要点
- 初始化短信参数并跳转(seed)
- 告警用途
- 为后续短信告警准备参数与环境
- 可在规则评估后调用短信服务发送告警
日志与限流:告警事件基础
- 功能要点
- 自动附加上下文(请求ID、场景)
- 通道选择(channel)
- 每分钟速率限制(防抖/抑制)
- 告警用途
- 将告警事件以结构化日志形式落盘,便于统计与回溯
- 利用速率限制实现“告警抑制”的基础能力
flowchart TD
W["业务写入日志"] --> Ctx["自动补充上下文(request_id, scene)"]
Ctx --> Ch["选择通道(channel)"]
Ch --> Rate["按key计数/限速"]
Rate --> |超限| Drop["丢弃/合并"]
Rate --> |未超限| Save["持久化日志"]
第三方集成:微信公众号
- 功能要点
- 解析微信服务器POST的被动消息(XML)
- 根据事件类型(如关注、点击)分发处理
- 告警用途
- 可将告警事件转发为企业微信/公众号消息,作为通知渠道之一
系统设置:告警参数集中管理
- 功能要点
- 统一持久化系统参数
- 写操作伴随审计日志
- 告警用途
- 集中管理告警阈值、渠道密钥、开关等配置项
依赖关系分析
- 健康检查模块依赖服务层与视图渲染,形成“列表—详情—随访—字段配置”的闭环
- 日志工具被各模块复用,提供上下文、通道与限流能力
- 邮件/短信控制器负责参数与列表管理,为通知渠道提供数据支撑
- 微信公众号服务提供消息收发能力,可作为告警触达渠道
- 系统设置提供参数持久化与审计,保障配置一致性
graph LR
HC["HealthController"] --> HS["健康服务"]
EC["EmailController"] --> ES["邮件服务"]
SC["SmsController"] --> SS["短信参数"]
APP["业务代码"] --> LOG["Log"]
LOG --> STORE["存储"]
WX["WeixinService"] --> WXAPI["微信接口"]
SET["SettingService"] --> CFG["系统配置"]
性能考虑
- 日志写入采用通道与上下文自动注入,减少重复逻辑;注意合理设置最小日志级别,避免调试信息在生产环境放大开销
- 使用每分钟速率限制防止告警风暴;对高频指标建议先做本地聚合再上报
- 健康检查与随访记录属于低频写操作,注意分页与批量操作的并发控制
- 邮件/短信发送应异步化,避免阻塞主流程;必要时增加重试与退避策略
故障排查指南
- 告警未触发
- 检查日志通道与上下文是否正确注入
- 确认速率限制是否过严导致被抑制
- 核对阈值与指标计算逻辑
- 通知未送达
- 邮件:检查订阅列表与邮件服务配置
- 短信:确认短信参数已初始化且可用
- 企业微信/公众号:检查回调地址与签名校验
- 历史记录不可见
- 检查存储表结构与权限
- 确认查询条件与分页参数
- 配置变更未生效
- 检查设置持久化是否成功
- 查看审计日志定位写入失败原因
结论
DouPHP 当前提供了日志、健康检查、邮件/短信管理、微信公众号能力与系统设置持久化等基础设施。通过在这些能力之上叠加“规则评估”与“通知编排”,即可构建完整的告警系统:
- 指标采集:通过日志与业务埋点收集错误率、响应时间等
- 规则评估:实现阈值判断、抑制、聚合与升级
- 通知渠道:邮件、短信、企业微信/公众号
- 记录与统计:健康档案、日志与告警历史
建议在现有基础上优先完善“规则评估”与“通知编排”两个环节,即可快速落地生产可用的告警体系。
附录
告警规则与阈值配置建议
- 错误率超过阈值(例如 5%):基于错误日志计数与总请求量计算比率,达到阈值即触发
- 响应时间超过阈值(例如 3 秒):基于接口耗时指标,超过阈值即触发
- 资源异常:CPU/内存/磁盘/连接池等指标越界时触发
- 业务异常:订单失败率、支付成功率、库存不足等业务指标越界时触发
告警级别定义
- 警告:影响面较小,建议尽快处理
- 严重:影响部分用户或核心链路,需立即处理
- 致命:系统不可用或数据风险,需最高优先级处理
通知渠道配置要点
- 邮件:配置发件服务器、账号与模板;将告警收件人加入订阅列表
- 短信:初始化短信参数,确保额度与签名可用
- 钉钉机器人:通过 Webhook 发送告警消息(需在规则评估后调用)
- 企业微信:通过企业微信 API 或公众号回调发送告警
告警策略
- 抑制:相同告警在短时间内只通知一次(可利用日志速率限制)
- 聚合:将同一时间段内的同类告警合并为一条通知
- 升级:长时间未恢复或级别提升时,升级通知范围(如从值班人员升级到负责人)
自定义告警规则(基于业务指标)
- 指标定义:明确指标口径(如错误率=错误数/总请求数)
- 窗口与频率:设定滑动窗口(如 5 分钟)与评估频率(如每 1 分钟)
- 条件表达式:支持大于、小于、等于、区间等
- 标签与维度:按模块、接口、地域等维度区分告警
告警测试与验证
- 构造故障:模拟超时、错误返回、资源耗尽等
- 回放日志:导入历史日志验证规则命中情况
- 灰度发布:先在非生产环境验证规则与通知
- 回归验证:修复后复测,确保告警恢复正常
告警历史记录与统计分析
- 记录内容:指标值、阈值、级别、渠道、时间、关联请求ID
- 统计维度:按级别、模块、渠道、时间统计告警数量与趋势
- 可视化:结合健康档案与日志导出,生成报表