# 分布式链路追踪_skywalking_学习(3)

分布式链路追踪_skywalking_学习(3)

一、分布式链路追踪_skywalking :配置覆盖

1、在学习 分布式链路追踪_skywalking 时,可能每次部署应用都需要复制一份 agent,修改其中的服务名称,以防止冲突,这样显得非常麻烦。可以使用 Skywalking 提供的配置覆盖功能通过启动命令动态指定服务名,这样 agent 只需要部署一份 agent 即可。

2、Skywalking 支持的几种配置方式:

2.1 系统配置(System properties)

使用 skywalking. + 配置文件中的配置名作为系统配置项来进行覆盖。

  • 为什么需要添加前缀 ?

agent 的系统配置和环境与目标应用共享,所以加上前缀可以有效的避免冲突。

  • 案例:通过 如下进行 agent.service_name 的覆盖
-Dskywalking.agent.service_name=skywalking_mysql
2.2 探针配置( Agent options)

Add the properties after the agent path in JVM arguments.

-javaagent:/path/to/skywalking-agent.jar=[option1]=[value1],[option2]=[value2]
  • 案例:通过 如下进行 agent.service_name 的覆盖
-javaagent:/path/to/skywalking-agent.jar=agent.service_name=skywalking_mysql
  • 特殊字符:如果配置中包含分隔符( , 或者 = ) , 就必须使用引号包裹起来
-javaagent:/path/to/skywalking-agent.jar=agent.ignore_suffix='.jpg,.jpeg'
2.3 系统环境变量( System environment variables)
  • 案例:由于 agent.service_name 配置项如下所示:
# The service name in UI
agent.service_name=${SW_AGENT_NAME:Your_ApplicationName}

可以在环境变量中设置 SW_AGENT_NAME 的值来指定服务名。

2.4 覆盖优先级

探针配置 --> 系统配置 --> 系统环境变量 --> 配置文件中的值

所以启动命令可以修改为:

java -javaagent:/usr/local/skywalking/apache-skywalking-apm-bin/agent_mysql/skywalking-agent.jar -Dskywalking.agent.service_name=skywalking_mysql -jar skywalking_mysql.jar &

# 或者:

java -javaagent:/usr/local/skywalking/apache-skywalking-apm-bin/agent/skywalking-agent.jar -Dskywalking.agent.service_name=config_springboot2 -jar skywalking_springboot.jar &

# 或者:

java -javaagent:/usr/local/skywalking/apache-skywalking-apm-bin/agent_mysql/skywalking-agent.jar=agent.service_name=skywalking_mysql -jar skywalking_mysql.jar &

# 或者:

java -javaagent:/usr/local/skywalking/apache-skywalking-apm-bin/agent/skywalking-agent.jar=agent.service_name=config_springboot -jar skywalking_springboot.jar &

3、浏览器地址栏输入:虚拟机IP:8080/sayBoot 进行测试。输出:Hello Boot!

浏览器地址栏输入:虚拟机IP:9010 查看 skywalking 控制台。

在这里插入图片描述

二、分布式链路追踪_skywalking:获取追踪 ID

1、Skywalking 提供 Trace 工具包,用于在追踪链路时进行信息的打印或者获取对应的追踪 ID。

2、创建一个 Spring Boot 工程 skywalking_plugins 并打包成 skywalking_plugins.jar 上传至 /usr/local/skywalking 目录下。进行测试。

