前端异常监控系统建设
如果无法正常显示,请先停止浏览器的去广告插件。
1. 前端异常监控系统建设
美团基础技术部
2. 个人介绍
干⻩标
美团-基础技术部-前端技术中心
前端监控系统
前端故障运营
3. CONTENTS 目录
美团前端监控平台介绍
前端异常采集与定位
告警系统建设与实践
4. 业务现状与痛点
无法下单
⻚面白屏
用户
xxxx
业务快速迭代
开发者
• 很难第一时间发现问题
• 故障影响范围难以评估
• 缺少异常相关报错日志
• 本地排查异常不易复现
运行环境多样化
应用无监控
5. 前端异常监控核心能力分析
异常采集及可视分析
Logs
Traces
Metrics
故障告警及定位处理
发现
核心目标
流转
主动发现
定位
跟踪
快速定位
归档
6. 前端异常监控系统建设的挑战
全面监控前端各种异常类型
适配前端多样化的运行环境
支持业务多样化监控需求
提升告警业务覆盖率和准确率
提供快速定位故障工具
7. 美团前端监控产品架构
业
务
线
解
决
方
案
美团平台
点评
基础研发
优选
业务解决方案
静态资源容灾方案
到家
到店
快驴
买菜
链路追查方案
全链路分析方案
灰度监控解决方案
金融
….
指标运营方案
CDN可用性方案
秒开率运营方案
故障运营方案
异常监控与故障处理
系
统
能
力
采集
发现
流转
定位
性能日志 请求日志 阈值告警 智能告警 趋势分析 分布分析 对比分析 多维报表分析 慢访问分析 工单中心
异常日志 业务日志 周期报告 组织分析 代码反解 上下文日志 链路分析 多维根因定位 异常知识 事故流转
环
境 浏览器 动态容器 小程序(美团/微信)
开
放
能
力 服务接入 Open API 数仓开放
信
息
处
理 监控探针(agent) 实时/离线数仓 数据预清洗
8. 前端监控产品运营情况
活跃前端项目数
前端项目总数
~10k
~3k
个
消息总量
~1000B
/天
个
异常上报数
~500M
监控粒度 告警时延
分钟级 <10
秒
/天
9. CONTENTS 目录
美团前端监控平台介绍 • 前端异常类型
前端异常采集与定位 • 请求异常采集方法
告警系统建设与实践 • KPI 多维根因定位
• JS 异常采集方法
• Sourcemap JS 代码反解
10. 前端异常采集与定位-前端异常类型
请求异常
类别
采集
静态资源异常
JS运行时异常
API 异常
XMLHttpRequest
Fetch
PerformanceEntrites
定位
CDN 域名分析
MTraceId
链路追踪分析
JS 异常 自定义异常
onerror console.error
unhandlerejection
代码反解
多维报表分析
多维根因分析
上下文日志
业务异常
环境异常
小程序框架
环境异常同步
容器框架
业务指标异常
自定义指标
11. 前端异常采集与定位-请求异常采集方法
请求异常细分
Fetch
静态资源
API
Ajax
1. 静态资源异常采集
成功加载采样 10%,触发异常自定义采样率
静态资源异常细分:
IMAGE_SIZE_EXCEED
IMAGE_DURATION_EXCEED
RESOURCE_ERROR: target.nodeName + URL
12. 前端异常采集与定位-请求异常采集方法
2. Ajax 请求异常采集原理
Open
setStartTime
setMtraceId
Send
Parse
Report
addEventListener
load/error/abort/timeout
onreadystatechange
readyState: 4
Ajax异常细分: TIMEOUT_AJAX
INVALID_AJAX
AJAX_ERROR: URL
请求信息统一数据模型
13. 前端异常采集与定位-请求常⻅分析方法
分析目标:
哪个时间? 哪个⻚面? 的哪个请求? 在 xx 容器/ xx 运营商/ xx 省份… 出现了 xx 状态码异常
1. 趋势分析
2. 分布分析
3. 多维报表分析
14. 前端异常采集与定位-KPI 多维根因定位
网络成功率
异常 KPI 指标
单一维度分析
两维组合分析
N 维组合分析
地区 运营商 容器
北京
上海 电信
联通 chrome
safari
地区,运营商 地区,容器 运营商,容器
北京,电信
北京,联通
上海,电信
上海,联通 北京,chrome
北京,safari
上海,chrome
上海,safari 电信,chrome
电信,safari
联通,chrome
联通,chrome
…….
结论:多维下钻分析实际上是寻找导致总量突变的根因元素集合,可归结为以搜索问题
下钻分析
15. 前端异常采集与定位-KPI 多维根因定位
Adtributor 算法
计算所有元素的 S 值
按S值降序排列每个维度的元素
Adtributor 原理
计算EP值
筛选可疑元素加入维度根因集合
计算维度S值及EP值
筛选可疑维度加入根因集合
S 值:Surprise,惊奇性,描述所有维度下所有元素的
真实值和预测值的差异
EP 值:Explanatory power,解释力,元素在 KPI
变化总量中的占比
TEEP 阈值:每个元素的 EP 阈值,小于 TEEP 则忽略
根因集合按照S值降序排列输出Top3
TEP 阈值:每个维度的 EP 阈值,小于 TEEP 则忽略
16. 前端异常采集与定位-KPI 多维根因定位
Recursive Adtributor 算法
多维根因定位示例
Recursive Adtributor 原理
17. 前端异常采集与定位-JS 异常采集方法
JS 异常采集原理
JS 异常数据模型
JS 异常监听方法
18. 前端异常采集与定位-Sourcemap JS 代码反解
JS 异常定位 Case 分析
异常详情⻚
异常原始堆栈
19. 前端异常采集与定位-Sourcemap JS 代码反解
JS 堆栈反解工具设计
微信代码服务器
1 上传代码
2 拉取SourceMap文件
CI/CD
微信小程序
Web
RN
JS 堆栈反解示例
3 存储SourceMap文件
S3
前端监控系统
4 请求反解
监控平台 S3 Bucket
其它 S3 Bucket
5 拉取SourceMap文件
JS 堆栈反解流程
6 返回反解结果
代码反解服务
异常详情分析⻚面
20. CONTENTS 目录
美团前端监控平台介绍
前端异常采集与分析
告警系统建设与实践
• 前端故障告警问题分析
• 异常清洗去除告警噪声
• 灰度小流量故障监控
• 如何提升告警覆盖率
21. 告警系统建设与实践-前端告警问题分析
• 异常噪声大,影响告警准确性
由于前端技术特点,JS相对而言容易执行错误,但大部分
错误并不会导致⻚面出现问题,甚至对用户无感知。但这
些异常同样会被探针捕获上报,导致真正影响用户体验的
重要异常被淹没。
• 小流量难监控,易出故障
不同版本不同渠道,前端应用的代码和运行环境,甚至业
务逻辑会存在较大差异。小流量小的异常容易被整体异常
淹没,导致小流量出现故障时,很难被告警系统发现。
• 告警阈值配置难决策
对初次使用告警的用户而言,最大问题是不知如何配置告
警策略的阈值。特别是对于需要使用计算函数的告警,如
环比、连续波动百分比等函数进行二次加工。
• 前端告警覆盖率低
提升告警覆盖率是进行前端应用稳定性监控的前提,提升
前端应用开发者的监控意识,以及监控平台的可靠性和易
用性是关键。
22. 告警系统建设与实践-异常清洗去除告警噪声
Case 分享:脚本资源加载失败导致告警频繁
告警消息
异常详情
23. 告警系统建设与实践-异常清洗去除告警噪声
异常清洗方案
1. 配置探针重新发布
默认清洗规则
自定义清洗列表
探针 Agent
3. 落库前置清洗
2. 动态下发白名单
异常上报钩子
动态下发白名单
默认清洗规则
自定义清洗列表
异常上报钩子
告警
探针 Agent
异常清洗
可视分析
探针 Agent
• 发布成本高 • API 请求影响性能
• 生效不及时 • 下发之前异常无法清洗
• 系统集成,管理方便,生效及时
24. 告警系统建设与实践-异常清洗去除告警噪声
异常清洗产品
异常清洗产品
25. 告警系统建设与实践-灰度小流量故障监控
在今年已经发生多起小流量故障没有及时发现引起的资损事故
小流量为什么难以监控,且容易出故障?
• 异常噪声无法完全去除,存在是必然
• 灰度流量重要异常被整体异常淹没
灰度异常淹没示意图
全流量
灰度流量
普通异常
重要异常
26. 告警系统建设与实践-灰度小流量故障监控
常⻅小流量
客户端灰度发版
前端应用灰度发布
v11.14.400
90%
前端应用
v1.0.0
10%
v1.0.1
业务渠道灰度投放
90%
前端应用
90%
优选微信小程序渠道
10%
美团微信小程序渠道
v1.0.0
前端应用
v11.14.401
灰度10%
10%
v1.0.0
27. 告警系统建设与实践-灰度小流量故障监控
如何解决灰度小流量故障监控
告警策略细化
丰富告警方式
• 按应用灰度版本监控告警 • 常规阈值告警
• 按客户端灰度版本告警 • 48小时首现异常告警
• 按渠道维度灰度告警
hook 更新灰度版本
自动注入 Version
更新告警策略(版本)
采集更新灰度版本
监控分析&告警
灰度版本监控原理
28. 告警系统建设与实践-灰度小流量故障监控
灰度版本监控
V1.0.0
S3
version
3
应用客户端
Logs-Version
7
1
5
V1.0.0
6
告警
V1.0.1
4
2
灰度网关
Nginx
监控平台
V1.0.0
version
V1.0.1
V1.0.1
灰度版本监控技术架构
分析
29. 告警系统建设与实践-灰度小流量故障监控
48小时异常首现
Timestamp 1637843373994
故障大部分都是由变更导致,变更引发的故障往往会引入新异常!
error_name_3
error_name_4
error_name_5
error_name_1
error_name_6
…….
Timestamp 1637843673994
error_name_1
error_name_1
error_name_3
error_name_4
48小时异常首现示意图
error_name_2
原理: 对比过去48小时的异常,如果不存在则定义该异常为增量异常
error_name_5
…….
Timestamp 1637843673994
error_name_1
error_name_2
error_name_3
error_name_4
…….
48小时异常首现分析
30. 告警系统建设与实践-灰度小流量故障监控
48小时异常首现告警示例
告警条件
建议
• 高级别告警,通过其它(且)告警条件,提升告警准确率,避免误告和告警频繁
• 低级别告警,利用异常工单能力,治理常⻅异常,降低异常噪声
告警消息
31. 告警系统建设与实践-如何提升告警覆盖率
问题
方案
项目众多告警配置成本高 分层级告警&告警模板
告警策略阈值配置难决策 告警水位线&告警模拟
缺少告警意识或实践经验 故障运营&最佳实践
32. 告警系统建设与实践-如何提升告警覆盖率
分层级告警&模板告警
• 统一上报前端指标(如RN容器)
组织-1
组织-1-1
组织-1-2
• 统一设置告警策略
项目A
• 允许业务自定义告警策略
组织-1-3
组织-1-3-1
项目 B
模板
组织-1-3-2
分层级告警策略下发
项目 C
告警模板复制
33. 告警系统建设与实践-如何提升告警覆盖率
告警水位线&告警模拟
34. Q&A
35. 更多技术干货
欢迎关注“美团技术团队”