2

使用 Solon Cloud 的 Jaeger 做请求链路跟踪 - 带刺的坐椅

 1 year ago
source link: https://www.cnblogs.com/noear/p/17285211.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

使用 Solon Cloud 的 Jaeger 做请求链路跟踪

<dependency>
    <groupId>org.noear</groupId>
    <artifactId>jaeger-solon-cloud-plugin</artifactId>
</dependency>

分布式扩展插件。基于 jaeger 适配的 solon cloud 插件。基于 opentracing 开放接口提供链路跟踪支持。

2、配置示例

solon.app:
  name: "demoapp"
  group: "demo"

solon.cloud.jaeger:
  server: "udp://localhost:6831"
  trace:
    enable: true                     #是否启用(默认:true)
    exclude: "/healthz,/_run/check/" #排除路径,多个以,号隔开

3、代码应用

  • 启用和配置跟踪器实现
public class App {
    public static void main(String[] args) {
        Solon.start(App.class, args);
    }
}

//相对于 opentracing-solon-plugin,省去了 Tracer 的构建 和 jaeger 客户端的引入
// --  可以当它不存在得用
@Controller
public class TestController {
    @NamiClient
    UserService userService;
    
    @Inject
    OrderService orderService;

    @Mapping("/")
    public String hello(String name) {
        name = userService.getUser(name);

        return orderService.orderCreate(name, "1");
    }
}

//-- 通过注解增加业务链节点 ( @Tracing )
@ProxyComponent
public class OrderService {
    @Tracing(name = "创建订单", tags = "订单=${orderId}")
    public String orderCreate(String userName, String orderId) {
        //手动添加 tag
        Spans.active(span -> span.setTag("用户", userName));
        
        return orderId;
    }
}

4、@Tracking 注意事项

  • 控制器或最终转为 Handler 的类可以不加(已由 Filter 全局处理了),加了会产生新的 Span

  • 修改当前 Span 的操作名

@Controller
public class TestController {

    @Mapping("/")
    public String hello(String name) {
        Spans.active().setOperationName("Hello");  //修改当前操作名
    
        return "Hello " + name;
    }
}
  • 添加在空接口上,一般会无效(比如:Mapper)。除非其底层有适配
  • 需加在代理的类上,不然拦截器不会生效。如:@ProxyComponent 注解的类

5、演示效果

1885228-20230404085606484-1595436986.png

6、代码演示


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK