1 为什么写这篇文章
2 现状与问题
3 解决方案
3.1 规范梳理及调整
3.2 基于Apollo自定义日志Agent拦截(日志收集)
3.3 自定义B2C业务告警服务(日志告警及定位)
3.4 第一责任人机制(告警感知)
4 应用与效果
4.1 基于自定义告警快速跳转定位
4.2 快速定位超时、异常服务以及全局抛出异常列表
4.3 快捷跳转指定服务、时间所在服务的公司问题定位平台
5 总结
6 致谢
转转B2C技术部主要负责商详、商列等BFF层核心页面业务,单接口甚至需要开线程池并行调用二十多个依赖服务,因此依赖的服务以及执行线程池的稳定性也就成为了B2C关注的重点。
那么站在技术视角看调用链路,会发现几个特点:
本文就针对如何快速定位常见问题,以及后续日志的进一步治理计划来进行讲解。
目前转转各个排查问题的工具是统一开放给公司的所有业务使用的,因此每次告警,都需借助统一的平台如服务治理平台、Grafana、Log日志平台等工具进行排查,不完全贴合B2C常见问题排查场景,比如上游调用异常、超时等问题。
B2C技术部告警定位问题会遇到如下几个问题:
线上内置告警无法一眼定位出问题,需要根据业务新增新的Promtheus PromQL展示调用服务超时、异常榜单。
发生紧急问题时,只能从收藏夹中选中公司各个公用平台,然后手动输入服务名称、时间范围、粘贴查询语句等,效率较低。
办公设备不在身边时,一旦发生告警,无法像在公司一样方便的打开各个平台进行问题定位。
上面提出了几个问题,那怎么进行监控治理呢。比如,怎么快速识别出问题的类型?怎么快捷跳转对应的平台?以及在户外如何进行问题定位呢?针对这些问题提出了如下解决方案。
总架构设计图如下
如图可拆分为四部分,执行步骤为:规范梳理及调整 -> 日志收集 -> 日志告警及定位 -> 告警感知
日志打印规范化
:梳理项目不合理日志打印输出。输入密码为空
日志级别由error降为warn级别。类型与阈值规范
:规范异常抛出类型及调整业务系统告警阈值。 public MethodVisitor visitMethod(int access, String name, String descriptor, String signature, String[] exceptions) {
MethodVisitor methodVisitor = super.visitMethod(access, name, descriptor, signature, exceptions);
if (STR_V.equals(descriptor) && infoLevel.contains(name)) {
// 此处省略。。拦截日志处理逻辑----------
return new LogMethodInsnVisitor(methodVisitor, className, name);
} else {
return methodVisitor;
}
}
服务超时榜单
、服务异常榜单
、全局异常列表
以及快捷跳转的工具箱
。其中快捷跳转工具箱设计原理如下
\(16:\(4[4-9]\|5[0-9]\):\)\|\(17:\(0[0-9]\|1[0-4]\):\)
处理人xxx跟进中
。总的来说,这里是从怎么快速定位异常入手,通过自定义Promtheus的PromQL来聚焦当前业务需关注的异常,另外实现了H5监控大盘页面,提升了在非工作日户外无办公设备问题定位的能力。
在此感谢搭档@刘匡迪、@李正干同学及其他B2C后端技术同学的的付出,以及感谢架构团队@赵浩、@肖航等的大力支持。此外还感谢FE@李建鹏对于前端H5开发的帮助。
关于作者
李迪山,转转B2C技术部后端工程师。热衷于前沿技术学习,热爱分享,热爱编程。
想了解更多转转公司的业务实践,欢迎点击关注下方公众号: