skywalking指南---skywalking链路追踪

skywalking指南—skywalking链路追踪

前言: skywalking其他指南请点击以下链接跳转
skywalking指南—oap及UI的搭建
skywalking指南—agent日志采集和插件
注: 本文中所有代码,皆可在我的GitHub链接中获取
注: 本文第一部分为创建dubbo项目的步骤,不需要看的可直接跳过,阅读第二部分

文章目录

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

一、创建dubbo项目

  1. 新建Spring Initializr项目作为debbo provider,名称为skywalkingTest1
    skywalking指南---skywalking链路追踪_第1张图片
  2. 建好项目后,会有一个start包,创建maven模块test-dubbo,用来给消费者提供dubbo服务。父项目的pom依赖如下
    apacheDubbo采用3.0.4,由于后续要做日志采集,需要将dubbo-zookeeper的依赖排除。
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0modelVersion>
    <parent>
        <groupId>org.springframework.bootgroupId>
        <artifactId>spring-boot-starter-parentartifactId>
        <version>2.6.1version>
        <relativePath/> 
    parent>
    <groupId>com.examplegroupId>
    <artifactId>skywalkingTest1artifactId>
    <version>0.0.1-SNAPSHOTversion>
    <packaging>pompackaging>

    <modules>
        <module>startmodule>
        <module>test-dubbomodule>
    modules>



    <properties>
        <java.version>1.8java.version>
    properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starterartifactId>
        dependency>

        
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-webartifactId>
        dependency>
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-actuatorartifactId>
        dependency>

        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-testartifactId>
            <scope>testscope>
        dependency>


        
        <dependency>
            <groupId>org.apache.dubbogroupId>
            <artifactId>dubbo-dependencies-zookeeperartifactId>
            <version>3.0.4version>
            <type>pomtype>
            <exclusions>
                <exclusion>
                    <artifactId>log4jartifactId>
                    <groupId>log4jgroupId>
                exclusion>
                <exclusion>
                    <artifactId>slf4j-log4j12artifactId>
                    <groupId>org.slf4jgroupId>
                exclusion>
            exclusions>
        dependency>
        <dependency>
            <groupId>org.apache.dubbogroupId>
            <artifactId>dubbo-spring-boot-starterartifactId>
            <version>3.0.4version>
        dependency>

        <dependency>
            <groupId>org.projectlombokgroupId>
            <artifactId>lombokartifactId>
            <version>RELEASEversion>
            <scope>compilescope>
        dependency>

        
        <dependency>
            <groupId>org.slf4jgroupId>
            <artifactId>slf4j-apiartifactId>
        dependency>
        <dependency>
            <groupId>ch.qos.logbackgroupId>
            <artifactId>logback-coreartifactId>
        dependency>
        <dependency>
            <groupId>ch.qos.logbackgroupId>
            <artifactId>logback-classicartifactId>
        dependency>
    dependencies>

    <build>
        <pluginManagement>
            <plugins>

                <plugin>
                    <groupId>org.apache.maven.pluginsgroupId>
                    <artifactId>maven-compiler-pluginartifactId>
                plugin>
            plugins>
        pluginManagement>
    build>

project>
  1. 期望的链路是 springMVC + dubbo + ibatis,因此需要有dubbo接口及dubbo实现,以及mybatis Mapper(数据库访问可详见具体代码)
    dubbo接口
public interface DubboTest {
    String test();
}

dubbo实现类

@Slf4j
@Service
@DubboService
public class DubboTestImpl implements DubboTest {

    @Resource
    private TestMasterService testMasterService;

    @Override
    public String test() {
        log.info("[测试1][dubbo测试] -- 入参");
        TestMasterDO testMaster = testMasterService.getById(1L);
        String s = JSON.toJSONString(testMaster);
        log.info("[测试1][dubbo测试] -- 出参, {}", s);
        return s;
    }
}
  1. application.properties配置文件添加dubbo配置及mysql配置
# 这里连接池采用了hikari,skywalking追踪中即可看到hikari的链路
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://49.232.139.30:3306/cmsforstudy?useUnicode=true&characterEncoding=utf8&autoReconnect=true&zeroDateTimeBehavior=CONVERT_TO_NULL
spring.datasource.username=root
spring.datasource.password=cloudroot
spring.datasource.type=com.zaxxer.hikari.HikariDataSource
spring.datasource.hikari.connection-timeout=30000
spring.datasource.hikari.connection-test-query=SELECT 1
spring.datasource.hikari.idle-timeout=600000
spring.datasource.hikari.max-lifetime=1800000
spring.datasource.hikari.minimum-idle=5
spring.datasource.hikari.maximum-pool-size=50

# Dubbo Provider
dubbo.application.name=${spring.application.name}
dubbo.application.logger=slf4j
dubbo.registry.address=zookeeper://49.232.139.30:2181
dubbo.protocol.name=dubbo
dubbo.protocol.port=20880
dubbo.protocol.dispatcher=message
dubbo.provider.timeout=3000
dubbo.provider.threadpool=fixed
dubbo.provider.threads=1024
  1. 同样,再新建一个dubbo consumer的项目,名称为名称为skywalkingTest。pom与provider类似,配置文件中不需要mysql的配置,且dubbo的配置为consumer配置;这层提供controller类及dubbo服务调用
dubbo.application.name=${spring.application.name}
dubbo.application.logger=slf4j
dubbo.registry.address=zookeeper://49.232.139.30:2181
dubbo.consumer.timeout=3000
dubbo.consumer.retries=0
dubbo.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("报错啦");
        }
        
    }

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

二、引入skywalking及追踪

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

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

  2. 在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/查看追踪结果
    skywalking指南---skywalking链路追踪_第2张图片

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


三、问题汇总

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

  1. 按文中部署以后,我的dubbo服务链路断裂,是什么原因?
    答:如果apache-dubbo的版本是和文中一样,需要我github项目中plugins里的jar包,放入下载的agent的文件夹下plugins中。链路即可不断裂。原因是agent8.8.0及之前的项目,最高支持的apache-dubbo版本为2.7.0,具体plugins下插件的介绍等,详见指南文章 [链接]
  2. github项目下载不下来/github打不开
    答:可以在评价中发邮件地址,我把包压缩后通过邮件发给你。

你可能感兴趣的:(skywalking,java,java,skywalking)