服务画像是按照JEE技术规范进行扫描的,通过扫描注解和部署描述符,提取了服务注册相关的信息,从而生成了服务画像。
3.2.3 无侵入技术:应用/服务监控与应用/服务画像类似,应用/服务监控也是在加载服务器相关类时,通过字节码改写植入相应的监控代码。
以Tomcat为例:
CoyoteAdapter负责整个Tomcat的服务请求;StandardWrapper负责所有Servlet的服务请求。
加载这两个类时,UAV会通过字节码改写植入监控代码。当有实际请求发生时,会调用植入的请求拦截代码和响应回复拦截代码,进行性能指标的采集。
采集到的性能统计指标会缓存到全局计数器中,后续由监控Agent集中采走。
上图所示是应用监控的一个实际展示界面。
可以从应用集群的展示界面,钻取到应用实例的监控展示界面,再钻取到自动画像出来的服务组件/客户端组件和日志组件的展示界面,最后再钻取到服务组件/客户端组件的每个URI的监控指标界面以及日志展示界面。可以从全局钻取到细节,获取想看的监控数据。
此外,我们还提供了服务URL监控报表和客户端URL监控报表。
以服务URL监控报表为例:
可以直观地看到该应用中所有服务URL的访问计数、平均响应时间、累计访问计数、累计错误计数、成功率等指标在选定时间区间内的统计数据。
时间区间支持最近10分钟、最近3小时、今天、昨天、最近7天以及自定义的任意时间区间。
如上图,点击查看某个URL的详情,可以查看该URL在不同时间区间的详细报表。
3.3 应用/服务拓扑:服务流接下来介绍服务流相关的功能。基于应用/服务画像和监控数据,UAV提供了服务流的功能。服务流涵盖了应用拓扑的内容,但提供了比应用拓扑更丰富的运行时状态的展示。
从上图可以看到,当前服务位于中间位置,左边是调用当前服务的服务,右边是当前服务调用的其它第三方服务。
在服务流图上,连线的粗细表示调用量;连线的颜色代表健康状况,以响应时间和错误数为参考:绿色代表健康、黄色代表警告、红色代表严重。比如当连线为粗红线时,代表着有大量请求发生了错误。
如图,我们可以从全局的服务流钻取到某个业务线的服务流,再钻取到该业务线下某个应用集群/实例的服务流,进行全局范围的性能追踪。
3.4 调用链 3.4.1 调用链:全链追踪调用链分为轻调用链、重调用链和方法级调用链。
轻调用链也叫基本调用链。应用无需任何改造,可以运行时启动和停止。获取的数据包括服务/请求URL、服务类+方法、调用类+方法、耗时、结果状态+异常、应用特征、技术栈特征等,性能开销可以忽略;
重调用链是在轻调用链的基础上增加了对请求/响应数据报文的获取,性能开销稍大,依据报文数据量一般会有5%的性能下降;
方法级调用链:如果不开启方法级调用链,则仅在服务的入口和出口生成调用链节点。如果想要在应用内部也生成调用链节点,可以使用方法级调用链。可以通过AppHub界面配置需要跟踪的类和方法。方法级调用链的性能开销较小,具体消耗取决于报文数据量。
3.4.2 调用链:实现原理上图展示的是一个调用链具体的生成流程。调用链节点主要是在服务接口代码处和客户端调用代码处生成。如果开启了方法级调用链,也会在过程方法代码处生成调用链节点。
此外,介绍一下关于调用链上下文的传递。
服务内上下文的传递:同线程的情况下使用了基本ThreadLocal;跨线程(池)的情况下使用了可传递ThreadLocal(TTL)。