出自图灵学院

如果我们希望对项目中的业务方法,实现链路追踪,方便我们排查问题,可以使用如下的代码
引入依赖

  1. <!-- SkyWalking 工具类 -->
  2. <dependency>
  3. <groupId>org.apache.skywalking</groupId>
  4. <artifactId>apm-toolkit-trace</artifactId>
  5. <version>8.4.0</version>
  6. </dependency>

在业务方法中可以TraceContext获取到traceId

@RequestMapping("/list")
public List<User> list(){

    //TraceContext可以绑定key-value,在链路中绑定数据
    TraceContext.putCorrelation("name", "fox");
    Optional<String> op = TraceContext.getCorrelation("name");
    log.info("name = {} ", op.get());
    //获取跟踪的traceId
    String traceId = TraceContext.traceId();
    log.info("traceId = {} ", traceId);

    return userService.list();
}

测试 http://localhost:8000/user/list
自定义SkyWalking链路追踪 - 图1
在Skywalking UI中查询tranceId
自定义SkyWalking链路追踪 - 图2

@Trace将方法加入追踪链路

如果一个业务方法想在ui界面的跟踪链路上显示出来,只需要在业务方法上加上@Trace注解即可
自定义SkyWalking链路追踪 - 图3
测试:
自定义SkyWalking链路追踪 - 图4

加入@Tags或@Tag

我们还可以为追踪链路增加其他额外的信息,比如记录参数和返回信息。实现方式:在方法上增加@Tag或者@Tags。

@Trace
@Tag(key = "list", value = "returnedObj")
public List<User> list(){
    return userMapper.list();
}

@Trace
@Tags({@Tag(key = "param", value = "arg[0]"),
        @Tag(key = "user", value = "returnedObj")})
public User getById(Integer id){
    return userMapper.getById(id);
}

在链路上就能看到值了
自定义SkyWalking链路追踪 - 图5

自定义SkyWalking链路追踪 - 图6