当前位置:首页 > 科技  > 软件

OpenTelemetry 深度定制:跨服务追踪的实战技巧

来源: 责编: 时间:2024-06-27 17:20:03 266观看
导读背景图片我们的需求是这样的:图片假设现在有三个服务:ServiceA、ServiceB、ServiceC。ServiceA 对外提供了一个 http 接口 request,在这个接口会调用 ServiceB 的 order 订单接口创建订单,同时 serviceB 调用 serviceC 的

背景

图片图片4Nn28资讯网——每日最新资讯28at.com

我们的需求是这样的:4Nn28资讯网——每日最新资讯28at.com

图片图片4Nn28资讯网——每日最新资讯28at.com

假设现在有三个服务:ServiceA、ServiceB、ServiceC。4Nn28资讯网——每日最新资讯28at.com

ServiceA 对外提供了一个 http 接口 request,在这个接口会调用 ServiceB 的 order 订单接口创建订单,同时 serviceB 调用 serviceC 的 pay 接口。4Nn28资讯网——每日最新资讯28at.com

图片图片4Nn28资讯网——每日最新资讯28at.com

整个调用关系如上图所示。4Nn28资讯网——每日最新资讯28at.com

默认情况下 span 中的 attribute 会记录当前 span 的一些信息,比如:4Nn28资讯网——每日最新资讯28at.com

图片图片4Nn28资讯网——每日最新资讯28at.com

这些都是当前一些当前 span 内置的信息,比如当前 gRPC 接口的一些基本数据:服务名、ip、端口等信息。4Nn28资讯网——每日最新资讯28at.com

但这里并没有上游的一些信息,虽然我们可以通过 Jaeger 的树状图得知上游是哪个应用调用过来的,但是一旦某个 span 下有多个子 span 的调用,就没办法很直观知道这个子 span 的上游是由谁发起的调用。4Nn28资讯网——每日最新资讯28at.com

比如如下这个链路:4Nn28资讯网——每日最新资讯28at.com

图片图片4Nn28资讯网——每日最新资讯28at.com

当一个调用链非常长,同时也非常复杂时,没办法第一时间知道某一个 span 的上游到底是谁发起的,需要手动一层层的去折叠,或者全靠眼睛去找。4Nn28资讯网——每日最新资讯28at.com

预期效果

图片图片4Nn28资讯网——每日最新资讯28at.com

为此我们希望的效果是可以通过给每一个子 span 中加入两个 attribute,来标明它的父调用来源。4Nn28资讯网——每日最新资讯28at.com

比如在 serviceB 中的所有 span 中都会加上两个标签:来源是 serviceA,同时是 serviceA 的 request 接口发起的请求。4Nn28资讯网——每日最新资讯28at.com

而在 serviceC 中同样可以知道来源是 serviceB 的 Order 接口发起的调用。4Nn28资讯网——每日最新资讯28at.com

我启动了三个 demo 应用,分别是 create1,create2,create3.4Nn28资讯网——每日最新资讯28at.com

create1 中会提供一个 request 接口,在这里面调用 create2 的 create2 接口,create2 的接口里接着调用 create3 的 create3 接口。4Nn28资讯网——每日最新资讯28at.com

create1:4Nn28资讯网——每日最新资讯28at.com

@RequestMapping("/request")      public String request(@RequestParam String name) {         HelloRequest request = HelloRequest.newBuilder()               .setName(name)               .build();         log.info("request: {}", request);         String message = myServiceStub.create2(request).getMessage();         Executors.newFixedThreadPool(1).execute(() -> {            myServiceStub.create2(request).getMessage();         });       return message;      }

create2:4Nn28资讯网——每日最新资讯28at.com

@Override  public void create2(HelloRequest request, StreamObserver<HelloReply> responseObserver) {      HelloReply reply = HelloReply.newBuilder()              .setMessage("Create2 ==> " + request.getName())              .build();      log.info("Create2: {}", reply.getMessage());      myMethod(request.getName());      myServiceStub.create3(request);    responseObserver.onNext(reply);      responseObserver.onCompleted();  }

create3:4Nn28资讯网——每日最新资讯28at.com

