方案概述
应用场景
场景1:运维监控场景
客户的痛点:
企业在应用系统交付的过程中,各部门的工作都会遇到一些挑战,例如:
- 运维工作挑战:监控系统多且割裂、微服务治理困难、诊断和定位问题困难、故障影响难以评估。
- 运营工作挑战:IT总被业务部门投诉、运维指标与业务无关、被动应对用户投诉。
- 产品发布挑战:上线回滚频发、发布风险控制不足、变更效果难以评估。
- 研发工作挑战:部门墙导致定责困难、黑盒测试效率低下、考核指标体系不统一。
通过本方案实现的业务效果:
上述的这些挑战亟需一个强大的应用性能监控平台来解决。基调听云应用与微服务系统不仅能够采集应用指标,还能采集操作系统和组件的监控指标,同时结合AI算法,通过调用链追踪技术将前端的用户体验监控、业务指标监控与后端的应用监控、基础设施监控和日志监控等有机的关联在一起,快速帮用户定位问题,保障系统和业务稳定性,提升用户体验和业务表现。
场景2:用户体验监控场景
客户的痛点:
随着数字化转型不断加速,企业、组织、甚至政府部门都在寻求更为高效的方法来互动与沟通。从电脑、智能手机到智能汽车,无处不在的数字触点意味着用户的数字体验已经成为品牌形象、客户忠诚度和业务成功的决定性因素。
对此,企业需要一种方法来实时监控用户与企业的原生应用、小程序或网站之间的互动。
数字体验监控面临的挑战:
- 真实用户行为的不可预测性:由于真实用户的行为模式是多样化的,这使得问题可能在某些特定的用户行为组合下才会出现。而这种组合可能在常规的质量保证或测试中不会被触发。
- 繁杂设备和浏览器:每个设备和浏览器组合可能导致应用的不同表现。这意味着监控和测试工作量的增加。没有广泛的覆盖可能会导致某些用户遇到问题,这可能会导致用户转向竞争对手。
- 定位问题的挑战:当识别到体验问题时,确定问题是否源于客户端、后端服务、运营商还是 CDN 服务可能会很复杂。
- 全球性的挑战:不同地区的网络条件、设备偏好和用户习惯可能会导致应用的不同表现。如果在某些地区体验不佳,企业可能会失去该地区的潜在用户,从而影响全球市场份额。
通过本方案实现的业务效果:
构建覆盖用户访问应用系统时,用户端全方面的体验监控,包含移动APP、Web、小程序等接入方式下的用户体验评估。
全链路追踪:DEM 不仅仅监控前端数据,还会关注后端应用,例如数据库查询速度、API 响应时间等,提供深入的诊断数据,有助于开发和运维团队定位和修复性能问题。
真实用户监控:RUM 能够捕捉真实用户与应用程序(APP和小程序)或网站交互时的交互数据。并关注用户在应用启动、页面加载、交互操作的体验情况,结合用户旅途对用户现场进行还原,辅助研发进行场景回溯并定位故障。
模拟用户监控:使用模拟用户或机器人执行预定任务,例如登录或购买操作,以检测应用程序的性能。同时提供一致的行业基准,以便适用于检测和警告潜在的问题。
融合多个触点:分析用户可能使用的所有数字触点,包括桌面、移动设备、网页、移动APP、智能终端(电视盒子/车机/售货机)等,监控网络的性能指标,如带宽、延迟和数据包丢失。
方案架构
方案通过华为云 RDS for MySQL、分布式消息服务Kafka版等平台实现分布式数据集群处理和服务展示。
- 探针端采集性能数据上传到ECS服务器端,应用处理后推送到分布式Kafka队列;
- 应用数据处理从分布式Kafka取数据进行再次聚合处理,按照不同数据类型分捡;
- 分捡数据分别写入不同类型华为云 RDS数据库;
- 用户通过报表来查询处理后的数据服务。
监测原理
场景1:运维监控场景
本方案通过在被管理对象上安装对应Agent来进行数据采集并上传到统一性能监控平台进行分析呈现。
探针采用两级架构,包括运行在被监控应用上的Agent部分和运行在独立服务器上的Collector部分。其中 Agent 部分负责对应用进行嵌码和原始的数据采集,采集后的信息全部通过局域网直接传输到Collector上,由Collector进行数据的统计和关联,并最终上报到平台的数据中心上。
由于Agent会采集全量的业务和性能数据并实时传输到Collector上,因此Agent与Collector之间必须保证通畅的本地千兆网络连接。Collector支持Failover的高可用,对一组 Agent可以部署多台Collector服务器,当其中个别服务器出现故障无法正常工作时,探针可通过Failover 机制将数据实时传输到其他Collector上,以实现数据采集的高可用。Collector的高可用机制如下图所示:
应用与微服务产品架构包括以下组成部分:
- Agent:应用探针,运行在用户的应用内,负责嵌码和原始数据采集。
- Agent Collector:原始数据采集器,负责从探针接收原始数据并进行关联汇总,并远程连接诸如MySQL、Oracle、Nginx等组件抓取指标。
- DC:数据中心采集器,负责与Agent Collector进行数据交换,包括收集数据和下发指令。
- 数据处理和存储层:DC收集的数据通过此层架构中的组件进行分析和持久化到数据库中。
- Report:系统报表,提供数据查询和配置界面。
- Alert:警报,负责根据配置发送警报通知。
场景2:用户体验监控场景
Android SDK通过编译时的字节码技术或运行时的hook技术,在应用代码中植入性能监测代码,来实时采集性能数据,该过程并不影响用户代码逻辑。
IOS SDK利用objective-c的runtime特性,通过Method Swizzle 技术,可以实现在运行时替换 selector 对应的方法实现,达到给方法挂钩的目的。即嵌入SDK后,在应用程序启动之初,SDK会对相应的方法执行Swizzle 操作,从而在调用一个被Swizzle 过后的函数时,将会首先调用SDK相应的自定义函数,在SDK的函数中会执行一些数据采集的操作,然后SDK的函数会再调回原函数的实现,不会影响原应用程序逻辑。
Web及小程序(MP)体验监控是采用在页面嵌入JS探针的方式获取数据,当用户通过各种设备的浏览器向服务器发起页面请求时,服务器返回嵌入浏览器探针(JS探针)的页面,浏览器对该页面进行资源加载、页面渲染等性能数据进行记录,浏览器探针会将性能数据、错误数据通过HTTP/HTTPS协议上传到数据中心,然后将这些数据进行统计汇总生成可视化图表供客户分析查看。
数字终端体验监控包含移动APP体验监控、Web体验监控、小程序(MP)体验监控三个纬度。
方案优势
本节提供方案优势,基于前文介绍的方案架构,着重结合当前客户面临的痛点,分析本方案的优势是什么,可以为客户带来什么价值。
【运维监控场景】
- 极低的性能消耗
全新设计的探针架构,以极低的额外开销提供详细的业务和性能数据采集。
新的HotSpot热点代码发现机制,同样降低了探针带来的额外开销,并可以极大提高对用户自有代码监控的智能化和精细化程度。
- 业务关联性能
基于全量的性能和业务指标数据的采集技术,可以有效地将业务指标与性能指标进行有机的关联,从而使您能随时掌握应用性能对业务的影响。
- 分级拓扑
面向大规模的分布式的微服务业务系统,全新设计的分级和分层的拓扑图可以更好地展示复杂的服务依赖和业务调用关系,方便用户更快更方便地把握全局。
- 数据纵向关联
除了横向的将前端的用户体验监控、业务指标监控与后端的应用监控、基础设施监控和日志监控等有机的关联在一起,系统还能纵向的将进程、容器、操作系统、基础设施组件、应用等多维度的数据关联在一起,同时结合AI技术,帮助帮用户快速定位问题。
【用户体验监控场景】
- 全链路性能分析
通过深度分析慢请求,RUM提供客户端和服务端的全链路追踪。这不仅包括服务端响应时间和客户端耗时,还涵盖了DNS查询时间、TCP连接时间等关键网络层数据。与APM(Application Performance Management)产品联动,使得从客户端到服务端的性能问题能够被准确定位和分析。
- 全面关注用户真实体验
RUM将应用启动、页面加载和用户操作的整个生命周期纳入监控范围,提升从纯粹的性能监控工具到业务价值导向的用户体验管理平台。这有助于提高业务转化率和用户留存。
- 网络错误快速定位
通过监测应用使用过程中的网络波动,提供网络延时和丢包率关键指标,帮助运维人员迅速识别网络问题,特别是那些由于客户端网络环境问题引起的错误。
- 基于用户体验视角监控用户访问页面的性能
从IT视角转变为用户体验视角,从用户端真实用户体验出发,来监控优化页面的性能,例如减少用户看到的页面FCP时间,加快呈现页面LCP展示等方式提高用户感官体验。
约束与限制
场景1:运维监控场景
平台和能力支持矩阵:
应用语言 |
Windows |
Linux x64 |
Alpine Linux x64 |
Linux ARM64 (AArch64) |
Alpine Linux ARM64 (AArch64) |
---|---|---|---|---|---|
Java |
支持 |
支持 |
支持 |
支持 |
支持 |
.Net |
支持 |
N/A |
N/A |
N/A |
N/A |
.Net Core |
支持 |
支持 |
支持 |
支持 |
支持中 |
PHP |
不支持 |
支持 |
支持 |
支持 |
支持 |
Node.js |
不支持 |
支持 |
支持 |
支持 |
支持 |
Python |
不支持 |
支持 |
支持 |
支持 |
支持 |
Nginx |
不支持 |
支持 |
支持 |
支持 |
支持 |
模块 |
Windows |
Linux x64 |
Alpine Linux x64 |
Linux ARM64 (AArch64) |
Alpine Linux ARM64 (AArch64) |
---|---|---|---|---|---|
操作系统 |
支持 |
支持 |
N/A |
支持 |
N/A |
应用组件 |
支持 |
支持 |
N/A |
支持 |
N/A |
日志 |
不支持 |
支持 |
N/A |
开发中 |
N/A |
容器 |
不支持 |
支持 |
N/A |
支持 |
N/A |
内网监控 |
支持 |
支持 |
N/A |
支持 |
N/A |
IOS |
|
---|---|
网络库 |
IOS SDK版本 |
NSURLConnection |
>= 2.5.0 |
NSURLSession |
>= 2.5.0 |
ASIHTTPRequest |
>= 2.5.0 |
UIWebView |
>= 2.5.0 |
WKWebView |
>= 2.15.9 |
Android |
|
---|---|
网络库 |
Android SDK版本 |
HttpClient |
>= 2.5.0 |
URLConnection |
>= 2.5.0 |
OKHttp |
>= 2.5.0 |
Fulltter |
|
---|---|
网络库 |
Fulltter Plugin版本 |
HttpClient |
>= 1.0.0 |
http |
>= 1.0.0 |
Dio |
>= 1.0.0 |
其他框架 |
||
---|---|---|
框架 |
Android SDK |
IOS SDK |
mPaaS |
>=2.15.7 |
>= 2.15.5 |
TMF |
>=2.15.8 |
>= 2.16.0 |
WEEX |
>=2.15.5 |
>= 2.15.5 |
mPaaS |
>=2.15.7 |
>= 2.15.5 |
TMF |
>=2.15.8 |
>= 2.16.0 |
PC端 |
||
---|---|---|
浏览器 |
支持 |
不支持 |
IE |
9及9以上版本 |
8及8以下版本 |
Edge |
12及12以上版本 |
8及8以下版本 |
Firefox |
7及7以上版本 |
6及6以下版本 |
Chrome |
6及6以上版本 |
5及5以下版本 |
Safari |
8及8以上版本 |
7.1及7.1以下版本 |
Opera |
15及15以上版本 |
12.1及12.1以下版本 |
移动端 |
||
---|---|---|
浏览器 |
支持 |
不支持 |
iOS Safari |
8、9.2及9.2以上版本 |
8.4、7.1及7.1以下版本 |
Opera Mini |
无 |
All |
Android Browser |
4及4以上版本 |
3及3以下版本 |
Blackberry Browser |
10 |
7 |
Opera Mobile |
46 |
12、12.1 |
Chrome for Android |
66 |
除66以外的其他版本 |
Firefox for Android |
60 |
除60以外的其他版本 |
IE Mobile |
10、11 |
除10、11以外的其他版本 |
UC Browser for Android |
11.8 |
除11.8以外的其他版本 |
Samsung Internet |
4、5、6.2 |
除4、5、6.2以外的其他版本 |
QQ Browser |
1.2 |
除1.2以外的其他版本 |
Baidu Browser |
7.12 |
除7.12以外的其他版本 |