欢迎光临散文网 会员登陆 & 注册

Jaeger 做请求链路跟踪

2023-04-06 08:12 作者:程序员-王坚  | 我要投稿

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 客户端的引入

  • 应用代码

// --  可以当它不存在得用@Controllerpublic class TestController {    @NamiClient    UserService userService;        @Inject    OrderService orderService;    @Mapping("/")    public String hello(String name) {        name = userService.getUser(name);        return orderService.orderCreate(name, "1");    } }//-- 通过注解增加业务链节点 ( @Tracing )@ProxyComponentpublic 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 的操作名

@Controllerpublic class TestController {    @Mapping("/")    public String hello(String name) {        Spans.active().setOperationName("Hello");  //修改当前操作名            return "Hello " + name;    } }

  • 添加在空接口上,一般会无效(比如:Mapper)。除非其底层有适配

  • 需加在代理的类上,不然拦截器不会生效。如:@ProxyComponent 注解的类

5、演示效果


Jaeger 做请求链路跟踪的评论 (共 条)

分享到微博请遵守国家法律