@Override  public void create3(HelloRequest request, StreamObserver<HelloReply> responseObserver) {      HelloReply reply = HelloReply.newBuilder()              .setMessage("Create3 ==> " + request.getName())              .build();      log.info("Create3: {}", reply.getMessage());      myMethod(request.getName());      responseObserver.onNext(reply);      responseObserver.onCompleted();  }
java -javaagent:opentelemetry-javaagent-2.4.0-SNAPSHOT.jar /-Dotel.javaagent.extensinotallow=otel-extensions-custom-context-1.0-SNAPSHOT.jar /-Dotel.traces.exporter=otlp /-Dotel.logs.exporter=none /-Dotel.service.name=create2 /-Dotel.exporter.otlp.protocol=grpc /-Dotel.propagators=tracecontext,baggage,demo /-Dotel.exporter.otlp.endpoint=http://127.0.0.1:5317 /      -jar target/demo-0.0.1-SNAPSHOT.jar --spring.application.name=create2 --server.port=9191 --grpc.server.port=9292 --grpc.client.myService.address=static://127.0.0.1:9393

只是每个应用都需要使用我这边单独打的 agent 包以及一个 extension(tel-extensions-custom-context-1.0-SNAPSHOT.jar) 才能生效。4Nn28资讯网——每日最新资讯28at.com

最终的效果如下:4Nn28资讯网——每日最新资讯28at.com

图片图片4Nn28资讯网——每日最新资讯28at.com

Baggage

在讲具体的实现之前需要先了解几个 Trace 中的概念,在这里主要用到的是一个称为 Baggage 的对象。4Nn28资讯网——每日最新资讯28at.com

在之前的文章中其实提到过它的原理以及使用场景:从 Dapper 到 OpenTelemetry:分布式追踪的演进之旅4Nn28资讯网——每日最新资讯28at.com

图片图片4Nn28资讯网——每日最新资讯28at.com

Baggage 的中文翻译是:包裹

本文链接:http://www.28at.com/showinfo-26-96995-0.htmlOpenTelemetry 深度定制:跨服务追踪的实战技巧

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: Vue 3.4 重磅升级:defineModel 宏如何彻底改变前端状态管理!

下一篇: 千万不要再用错了这个 Lodash 方法了!可能酿成大祸!

标签:
  • 热门焦点
  • Find N3入网:最高支持16+1TB

    OPPO将于近期登场的Find N3折叠屏目前已经正式入网,型号为PHN110。本次Find N3在外观方面相比前两代有很大的变化,不再是小号的横向折叠屏,而是跟别的厂商一样采用了较为常见的
  • 7月安卓手机好评榜:三星S23Ultra好评率第一

    性能榜和性价比榜之后,我们来看最后的安卓手机好评榜,数据来源安兔兔评测,收集时间2023年7月1日至7月31日,仅限国内市场。第一名:三星Galaxy S23 Ultra好评率:95.71%在即将迎来新
  • JavaScript学习 -AES加密算法

    引言在当今数字化时代,前端应用程序扮演着重要角色,用户的敏感数据经常在前端进行加密和解密操作。然而,这样的操作在网络传输和存储中可能会受到恶意攻击的威胁。为了确保数据
  • 一文搞定Java NIO,以及各种奇葩流

    大家好,我是哪吒。很多朋友问我,如何才能学好IO流,对各种流的概念,云里雾里的,不求甚解。用到的时候,现百度,功能虽然实现了,但是为什么用这个?不知道。更别说效率问题了~下次再遇到,
  • 破圈是B站头上的紧箍咒

    来源 | 光子星球撰文 | 吴坤谚编辑 | 吴先之每年的暑期档都少不了瞄准追剧女孩们的古偶剧集,2021年有优酷的《山河令》,2022年有爱奇艺的《苍兰诀》,今年却轮到小破站抓住了追
  • 品牌洞察丨服务本地,美团直播成效几何?

    来源:17PR7月11日,美团App首页推荐位出现&ldquo;美团直播&rdquo;的固定入口。在直播聚合页面,外卖&ldquo;神枪手&rdquo;直播间、美团旅行直播间、美团买菜直播间等均已上线,同时
  • 东方甄选单飞:有些鸟注定是关不住的

    作者:彭宽鸿来源:华尔街科技眼&zwj;&zwj;&zwj;&zwj;&zwj;&zwj;&zwj;&zwj;&zwj;&zwj;东方甄选创始人俞敏洪带队的&ldquo;7天甘肃行&rdquo;直播活动已在近日顺利收官。成立后一
  • iQOO Neo8 Pro真机谍照曝光:天玑9200+和V1+旗舰双芯加持

    去年10月,iQOO推出了iQOO Neo7系列机型,不仅搭载了天玑9000+,而且是同价位唯一一款天玑9000+直屏旗舰,一经上市便受到了用户的广泛关注。在时隔半年后,
  • Counterpoint :OPPO双旗舰战略全面落地 高端产品销量增长22%

    2023年6月30日,全球行业分析机构Counterpoint Research发布的《中国智能手机高端市场白皮书》显示,中国智能手机品牌正在寻求高质量发展,中国高端智能
Top