Dubbo 全链路监控技术实践

序言:

Dubbo是一款高性能的Java RPC框架。其前身是阿里巴巴公司开源的一款高性能、轻量级的开源Java RPC框架,它的设计初衷是为了方便服务之间的远程调用,是微服务体系构建的重要基石。

Dubbo是国内开源的专门用于微服务之间通信的框架,背靠大厂有技术保障,有活跃的开源社区,技术成熟稳定,依赖组件少,相对于国外的比如Spring-Cloud来说上手更容易,因此广泛的被国内各行各业使用,比如电商、证券、银行等等。

微服务是当前企业服务的最通用架构,相对于传统的单体大服务有诸多优势,但同样使得服务关联关系变得更加复杂,此时一套分布式全链路追踪的可观测系统工具变得越来越重要,而Dubbo的全链路监控是监控系统的重要一环。

▐  技术方案

  全链路监控是由一条业务链路上每个组件的调用元数据(span)通过一个相同的唯一标识(traceId)串联而成,通过这些元数据能直观看到业务链路的走向及明细信息。针对Dubbo调用如何构建元数据(span),是每套可观测系统都需要解决的问题。

图片

Databuff APM模块 使用ASM字节码修改技术,对Dubbo的MonitorFilter Class做了代码增强,修改了其核心方法的字节码,在其前后增强了APM的框架代码,这样客户端和服务端在其执行核心方法之前都能执行相应的处理逻辑:

  • Client

    • before:生成调用span,将APM数据注入到Request上下文

    • after:从Response上下文获取APM数据,填充到span中,结束span

  • Server

    • before:生成span,从Request上下文提取APM数据,注入到span以及线程上下文中

    • after:将APM数据写入Response上下文,结束span

▐  呈现效果

图片

图片

客户端和服务端都会生成一个span,每个span都会记录当前服务的ip域名,服务名称,线程名称,接口#方法名称,客户端还是服务端,调用耗时,是否报错等等。

Dubbo调用可能有很多异常情况,大部分都能通过监控界面看到,比如远程调用超时:

图片

从上图能看到服务端的执行时间超过了客户端的等待时间,客户端等不了了抛出异常(能看到异常堆栈信息),但服务端最终还是执行成功了,有上报的span,也能看到服务端的span的时间条很长,远远超过客户端的span时间条。

通过span信息能很直观监控dubbo调用,当然也能很直观看到当前业务链路监控信息,这就是可观测系统的意义所在。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值