文档目录
告警配置

简介

本指南面向在 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
  • 统计维度:按级别、模块、渠道、时间统计告警数量与趋势
  • 可视化:结合健康档案与日志导出,生成报表
添加日期:2026-10-05