失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > skywalking指南---skywalking链路追踪

skywalking指南---skywalking链路追踪

时间:2024-02-12 18:34:07

相关推荐

skywalking指南---skywalking链路追踪

skywalking指南—skywalking链路追踪

前言: skywalking其他指南请点击以下链接跳转

skywalking指南—oap及UI的搭建

skywalking指南—agent日志采集和插件

注: 本文中所有代码,皆可在我的GitHub链接中获取

注: 本文第一部分为创建dubbo项目的步骤,不需要看的可直接跳过,阅读第二部分

文章目录

skywalking指南---skywalking链路追踪一、创建dubbo项目二、引入skywalking及追踪三、问题汇总

一、创建dubbo项目

新建Spring Initializr项目作为debbo provider,名称为skywalkingTest1

建好项目后,会有一个start包,创建maven模块test-dubbo,用来给消费者提供dubbo服务。父项目的pom依赖如下

apacheDubbo采用3.0.4,由于后续要做日志采集,需要将dubbo-zookeeper的依赖排除。

<project xmlns="/POM/4.0.0" xmlns:xsi="/2001/XMLSchema-instance"xsi:schemaLocation="/POM/4.0.0 /xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.6.1</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.example</groupId><artifactId>skywalkingTest1</artifactId><version>0.0.1-SNAPSHOT</version><packaging>pom</packaging><modules><module>start</module><module>test-dubbo</module></modules><properties><java.version>1.8</java.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId></dependency><!-- Spring Boot --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><!-- Apache Dubbo --><dependency><groupId>org.apache.dubbo</groupId><artifactId>dubbo-dependencies-zookeeper</artifactId><version>3.0.4</version><type>pom</type><exclusions><exclusion><artifactId>log4j</artifactId><groupId>log4j</groupId></exclusion><exclusion><artifactId>slf4j-log4j12</artifactId><groupId>org.slf4j</groupId></exclusion></exclusions></dependency><dependency><groupId>org.apache.dubbo</groupId><artifactId>dubbo-spring-boot-starter</artifactId><version>3.0.4</version></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>RELEASE</version><scope>compile</scope></dependency><!-- Logback --><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-api</artifactId></dependency><dependency><groupId>ch.qos.logback</groupId><artifactId>logback-core</artifactId></dependency><dependency><groupId>ch.qos.logback</groupId><artifactId>logback-classic</artifactId></dependency></dependencies><build><pluginManagement><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId></plugin></plugins></pluginManagement></build></project>

期望的链路是 springMVC + dubbo + ibatis,因此需要有dubbo接口及dubbo实现,以及mybatis Mapper(数据库访问可详见具体代码)

dubbo接口

public interface DubboTest {String test();}

dubbo实现类

@Slf4j@Service@DubboServicepublic class DubboTestImpl implements DubboTest {@Resourceprivate TestMasterService testMasterService;@Overridepublic String test() {log.info("[测试1][dubbo测试] -- 入参");TestMasterDO testMaster = testMasterService.getById(1L);String s = JSON.toJSONString(testMaster);log.info("[测试1][dubbo测试] -- 出参, {}", s);return s;}}

application.properties配置文件添加dubbo配置及mysql配置

# 这里连接池采用了hikari,skywalking追踪中即可看到hikari的链路spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driverspring.datasource.url=jdbc:mysql://49.232.139.30:3306/cmsforstudy?useUnicode=true&characterEncoding=utf8&autoReconnect=true&zeroDateTimeBehavior=CONVERT_TO_NULLspring.datasource.username=rootspring.datasource.password=cloudrootspring.datasource.type=com.zaxxer.hikari.HikariDataSourcespring.datasource.hikari.connection-timeout=30000spring.datasource.hikari.connection-test-query=SELECT 1spring.datasource.hikari.idle-timeout=600000spring.datasource.hikari.max-lifetime=1800000spring.datasource.hikari.minimum-idle=5spring.datasource.hikari.maximum-pool-size=50# Dubbo Providerdubbo.application.name=${spring.application.name}dubbo.application.logger=slf4jdubbo.registry.address=zookeeper://49.232.139.30:2181dubbo.protocol.name=dubbodubbo.protocol.port=20880dubbo.protocol.dispatcher=messagedubbo.provider.timeout=3000dubbo.provider.threadpool=fixeddubbo.provider.threads=1024

同样,再新建一个dubbo consumer的项目,名称为名称为skywalkingTest。pom与provider类似,配置文件中不需要mysql的配置,且dubbo的配置为consumer配置;这层提供controller类及dubbo服务调用

dubbo.application.name=${spring.application.name}dubbo.application.logger=slf4jdubbo.registry.address=zookeeper://49.232.139.30:2181dubbo.consumer.timeout=3000dubbo.consumer.retries=0dubbo.protocol.port=20880

@Slf4j@RestController@RequestMapping(value = "/test")public class TestController {@DubboReference()private DubboTest dubboTest;@GetMapping("/logTest")public String logTest(){String traceId = TraceContext.traceId();log.info("[日志测试][入参] - 单纯想看下有没有trace-id : {}", traceId);try{String test = dubboTest.test();log.info("[日志测试][出参] - {}" , test);return test;}catch(Exception e){log.info("provider错误");throw new RuntimeException("报错啦");}}}

启动provider及consumer,通过apifox/postman访问api接口,确认dubbo项目是否构建成功,服务间调用是否有问题。

二、引入skywalking及追踪

本文旨在完成仪表盘、链路追踪和拓扑图,日志追踪部分请看[链接]

从官网下载agent(本文采用java agent),版本为8.8.0。解压。

在Idea的启动配置中,修改JVM参数,用来启动agent

其中 -javaagent指向为你本地agent的地址

其中 -Dskywalking.agent.service_name为自定义的服务名称

其中 -Dskywalking.collector.backend_service为grpc地址,是oap-server的grpc地址,图中为我服务器的oap-server地址,如果没有看skywalking指南—oap及UI的搭建,可以访问我的oap-server地址,并在http://49.232.139.30:18089/查看追踪结果

启动dubbo项目,通过apifox/postman访问接口,访问skywalking UI查看追踪结果。如图,即为执行的结果,可以看到整个执行链路

三、问题汇总

如果大家有什么问题,可以在评论区提出,大家一起来解决。评论区中出现的问题,会一并记录到问题记录中

按文中部署以后,我的dubbo服务链路断裂,是什么原因?

答:如果apache-dubbo的版本是和文中一样,需要我github项目中plugins里的jar包,放入下载的agent的文件夹下plugins中。链路即可不断裂。原因是agent8.8.0及之前的项目,最高支持的apache-dubbo版本为2.7.0,具体plugins下插件的介绍等,详见指南文章 [链接]github项目下载不下来/github打不开

答:可以在评价中发邮件地址,我把包压缩后通过邮件发给你。

如果觉得《skywalking指南---skywalking链路追踪》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。