skywalking04 - skywalking自定义链路追踪@Trace

x33g5p2x  于2021-12-21 转载在 其他  
字(1.8k)|赞(0)|评价(0)|浏览(971)

​ 当我们工程中,有些重要的方法,没有添加在链路中,而我们又需要时,就可以添加自定义链路追踪的Span,同时,我们还可以向链路的Span中添加一些自定义的属性(Tag)

准备工程

​ 工程我们采取上一章<skywalking03 - skywalking入门使用>使用到的demo工程,进行稍作改造.skywalking-plugin-example

准备需要自定义链路追踪的方法

private String trace(String plaintext) {
        return new Base64().encodeToString(plaintext.getBytes(StandardCharsets.UTF_8));
    }

基于上一章的成果,一切就绪.

引入依赖

​ 自定义链路,需要依赖skywalking官方提供的apm-toolkit-trace包.在pom.xml的dependencies中添加如下依赖:

<dependency>
            <groupId>org.apache.skywalking</groupId>
            <artifactId>apm-toolkit-trace</artifactId>
            <!-- 当前的最新版本,请与安装的服务器版本对应 -->
            <version>8.3.0</version>
        </dependency>

使用@Trace注解方法

@Trace注解其只能在方法上进行注解,使用operationName属性指定Span的名字,若不指定,会使用方法名.

@Trace(operationName = "customTraceFunction")
    private String trace(String plaintext) {
        return new Base64().encodeToString(plaintext.getBytes(StandardCharsets.UTF_8));
    }

使用@Tags/ @Tag注解添加Span的属性

@Trace(operationName = "customTraceFunction")
    @Tags({@Tag(key = "plaintext", value = "arg[0]"), @Tag(key = "ciphertext", value = "returnedObj")})
    private String trace(String plaintext) {
        return new Base64().encodeToString(plaintext.getBytes(StandardCharsets.UTF_8));
    }
  • key 属性名
  • value 属性值会是一个表达式,具体可以参考官方文档: enhancement rules, for more information, refer to https://github.com/apache/skywalking/blob/master/docs/en/setup/service-agent/java-agent/Customize-enhance-trace.md#how-to-configure

当然也可以看源码,入口在org.apache.skywalking.apm.toolkit.activation.util.TagUtil#tagParamsSpan

这里用到的arg[0]代表入参的第一个对象,returnedObj即返回的对象.

启用自定义增强插件

  • 这一步很重要,如果不做,将看不到增强信息,而且不会有任何报错.

自定义增强插件即apm-customize-enhance-plugin-8.3.0.jar

这个官方插件的作用是使探针可以收集到@Trace之类自定义增加的注解.其位于agent目录中的optional-plugins目录中,需要将其拷贝至plugins目录!

启动工程

启动时注意使用探针代理,忘了看看上一章.

访问URL产生链路

curl http://localhost:8081/foo?p=a

查看链路

​ 可以观察到,已经有了我们@Trace产生的Span-customFunction

查看Span

​ 可以观察到我们自定义的两个字段,明文/秘文已经展示出来了.

相关文章