所有分类
  • 所有分类
  • 未分类

SkyWalking-整合dubbo-使用/教程/实例

简介

说明

本文用实例来展示使用SkyWalking追踪dubbo调用。

Skywalking支持很多组件,比如:SpringCloud、Dubbo,MySQL等,SpringCloud的追踪和本文一模一样。我本文用的Dubbo是因为我预研SkyWalking时所在的公司用的是Dubbo。

SkyWalking是一款最强的链路追踪工具,比CAT、Zipkin、Pinpoint都要强。具体对比可以见这篇文章:链路追踪-选型/方案 – 自学精灵

在使用SkyWalking之前,排查问题会碰到如下痛点:

  1. 想优化请求响应时间,但不知道哪个地方是最耗时的地方。
    1. 可以自己打印相应日志,统计时间。但是,这样的代码不能放到生产中的,而且,如果没有一个前端界面看到整个链路的时间,排查起来依然很费时费力
  2. 服务器打印很多日志,很难分清哪个是自己想要的日志。
  3. 根据日志找到代码位置比较费力气。
    1. 因为需要拿日志到代码中去搜,如果日志没有很强的标志性,定位位置很麻烦。
  4. 服务器线程请求很多,不知道哪些日志是同一个请求的。

用了SkyWalking,以上问题全都是小菜一碟😂。

本文的意图 

本文将展示Skywalking与dubbo整合,达到如下目标:

  1. 在网页端看到整个执行的链路(执行流程、服务节点名、执行时间等)
  2. 在日志里可以看到traceId。
    1. 这样可以分辨哪些日志是同一个请求的。
  3. 代码中手动获取traceId并传递给前端。
    1. 这样可以通过traceId到SkyWalking的网页端搜索

本项目概述

业务场景

本项目以比较典型的电商的下订单为例。流程如下:

  1. 用户请求创建订单接口
  2. 将订单并写入数据库(order服务调用自己本地的service)
  3. 减去相应商品的库存(order服务通过dubbo调用storage服务)
  4. 减去相应用户的余额(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

实际项目可以改进的地方 

  1. 使用ES存SkyWalking的数据
    1. 本文为了简单,SkyWalking的数据存储用的是默认的H2,它是存储在内存中的,不用任何配置。
    2. SkyWalking支持Elasticsearch、MySQL、H2、TiDB。默认是H2,是存到内存。实际项目里边我们一般将其存到H2(磁盘)。
    3. 可以只保留最近几天的数据。
  2. 加入告警功能
    1. 可以监控:平均响应时间、请求成功率 等
    2. 支持微信、钉钉、自定义 等通知方式

测试

正常流程

访问:http://localhost:9011/order/create/?userId=1&productId=1&count=10&money=100

前端结果(前端获取到traceId )

后端结果(日志中输出了traceId)

链路追踪页面

可以看到整个链路、时间等

访问:http://localhost:8080/

首页

查看拓扑图(可以看到流水一样的流动,这就是执行流程)

查看追踪(链路)

随便点击一个链路点,可以查看详细日志

使用traceId在skywalking中搜索链路 

日志页面

用鼠标点击即可查看详情

服务监控页面

成功率等

JVM(CPU、内存等)

报错流程

访问:http://localhost:9011/order/createFault/?userId=1&productId=1&count=10&money=100

前端结果(前端获取到traceId )

后端结果(日志中输出了traceId)

链路追踪页面

可以看到整个链路、时间等

访问:http://localhost:8080/

首页

查看拓扑图(可以看到流水一样的流动,这是执行流程。且可以发现,在storage就断了)

查看追踪(链路)

随便点击一个链路点,可以查看详细日志

使用traceId在skywalking中搜索链路 

搜索之后,我们就可以只查看我们想看的链路啦!

日志页面

用鼠标点击即可查看详情

服务监控页面

成功率等

JVM(CPU、内存等)

代码

此内容仅限VIP查看,请先
0

评论0

请先

显示验证码
没有账号?注册  忘记密码?

社交账号快速登录