转转B2C一站式服务告警治理的背后

开发 前端
怎么快速定位异常入手,通过自定义Promtheus的PromQL来聚焦当前业务需关注的异常,另外实现了H5监控大盘页面,提升了在非工作日户外无办公设备问题定位的能力。

1 为什么写这篇文章

转转B2C技术部主要负责商详、商列等BFF层核心页面业务,单接口甚至需要开线程池并行调用二十多个依赖服务,因此依赖的服务以及执行线程池的稳定性也就成为了B2C关注的重点。

那么站在技术视角看调用链路,会发现几个特点:

  • CPU使用率高,线程池大量使用
  • RPC调用多,稳定性指望依赖的服务方
  • 业务调用链路较长,无法精细化控制

本文就针对如何快速定位常见问题,以及后续日志的进一步治理计划来进行讲解。

2 现状与问题

目前转转各个排查问题的工具是统一开放给公司的所有业务使用的,因此每次告警,都需借助统一的平台如服务治理平台、Grafana、Log日志平台等工具进行排查,不完全贴合B2C常见问题排查场景,比如上游调用异常、超时等问题。

B2C技术部告警定位问题会遇到如下几个问题:

  • 线上常见告警问题无法快速识别

线上内置告警无法一眼定位出问题,需要根据业务新增新的Promtheus PromQL展示调用服务超时、异常榜单。

  • 公司统一平台无法快捷跳转

发生紧急问题时,只能从收藏夹中选中公司各个公用平台,然后手动输入服务名称、时间范围、粘贴查询语句等,效率较低。

  • 户外环境下无法定位常见问题

办公设备不在身边时,一旦发生告警,无法像在公司一样方便的打开各个平台进行问题定位。

3 解决方案

上面提出了几个问题,那怎么进行监控治理呢。比如,怎么快速识别出问题的类型?怎么快捷跳转对应的平台?以及在户外如何进行问题定位呢?针对这些问题提出了如下解决方案。

总架构设计图如下

图片

如图可拆分为四部分,执行步骤为:规范梳理及调整 -> 日志收集 -> 日志告警及定位 -> 告警感知

3.1 规范梳理及调整

  1. 日志打印规范化:梳理项目不合理日志打印输出。
  • 日志打印级别优化:如输入密码为空日志级别由error降为warn级别。
  • 该打的日志没打:领券、预约、秒杀成功等关键节点操作需要输出日志。
  • 不该的打日志别打:移除掉定位问题无关的大日志,如打印整个商详返回值。
  1. 类型与阈值规范:规范异常抛出类型及调整业务系统告警阈值。
  • 无效错误堆栈日志屏蔽:如timeoutException异常的堆栈日志打印无效,可直接省略。
  • 告警阈值过于固定:根据各业务调整阈值,达到99.99%系统稳定性告警阈值标准即可。

3.2 基于Apollo自定义日志Agent拦截(日志收集)

图片

日志收集

  1. Apollo配置中心控制异常+日志打印维度配置。
  2. 根据配置屏蔽无用Exception,并上报到Promtheus,以Grafana报表展示。
  3. 通过JavaAgent根据配置的业务、类、方法级别拦截日志打印,伪代码如下。
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;
            }
        }

3.3 自定义B2C业务告警服务(日志告警及定位)

图片

日志告警及定位

  1. 通过在Promtheus编写自定义PromQL,收集服务超时、异常错误。
  2. 公司的Promtheus收集告警日志,并回调B2C业务告警服务接口。
  3. 回调接口通过MQ上报告警消息,B2C告警服务消费处理,组装成业务需要看的数据后,通过企业微信机器人进行通知。
  4. 点击告警前往大盘,会跳转到指定服务、时间范围的监控大盘,含:服务超时榜单、服务异常榜单、全局异常列表以及快捷跳转的工具箱。

其中快捷跳转工具箱设计原理如下

图片

  1. 公司的Log日志平台仅支持小时级别过滤,因此我们改在基于grep过滤,自定义正则表达式过滤出特定时间范围日志。
  • 举例 16:44~17:14分 过滤正则例子: \(16:\(4[4-9]\|5[0-9]\):\)\|\(17:\(0[0-9]\|1[0-4]\):\)

    图片

  1. 针对常规连接则通过类似{serverName}、{startTimeStamp}、{endTimeStamp}、{ip}等占位符替换机制获取快捷跳转链接。

3.4 第一责任人机制(告警感知)

图片

告警感知

  1. 为对应服务绑定第一负责人及其关联的leader联系手机号。
  2. 配置化形式针对指定类型告警如调用依赖服务异常,如果超过一定时间阈值无人跟进则给服务第一负责人IVR(电话语音呼叫)通知。
  3. 如果超时依旧无人处理则往对应leader进行IVR通知。
  4. 如果有人跟进,则下次同类型告警标记为处理人xxx跟进中。

4 应用与效果

4.1 基于自定义告警快速跳转定位

图片

企业微信机器人告警

4.2 快速定位超时、异常服务以及全局抛出异常列表

图片

点击告警后跳转页面

4.3 快捷跳转指定服务、时间所在服务的公司问题定位平台

图片

5 总结

总的来说,这里是从怎么快速定位异常入手,通过自定义Promtheus的PromQL来聚焦当前业务需关注的异常,另外实现了H5监控大盘页面,提升了在非工作日户外无办公设备问题定位的能力。

责任编辑:武晓燕 来源: 转转技术
相关推荐

2022-12-23 09:04:33

字节跳动数据治理架构

2023-05-26 08:37:04

All in ECPES数据

2009-07-30 21:16:29

布线服务电缆架设

2012-04-09 17:36:38

华为智真

2013-10-24 17:35:01

云网络H3C电子政务

2021-06-11 13:56:27

大数据DataWorks数据开发

2017-11-27 11:00:33

2015-07-01 15:03:21

SpeedyCloud

2013-12-17 09:23:14

戴尔软件戴尔云服务OpenStack

2011-07-18 10:12:59

华为新一代智真TP3106

2012-07-12 14:01:48

酒店达人移动应用酒店

2023-10-26 06:59:58

FinOps云原生

2017-05-04 21:30:32

前端异常监控捕获方案

2022-09-16 11:27:46

建设微服务

2009-10-23 09:42:24

2020-10-21 16:01:51

戴尔

2015-10-08 18:58:23

宝德

2015-06-29 14:56:22

京东车管家

2013-12-17 18:18:21

2014-01-13 09:00:54

PythonDjango
点赞
收藏

51CTO技术栈公众号