分布式调用链追踪能有效地监控服务间的网络延时并可视化微服务中的数据流转。ServiceComb扩展了zipkin的接口提供了服务内部的链路调用信息,能提供更完整的调用链路信息,更容易定位问题和潜在性能问题。html
本文将介绍ServiceComb 提供的分布式调用链追踪能力及使用指导。java
一. 异常场景示例git
咱们将使用ServiceComb的入门案例BMI(体质指数应用),展现ServiceComb的调用链追踪和自定义调用链追踪能力。BMI应用程序包含体质指数计算calculator和服务网关webapp两个服务。github
参见ServiceComb的入门案例BMI指导web
http://servicecomb.apache.org/cn/docs/quick-start/apache
咱们给BMI的体质计算服务增长了异常代码,以下。浏览器
参见BMI程序使用指导1微信
http://servicecomb.apache.org/cn/docs/quick-start/,运行bmi程序,出现以下异常结果。网络
二. 使用Zipkin定位服务级别异常app
以上的BMI示例还未开启调用链追踪,下面咱们将使用ServiceComb提供的分布式调用链追踪能力定位分析BMI应用的哪一个服务发生了异常。
首先须要给BMI程序配置zipkin调用链追踪能力,只需添加两个配置便可。可参考分布式追踪2和Distributed Tracing with ServiceComb and Zipkin3。
1.添加依赖
在 calculator微服务的pom.xml文件中添加依赖项:
在 webapp微服务的pom.xml文件中添加依赖项:
2 .配置跟踪处理程序
在 calculator微服务的microservice.yaml文件中添加分布式追踪的处理链:
到此已配置完毕,您只需执行如下几步便可运行↓↓↓
使用Docker运行Zipkin分布式追踪服务:
重启 calculator 微服务:
重启 webapp 微服务:
打开浏览器访问 http://localhost:9411 ,查看调用链追踪状况,结果以下。能够看到gateway服务在1.7S时就返回给了用户失败结果,而calculator服务却运行了5S的时间,但calculator为蓝色(并不是内部错误),能够肯定calculator 服务超时致使gateway超时异常。
咱们经过在后台服务打印程序调用栈日志能够看到,异常是因为socket读取超时,能够印证咱们在Zipkin中看到的结果。
3、使用自定义追踪功能定位到函数级别
以上已肯定致使超时返回的是calculator服务,在服务应用代码较大时,会较难找到具体出现异常的地点,ServiceComb支持能够在服务内部进行函数级别的调用链打点追踪,这将能够帮助咱们解决这个问题。
配置BMI程序的自定义追踪功能,只需三步便可。
↓↓↓
参考java-chassis使用手册—自定义调用链打点4
https://docs.servicecomb.io/java-chassis/zh_CN/general-development/customized-tracing.html
在体质指数计算器的pom.xml文件中添加依赖项:
在程序入口或者配置处添加 @EnableZipkinTracing 注解
在服务程序中的调用方法处添加 @Span 注解
至此,自定义函数级别打点配置完成。
运行程序,从Zipkin界面以下:
能够看到,调用链中新增长了calculate函数这个Span(上图红圈处),耗时5S。
点开该Span,能够查看该函数的详细信息,咱们能够根据该信息准确查找到对应的源码进行修正。
总结
本例子为了最简化读者理解,使用了仅有两个微服务的BMI用例,在实际的生产环境中,微服务数量繁多将致使问题的定位变得复杂,调用链追踪和自定义追踪能力,能够帮助咱们高效地解决这个问题。
5、参考连接
1.ServiceComb的入门案例BMI指导
http://servicecomb.apache.org/cn/docs/quick-start/
2.分布式追踪
http://servicecomb.apache.org/docs/quick-start-advance/distributed-tracing/
3.Distributed Tracing with ServiceComb and Zipkin
https://servicecomb.apache.org/docs/tracing-with-servicecomb/
4.java-chassis使用手册——自定义调用链打点
https://docs.servicecomb.io/java-chassis/zh_CN/general-development/customized-tracing.html
文末小结
本文向社区读者从使用角度阐述了ServiceComb是如何支持Zipkin的。
咱们也很是欢迎爱好者们向社区提问和贡献代码。
下章咱们将介绍ServiceComb+Zipkin源码解读篇。
若是在阅读代码时有任何疑问想交流,欢迎扫码加入进微信群。
期待志同道合的朋友们加入
ServiceComb的大门为大家敞开~
用心作开源,不忘初衷
前期阅读:
[学习微服务-第3天] ServiceComb内置高性能网关服务
[天天学习微服务-源码解读] ServiceComb+SpringCloud Zuul
[天天学习微服务-网关]ServiceComb+SpringCloud Zuul
------------------------------------------------
了解更多信息请访问:
官方网站 http://servicecomb.apache.org/
Github代码仓库https://github.com/apache?q=ServiceComb