SkyWalking 将方法加入追踪链路(@Trace)

本文介绍了如何在SkyWalking8中使用@Trace注解自定义链路追踪,强调了operationName的设置,并提到了通过@Tags和@Tag添加Span属性。同时,文章探讨了SkyWalking8配置监控跨线程问题的解决方案,包括添加依赖以及使用@TraceCrossThread注解和RunnableWrapper.of()方法来指定跟踪线程。

SkyWalking8 自定义链路追踪@Trace

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

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

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

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

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

@Trace
@Tags({@Tag(key = "content", value = "arg[0]"), @Tag(key = "result", value = "returnedObj")})
private String trace(String content) {
  return new Base64().encodeToString(content.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即返回的对象.

SkyWalking8配置:监控跨线程问题解决

详情见 https://www.jianshu.com/p/602e4ae6a0c8

添加依赖
<dependency>
   <groupId>org.apache.skywalking</groupId>
   <artifactId>apm-toolkit-trace</artifactId>
  <version>8.7.0</version>
</dependency>

可以添加其他多线程方法
CallableWrapper.of()
CompletableFuture.supplyAsync(() ->{});

也可以添加指定实现多线程的类上注解 @TraceCrossThread

代码1:

@TraceCrossThread
 public static class MyCallable<String> implements Callable<String> {
     @Override
     public String call() throws Exception {
         return null;
     }
 }
...
 ExecutorService executorService = Executors.newFixedThreadPool(1);
 executorService.submit(new MyCallable());

代码2:

ExecutorService executorService = Executors.newFixedThreadPool(1);
 executorService.submit(CallableWrapper.of(new Callable<String>() {
     @Override public String call() throws Exception {
         return null;
     }
 }));

或者添加RunnableWrapper.of()来指定跟踪线程

ExecutorService executorService = Executors.newFixedThreadPool(1);
 executorService.execute(RunnableWrapper.of(new Runnable() {
     @Override public void run() {
         //your code
     }
 }));

代码3:

@TraceCrossThread
 public class MySupplier<String> implements Supplier<String> {
     @Override
     public String get() {
         return null;
     }
 }
...
 CompletableFuture.supplyAsync(new MySupplier<String>());

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值