背景
- 测试环境联调低效,异常信息查看不直观;
- 生产环境,同一服务部署在多台机器上,查找错误日志费事费力;
构思
针对问题1:
- 通过统一处理异常来解决,在联调时将所有异常信息透传出去,而生产环境则根据需求隐藏部分错误信息
异常统一处理可以参考 —— Spring异常处理探索与思考
针对问题2:
我决定把异常消息推送到企业微信,这样快捷、直观。
大致为以下几个步骤:
信息搜集
统一异常处理
采集非业务异常的 msg、stackTrace、serviceName、ip信息传输
同步调用?实现简单、但主业务耗时等待
入库处理?消息不易丢、影响数据库性能
mq传输?异步、不丢失,对中间件稳定性有依赖信息推送
限制频率——漏桶算法&令牌桶算法
限制长度——截断+详情持久化
消息比对——同类型的异常10mins推送一次
记录历史——记录每类异常的历史图表消息体结构
token: 身份认证
env: local/dev/test/product
level: debug/info/warning/error/fatal
source:serviceName
ip:
module:
happenTime:
msg:
stack trace:
channelsDB 设计
service – module – target –> token
msg – detail – sendTime – sendDone扩展
做一个 MessagePipe 方便扩展——推送短信、邮件、语音电话。。。
异常比对——是否同一个异常(msg 80% + stack trace Line 1 )
消息统计 ——最近几小时发生状况、最近几天发生状况
服务可用性: zk or eureka应用场景
运维报警
自动化测试结果报告
提测提醒
上线提醒
工作&生活日程安排(上班打卡、下班吃饭、健身、读书、生日、纪念日…)
实战
相关链接
企业微信
官网:
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/客户端邀请成员加入创建群组
- 搜集 corpid 和自建应用的 secret 获取token
- 获取 user 信息 根部门id是1
- 选择合适的 userid, 创建群组
推送消息
根据创建群组时返回的chatid,再加上 token 就可以 推送消息了