使用 Solon Cloud 的 Jaeger 做請求鏈路跟蹤

帶刺的坐椅發表於2023-04-04
<dependency>
    <groupId>org.noear</groupId>
    <artifactId>jaeger-solon-cloud-plugin</artifactId>
</dependency>

1、描述

分散式擴充套件外掛。基於 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、演示效果

6、程式碼演示

相關文章