2.1 打开 idea,创建 skywalking_plugins 的 maven 工程。
	--> idea --> File 
	--> New --> Project 
	--> Maven 
		Project SDK: ( 1.8(java version "1.8.0_131" ) 
	--> Next 
	--> Groupld : ( djh.it )
		Artifactld : ( skywalking_plugins )
		Version : 1.0-SNAPSHOT
	--> Name: ( skywalking_plugins )
		Location: ( \skywalking_plugins\ )	
	--> Finish
	
2.2 在工程 skywalking_plugins (模块)中的 pom.xml 中导入依赖
<?xml version="1.0" encoding="UTF-8"?>
<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.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.10.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>djh.it</groupId>
    <artifactId>skywalking_plugins</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>skywalking_plugins</name>
    <description>Demo project for Spring Boot</description>

    <properties>
        <java.version>1.8</java.version>
        <skywalking.version>6.5.0</skywalking.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <!--skywalking trace工具包-->
        <dependency>
            <groupId>org.apache.skywalking</groupId>
            <artifactId>apm-toolkit-trace</artifactId>
            <version>${skywalking.version}</version>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

2.3 在工程 skywalking_plugins (模块)中,创建配置文件 application.properties。
## 2024-5-21 创建配置文件 application.properties

server.port=8088
2.4 在工程 skywalking_plugins (模块)中,创建 启动类 SkywalkingPluginsApplication.java。
/**
*  2024-5-21 创建 启动类 SkywalkingPluginsApplication.java
*/
package djh.it.skywalking_plugins;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class SkywalkingPluginsApplication {
    public static void main(String[] args) {
        SpringApplication.run(SkywalkingPluginsApplication.class, args);
    }
}

2.5 在工程 skywalking_plugins (模块)中,创建 Controler 类 FilterController.java。
/**
*  2024-5-21 创建 接口类 FilterController.java
*/
package djh.it.skywalking_plugins.controller;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class FilterController {
    //此接口可以被追踪
    @GetMapping("/include")
    public String include(){
        return "include";
    }

    //此接口不可被追踪
    @GetMapping("/exclude")
    public String exclude(){
        return "exclude";
    }
}

2.6 在工程 skywalking_plugins (模块)中,创建 Controller 类 PluginController.java 进行测试。
/**
*  2024-5-21 创建 Controller 类 PluginController.java
*/
package djh.it.skywalking_plugins.controller;

import org.apache.skywalking.apm.toolkit.trace.ActiveSpan;
import org.apache.skywalking.apm.toolkit.trace.TraceContext;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class PluginController {

    //获取trace id,可以在RocketBot追踪中进行查询
    @GetMapping("/getTraceId")
    public String getTraceId(){
        //使当前链路报错,并且提示报错信息
        ActiveSpan.error(new RuntimeException("Test-Error-Throwable"));
        //打印info信息
        ActiveSpan.info("Test-Info-Msg");
        //打印debug信息
        ActiveSpan.debug("Test-debug-Msg");
        return TraceContext.traceId();
    }
}

3、将 skywalking_plugins.jar 上传至 /usr/local/skywalking 目录下。

4、启动 skywalking_plugins 应用,等待启动成功。

java -javaagent:/usr/local/skywalking/apache-skywalking-apm-bin/agent/skywalking-agent.jar -Dskywalking.agent.service_name=skywalking_plugins -jar skywalking_plugins.jar &

5、调用接口,浏览器地址栏输入:http://虚拟机IP地址:8088/getTraceId

6、此时如果页面显示: 11.28.15753062945970001

在这里插入图片描述

7、可以看到追踪 ID已经打印出来,然后在 RocketBot 上进行搜索。

在这里插入图片描述

三、分布式链路追踪_skywalking :过滤指定的端点

1、在开发过程中,有一些端点(接口)并不需要去进行监控,比如 Swagger 相关的端点。这时可以使用 Skywalking 提供的过滤插件来进行过滤。

2、在 skywalking_plugins 工程中,编写两个接口进行测试:

/**
*  2024-5-21 创建 接口类 FilterController.java
*/
package djh.it.skywalking_plugins.controller;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class FilterController {
    //此接口可以被追踪
    @GetMapping("/include")
    public String include(){
        return "include";
    }

    //此接口不可被追踪
    @GetMapping("/exclude")
    public String exclude(){
        return "exclude";
    }
}

3、将 skywalking_plugins.jar 上传至 /usr/local/skywalking 目录下。

4、将 agent 中的 /agent/optional-plugins/apm-trace-ignore-plugin-6.4.0.jar 插件拷贝到 plugins 目录中。

# 进入目录
cd /usr/local/skywalking/apache-skywalking-apm-bin

# 拷贝可选插件
cp optional-plugins/apm-trace-ignore-plugin-6.4.0.jar plugins/apm-trace-ignore-
plugin-6.4.0.jar

5、启动 skywalking_plugins 应用,等待启动成功。

# 查询 oap 脚本 进程是否在启动状态:
ps -ef | oap

# 杀掉 oap 脚本 进程,才能重启它(如:它的PID是:1478)
kill -9 1478

# 重新启动 oap 脚本:
./oapService.sh 

# 查询 skywalking_plugins 进程是否已经在运行启动状态
ps -ef | grep plugins

# 杀掉 skywalking_plugins 进程,重启它(如:它的PID是:1751)
kill -9 1751

# 启动 skywalking_plugins 应用(切换目录)
cd /usr/local/skywalking/

java -javaagent:/usr/local/skywalking/apache-skywalking-apm-bin/agent/skywalking-agent.jar -Dskywalking.agent.service_name=skywalking_plugins -Dskywalking.trace.ignore_path=/exclude jar skywalking_plugins.jar &

6、参数说明:

这里添加 -Dskywalking.trace.ignore_path=/exclude 参数来标识需要过滤哪些请求,支持 AntPath 表达式:

/path/* , /path/** , /path/?

- ? 匹配任何单字符
- * 匹配0或者任意数量的字符
- ** 匹配0或者更多的目录

7、调用接口,接口地址为:<

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

段子手-168

你的鼓励将是我你的创作最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值