使用 Solon Cloud 的 Jaeger 做请求链路跟踪
<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 注解的类