简介
说明
本文用实例来展示使用SkyWalking追踪dubbo调用。
Skywalking支持很多组件,比如:SpringCloud、Dubbo,MySQL等,SpringCloud的追踪和本文一模一样。我本文用的Dubbo是因为我预研SkyWalking时所在的公司用的是Dubbo。
SkyWalking是一款最强的链路追踪工具,比CAT、Zipkin、Pinpoint都要强。具体对比可以见这篇文章:链路追踪-选型/方案 – 自学精灵。
在使用SkyWalking之前,排查问题会碰到如下痛点:
- 想优化请求响应时间,但不知道哪个地方是最耗时的地方。
- 可以自己打印相应日志,统计时间。但是,这样的代码不能放到生产中的,而且,如果没有一个前端界面看到整个链路的时间,排查起来依然很费时费力
- 服务器打印很多日志,很难分清哪个是自己想要的日志。
- 根据日志找到代码位置比较费力气。
- 因为需要拿日志到代码中去搜,如果日志没有很强的标志性,定位位置很麻烦。
- 服务器线程请求很多,不知道哪些日志是同一个请求的。
用了SkyWalking,以上问题全都是小菜一碟😂。
本文的意图
本文将展示Skywalking与dubbo整合,达到如下目标:
- 在网页端看到整个执行的链路(执行流程、服务节点名、执行时间等)
- 在日志里可以看到traceId。
- 这样可以分辨哪些日志是同一个请求的。
- 代码中手动获取traceId并传递给前端。
- 这样可以通过traceId到SkyWalking的网页端搜索
本项目概述
业务场景
本项目以比较典型的电商的下订单为例。流程如下:
- 用户请求创建订单接口
- 将订单并写入数据库(order服务调用自己本地的service)
- 减去相应商品的库存(order服务通过dubbo调用storage服务)
- 减去相应用户的余额(order服务通过dubbo调用account服务)
项目结构
- account:账户服务。
- common:公共代码。包括:公共配置、全局异常处理、全局响应处理等
- order:订单服务。
- parent:父工程。里边只有pom.xml,用于引入公共的依赖;
- storage:库存服务。(account和order的结构和本服务基本一样)
- storage-api:用于向外部提供dubbo接口。
- storage-service:用于实现dubbo接口;库存的CRUD都在这里。
技术栈版本
本分支:使用skywalking追踪dubbo。
服务的版本
- jdk版本为:1.8.0_201
- 自测:1.8.0_20会导致应用报JVM错误起不来;1.8.0_201及之后的版本没问题
- zookeeper版本为:3.7.0
- skywalking版本为:8.7.0
依赖版本
- spring-boot-starter-parent:2.3.8.RELEASE
- dubbo-spring-boot-starter:2.7.13
- //建议用2.x,本版本为2.x最后一个版本。3.x很多不兼容,例:skywalking-8.7.0追踪会无效
- mybatis-plus-boot-starter:3.4.3.2
- curator-framework:4.2.0 //zookeeper客户端依赖
- curator-x-discovery:4.2.0 //zookeeper客户端服务发现依赖
- apm-toolkit-logback-1.x:8.7.0 //将traceId 记录到logback
- apm-toolkit-trace:8.7.0 //支持在代码中获取skywalking的traceId
实际项目可以改进的地方
- 使用ES存SkyWalking的数据
- 本文为了简单,SkyWalking的数据存储用的是默认的H2,它是存储在内存中的,不用任何配置。
- SkyWalking支持Elasticsearch、MySQL、H2、TiDB。默认是H2,是存到内存。实际项目里边我们一般将其存到H2(磁盘)。
- 可以只保留最近几天的数据。
- 加入告警功能
- 可以监控:平均响应时间、请求成功率 等
- 支持微信、钉钉、自定义 等通知方式
测试
正常流程
访问:http://localhost:9011/order/create/?userId=1&productId=1&count=10&money=100
前端结果(前端获取到traceId )
后端结果(日志中输出了traceId)
链路追踪页面
可以看到整个链路、时间等
首页
查看拓扑图(可以看到流水一样的流动,这就是执行流程)
查看追踪(链路)
随便点击一个链路点,可以查看详细日志
使用traceId在skywalking中搜索链路
日志页面
用鼠标点击即可查看详情
服务监控页面
成功率等
JVM(CPU、内存等)
报错流程
访问:http://localhost:9011/order/createFault/?userId=1&productId=1&count=10&money=100
前端结果(前端获取到traceId )
后端结果(日志中输出了traceId)
链路追踪页面
可以看到整个链路、时间等
首页
查看拓扑图(可以看到流水一样的流动,这是执行流程。且可以发现,在storage就断了)
查看追踪(链路)
随便点击一个链路点,可以查看详细日志
使用traceId在skywalking中搜索链路
搜索之后,我们就可以只查看我们想看的链路啦!
日志页面
用鼠标点击即可查看详情
服务监控页面
成功率等
JVM(CPU、内存等)
请先
!