快速学习-Skywalking常用插件

时间:2022-07-22
本文章向大家介绍快速学习-Skywalking常用插件,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

3.3 Skywalking常用插件

3.3.1 配置覆盖

在之前的案例中,我们每次部署应用都需要复制一份agent,修改其中的服务名称,这样显得非常麻 烦。可以使用Skywalking提供的配置覆盖功能通过启动命令动态指定服务名,这样agent只需要部署一 份即可。Skywalking支持的几种配置方式:

系统配置(System properties)

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

  • 为什么需要添加前缀? agent的系统配置和环境与目标应用共享,所以加上前缀可以有效的避免冲突。
  • 案例 通过 如下进行 agent.service_name 的覆盖
-Dskywalking.agent.service_name=skywalking_mysql

探针配置(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'

系统环境变量(System environment variables) 案例

由于agent.service_name配置项如下所示:

# The service name in UI 
agent.service_name=${SW_AGENT_NAME:Your_ApplicationName}

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

覆盖优先级 探针配置 > 系统配置 >系统环境变量 > 配置文件中的值

所以我们的启动命令可以修改为

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_mysql/skywalking-agent.jar=agent.service_name=skywalking_mysql -jar skywalking_mysql.jar &

3.3.2 获取追踪ID

Skywalking提供我们Trace工具包,用于在追踪链路时进行信息的打印或者获取对应的追踪ID。我们使 用Spring Boot编写一个案例进行测试。

pom文件

<?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>com.sf.saas</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>

添加了skywalking trace的工具包, 该工具包版本需要与skywalking版本相同, 这里采用6.5.0

<!--skywalking trace工具包--> 
<dependency> 
    <groupId>org.apache.skywalking</groupId> 
    <artifactId>apm-toolkit-trace</artifactId> 
    <version>${skywalking.version}</version> 
</dependency>

PluginController

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();
    }
}

使用TraceContext.traceId()可以打印出当前追踪的ID,方便在RocketBot中进行搜索。

ActiveSpan提供了三个方法进行信息的打印

  • error方法会将本次调用变为失败状态,同时可以打印对应的堆栈信息和错误提示。
  • info方法打印info级别的信息。
  • debug方法打印debug级别的信息。

部署方式

  1. 将上述代码打包上传至 /usr/local/skywalking目录下。
  2. 启动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 &
  1. 调用接口,接口地址为:http://虚拟机IP地址:8088/getTraceId
  2. 此时如果页面显示

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

可以搜索到对应的追踪记录,但是显示调用是失败的,这是因为使用了ActiveSpan.error方法。点开追 踪的详细信息:

异常的信息包含了以下几个部分:

  1. 事件类型为error
  2. 调用方法时传递的异常类型RuntimeException
  3. 调用方法时传递的异常信息Test-Error-Throwable
  4. 异常堆栈

通过上述内容,我们可以根据业务来定制调用异常时的详细信息

除了异常信息之外,还有info信息和debug信息也都会被打印

3.3.3 过滤指定的端点

在开发过程中,有一些端点(接口)并不需要去进行监控, 比如Swagger相关的端点。这个时候我们就 可以使用Skywalking提供的过滤插件来进行过滤。 在skywalking_plugins中编写两个接口进行测试:

FilterController

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";
    }
}

部署方式

  1. 将上述代码打包上传至 /usr/local/skywalking目录下。
  2. 将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

3.启动skywalking_plugins应用,等待启动成功

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 &

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

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

4、调用接口,接口地址为: http://虚拟机IP地址:8088/exclude http://虚拟机IP地址:8088/include 5、在追踪中进行查看:

exclude接口已经被过滤,只有include接口能被看到