淘宝现在是一个由很多个应用集群组成的非常复杂的分布式系统。这些应用里面主要有处理用户请求的前端系统和有提供服务的后端系统等。这些应用之间一般有RPC调用和异步消息通讯两种手段,RPC 调用会产生一层调一层的嵌套,一个消息发布出来更会被多个应用消费,另外,应用还会访问分库分表的数据库、缓存、存储等后端,以及调用其他外部系统如支付、物流、机彩票等。
请试想一下,现在淘宝一个买家点击下单按钮所产生的网络请求到达淘宝服务器之后,就会触发淘宝内网数百次的网络调用。这些调用中有哪些出问题会影响这次交易,有哪些步骤会拖慢整个处理流程,双十一的交易高峰需要给应用集群分配多少台机器,这些都是需要考虑的。但是调用环境的复杂度,已经很难用人力去做准确的分析和评估了,这时候 EagleEye 就派上了用场。
EagleEye 系统首页:线上,日常
EagleEye (鹰眼)通过收集和分析在不同的网络调用中间件上的日志埋点,可以得到同一次请求上的各个系统的调用链关系,有助于梳理应用的请求入口与服务的调用来源、依赖关系,同时,也对分析系统调用瓶颈、估算链路容量、快速定位异常有很大帮助。另外,业务方也可以在调用链上添加自己的业务埋点,使网络调用和实际业务内容得到关联。
目前互联网公司类似的产品有:Google Dapper、Twitter Zipkin。
PPT 介绍 (2013-05-07 ATA)
PPT 介绍 (2013-07-23 JavaOne)
PPT 介绍 (2013-08-31 技术沙龙),视频
EagleEye 特色功能
调用链的异常跟踪
下面这幅图,展示了在 mtop 上抛的异常顺便打印的 TraceId,可以在 EagleEye 直接定位到是第 4 层 TAIR 网络请求失败导致的问题。PS:日常环境也同样支持调用链跟踪。
应用关键路径(强弱依赖分析 / 瓶颈分析 / 易故障点)
EagleEye 为应用自动产生的关键路径分析报表,除了可以看到 QPS、秒级峰值 QPS之外,还可以看到强弱依赖关系、分布式调用的瓶颈点、经常出错的依赖等。
突发流量来源跟踪
HSF 服务、DB 有突发的调用高峰,来自什么地方??妈妈再也不用担心我束手无策了,EagleEye 直接给你答案。
入口实时大盘
利用 EagleEye 独有的入口大盘,可以清晰看到某个前端 URL,它直接依赖、间接依赖的所有后端服务的调用情况。某个前端网页变白板时,从 EagleEye 入口大盘也许能看出点端倪。
应用实时依赖情况
应用依赖情况尽收眼底。
服务实时调用大盘
服务再多,心里也有数。
EagleEye 的核心
TraceId
在复杂的分布式系统环境下,EagleEye是一个有广泛用途的调用分析和问题排查工具。与一般的调用信息埋点日志相比,EagleEye埋点的一个显著的不同点在于它的每条日志都有与每次请求关联的上下文ID,我们称为TraceId。通过TraceId,后期的日志处理时可以把一次前端请求在不同服务器记录的调用日志关联起来,重新组合成当时这个请求的调用链。因此,EagleEye不仅可以分析到应用之间的直接调用关系,还可以得到他们的间接调用关系、以及上下游的业务处理信息;对于调用链的底层系统,可以追溯到它的最上层请求来源以及中间经过的所有节点;对于调用链的上层入口,可以收集到它的整棵调用树,从而定位下游系统的处理瓶颈,当下游某个应用有异常发生时,能迅速定位到问题发生的位置。
如上图所示,应用A是接受到来自用户浏览器的Web请求的前端服务器,它是一条调用链的开始端,在TBSession和EagleEyeFilter中都做了EagleEye上下文埋点。请求收到后它会先调用EagleEye StartTrace生成TraceId并放置在当前线程的ThreadLocal,日志埋点请求信息(如URL、SessionId、UserId等)。在请求处理完毕提交相应时,再调用EndTrace清理线程中的EagleEye信息。 Eagleeye简介,什么是eagleeye:http://www.youerw.com/fanwen/lunwen_61918.html