本文只是结合公司内部实现方案,对全链路监控方案层面抛砖引玉,不会做深入探讨。

全链路监控含义:针对微服务进行qps、错误率、错误量、线程池监控或者mysql慢查询的等进行监控和上报,便于全链路追踪和问题查询。

实现整体思路都是进行服务拦截、指标上报,利用traceId和spanId的原理进行调用链路绘制。其中常用的两种实现方案,也是笔者公司用的两种方案分别是基于java agent的skywalking,基于aop大理进行功能增强。

方案一:skywalking大家可以自行搜下相应介绍,大致原理是:利用jvm提供的开放接口进行字节码加载后,对字节码进行重写。但请放心我们并不用直接写字节码,目前市面上有的byte buddy进行字节码操作的封装,而skywalking更是强大直接进行了常用agent功能封装,例如前文中说到的功能所需要的agent都有,并且社区比较活跃,agent类型会逐渐丰富起来。若需要定制化,也可以基于byte buddy进行开发。

方案二:针对http微服务利用sevlet filter进行拦截代理。对监控dubbo则利用dubbo提供的spi扩展监控。对mysq慢查监控,可以根据mybatis提供的spi进行监控。

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