告警设计+消息推送

版权声明:本文为博主原创文章,转载请注明出处。 https://blog.csdn.net/fgszdgbzdb/article/details/82690984

背景

  1. 测试环境联调低效,异常信息查看不直观;
  2. 生产环境,同一服务部署在多台机器上,查找错误日志费事费力;

构思

针对问题1:
- 通过统一处理异常来解决,在联调时将所有异常信息透传出去,而生产环境则根据需求隐藏部分错误信息
异常统一处理可以参考 —— Spring异常处理探索与思考

针对问题2:
我决定把异常消息推送到企业微信,这样快捷、直观。
大致为以下几个步骤:

  1. 信息搜集

    统一异常处理
    采集非业务异常的 msg、stackTrace、serviceName、ip

  2. 信息传输

    同步调用?实现简单、但主业务耗时等待
    入库处理?消息不易丢、影响数据库性能
    mq传输?异步、不丢失,对中间件稳定性有依赖

  3. 信息推送

    限制频率——漏桶算法&令牌桶算法
    限制长度——截断+详情持久化
    消息比对——同类型的异常10mins推送一次
    记录历史——记录每类异常的历史图表

  4. 消息体结构

    token: 身份认证
    env: local/dev/test/product
    level: debug/info/warning/error/fatal
    source:serviceName
    ip:
    module:
    happenTime:
    msg:
    stack trace:
    channels

  5. DB 设计

    service – module – target –> token
    msg – detail – sendTime – sendDone

  6. 扩展

    做一个 MessagePipe 方便扩展——推送短信、邮件、语音电话。。。
    异常比对——是否同一个异常(msg 80% + stack trace Line 1 )
    消息统计 ——最近几小时发生状况、最近几天发生状况
    服务可用性: zk or eureka

  7. 应用场景

    运维报警
    自动化测试结果报告
    提测提醒
    上线提醒
    工作&生活日程安排(上班打卡、下班吃饭、健身、读书、生日、纪念日…)


实战


相关链接

企业微信
官网:
https://work.weixin.qq.com/

open API :
https://work.weixin.qq.com/api/doc#13308

接口调试:
http://work.weixin.qq.com/api/devtools/devtool.php


实现消息推送到企业微信群聊
共分以下5步:

  • 注册账号
  • 创建应用
  • 添加成员
  • 创建群组
  • 推送消息

下面逐一展开叙述

  • 注册账号
    在企业微信官网注册账号,有微信账号即可,可不必进行企业认证

  • 创建应用
    在 “应用与小程序中–自建应用”
    填写信息,选择可见范围是根部门(API调用有认证,所以可见范围必须是根部门)

  • 添加成员
    通过微信/企业微信/PC/客户端邀请成员加入

  • 创建群组

    1. 搜集 corpid 和自建应用的 secret 获取token
    2. 获取 user 信息 根部门id是1
    3. 选择合适的 userid, 创建群组
  • 推送消息
    根据创建群组时返回的chatid,再加上 token 就可以 推送消息


猜你喜欢

转载自blog.csdn.net/fgszdgbzdb/article/details/82690984