宜信智能监控平台建设实践|分享实录 (2)

上图左边可以看到,中间件增强框架位于应用服务器和应用之间,采用了中间件劫持技术,对应用服务器的代码进行了类加载劫持和字节码改写,对上层应用代码无侵入。

右边是监控探针放大之后的架构图,最底层是应用服务器适配层,对互联网常用的开源中间件(如Tomcat、Jetty、SpringBoot)提供了适配支持,对其它服务器可以相应地扩展一个Adapter适配器来进行支持。

在适配层之上,首先提供了一系列通用的扩展点SPI,再基于这些SPI,扩展出了与监控相关的画像收集和指标采集功能;与问题诊断分析工具相关的调用链跟踪、浏览器跟踪、JVM线程分析、堆内存dump执行等功能;与服务治理相关的服务限流/降级以及服务安全管控等功能。此外,还提供了这些功能对Docker和K8s容器环境的适配。

最上层提供了应用对接API以及数据发布API,支持通过HTTP和JMX两种方式来获取探针上的监控数据。

2.3 数据捕获架构

接下来将介绍UAV数据捕获和传输的架构。

宜信智能监控平台建设实践|分享实录

从上图可以看到,监控代理程序Agent数据传输采用了双通道+双心跳的方式:

1)双通道是指HTTP心跳和MQ传输这两条通道:

Http心跳传输通道,用来传输应用环境相关的监控数据,主要包括:容器/节点画像数据和实时监控数据;

MQ传输通道,用来传输应用相关的监控数据,主要包括:应用实时数据,画像数据,日志数据,以及调用链和JVM线程栈等APM数据。MQ数据传输通道上的数据格式采用了统一的Schema,方便后期对数据的转换和处理。

2)双心跳是指不管来自Http通道还是MQ通道的数据,实际上既可以看成监控数据,也可以看成心跳数据。来自每个通道的数据都会到UAV监控后台服务“签到”。两种通信方式意味着更高的可靠性。

Agent通过双通道的方式,将数据传输到UAV监控后台,我们称之为健康管理服务。

健康管理服务会根据数据类型对监控数据进行解析处理,并分别持久化到合适的数据源,比如OpenTSDB存储时序指标数据;ES存储日志、调用链、JVM线程分析等APM数据。

宜信智能监控平台建设实践|分享实录

AppHub是UAV的统一门户,提供了监控数据的集中展示及用户权限的管理功能。用户可以在PC端和移动端登录UAV,获得随时随地的运维体验。

健康管理服务也是采用微服务架构构建的,包括多个微服务,支持集群部署和扩容。

三、UAVStack平台的核心功能及其原理(附案例) 3.1 UAVStack核心功能

宜信智能监控平台建设实践|分享实录

上图展示了目前UAVStack的核心功能,主要包括:应用监控、应用环境监控、服务流、调用链、JVM监控、数据库监控、日志监控、性能告警、浏览器跟踪、配置中心、时空沙盘、上帝罗盘、服务治理、容器生态支持、业务监控、智能运维(AIOps)等。其中:

浏览器监控:用来监控前端Web页面的性能数据;

时空沙盘:提供了对历史监控数据的查询;

上帝罗盘:提供了监控大屏的展示;

智能运维(AIOps)包括:异常检测、根因分析、告警收敛和智能降噪、任务机器人四个方面的能力。

此外,还包括图上未列出的一些运营支持的相关工具,如UAV统一升级中心;UAV监控日报、周报、月报;UAV使用情况统计等。本次分享将重点介绍上图中白色字样的功能。

3.2 应用监控

首先介绍UAV应用监控的核心原理。

3.2.1 核心原理:对应用代码无侵入技术

UAV应用监控的核心原理是:对应用代码无侵入技术。

UAV对应用代码无侵入,应用无需任何改造。

UAV不需要应用使用统一的开发框架。

UAV的代号是“无人机”的缩写,寓意:无人机翱翔蓝天,智能地、透明地完成任务。

其中用到的核心技术主要包括:

中间件劫持技术,含Java Agent探针和字节码改写;

应用/服务画像与监控技术。

3.2.2 无侵入技术:应用/服务画像

宜信智能监控平台建设实践|分享实录

监控探针通过中间件劫持技术实现对应用/服务的自动画像和监控。

中间件劫持就是将我们自己的代码植入到中间件的各种行为中。

中间件劫持的核心是:掌控类加载树,获取优先加载权,植入我们自己的代码。

以应用/服务画像为例:

当Web容器中Standard Context这个类加载时,通过字节码改写植入了相关的画像代码。JEE应用启动时会执行植入的代码,生成应用画像和服务画像;

应用画像主要包括:应用标示、应用名称、应用的URI:http(s)://<本地IP>:<端口>/、应用的类库信息(从加载应用的webapp class loader中获取);

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zyzydz.html