AVt天堂网 手机版,亚洲va久久久噜噜噜久久4399,天天综合亚洲色在线精品,亚洲一级Av无码毛片久久精品

當前位置:首頁 > 科技  > 軟件

OpenTelemetry 深度定制:跨服務追蹤的實戰(zhàn)技巧

來源: 責編: 時間:2024-06-27 17:20:03 115觀看
導讀背景圖片我們的需求是這樣的:圖片假設現(xiàn)在有三個服務:ServiceA、ServiceB、ServiceC。ServiceA 對外提供了一個 http 接口 request,在這個接口會調用 ServiceB 的 order 訂單接口創(chuàng)建訂單,同時 serviceB 調用 serviceC 的

背景

圖片圖片soh28資訊網(wǎng)——每日最新資訊28at.com

我們的需求是這樣的:soh28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片soh28資訊網(wǎng)——每日最新資訊28at.com

假設現(xiàn)在有三個服務:ServiceA、ServiceB、ServiceC。soh28資訊網(wǎng)——每日最新資訊28at.com

ServiceA 對外提供了一個 http 接口 request,在這個接口會調用 ServiceB 的 order 訂單接口創(chuàng)建訂單,同時 serviceB 調用 serviceC 的 pay 接口。soh28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片soh28資訊網(wǎng)——每日最新資訊28at.com

整個調用關系如上圖所示。soh28資訊網(wǎng)——每日最新資訊28at.com

默認情況下 span 中的 attribute 會記錄當前 span 的一些信息,比如:soh28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片soh28資訊網(wǎng)——每日最新資訊28at.com

這些都是當前一些當前 span 內(nèi)置的信息,比如當前 gRPC 接口的一些基本數(shù)據(jù):服務名、ip、端口等信息。soh28資訊網(wǎng)——每日最新資訊28at.com

但這里并沒有上游的一些信息,雖然我們可以通過 Jaeger 的樹狀圖得知上游是哪個應用調用過來的,但是一旦某個 span 下有多個子 span 的調用,就沒辦法很直觀知道這個子 span 的上游是由誰發(fā)起的調用。soh28資訊網(wǎng)——每日最新資訊28at.com

比如如下這個鏈路:soh28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片soh28資訊網(wǎng)——每日最新資訊28at.com

當一個調用鏈非常長,同時也非常復雜時,沒辦法第一時間知道某一個 span 的上游到底是誰發(fā)起的,需要手動一層層的去折疊,或者全靠眼睛去找。soh28資訊網(wǎng)——每日最新資訊28at.com

預期效果

圖片圖片soh28資訊網(wǎng)——每日最新資訊28at.com

為此我們希望的效果是可以通過給每一個子 span 中加入兩個 attribute,來標明它的父調用來源。soh28資訊網(wǎng)——每日最新資訊28at.com

比如在 serviceB 中的所有 span 中都會加上兩個標簽:來源是 serviceA,同時是 serviceA 的 request 接口發(fā)起的請求。soh28資訊網(wǎng)——每日最新資訊28at.com

而在 serviceC 中同樣可以知道來源是 serviceB 的 Order 接口發(fā)起的調用。soh28資訊網(wǎng)——每日最新資訊28at.com

我啟動了三個 demo 應用,分別是 create1,create2,create3.soh28資訊網(wǎng)——每日最新資訊28at.com

create1 中會提供一個 request 接口,在這里面調用 create2 的 create2 接口,create2 的接口里接著調用 create3 的 create3 接口。soh28資訊網(wǎng)——每日最新資訊28at.com

create1:soh28資訊網(wǎng)——每日最新資訊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:soh28資訊網(wǎng)——每日最新資訊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:soh28資訊網(wǎng)——每日最新資訊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) 才能生效。soh28資訊網(wǎng)——每日最新資訊28at.com

最終的效果如下:soh28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片soh28資訊網(wǎng)——每日最新資訊28at.com

Baggage

在講具體的實現(xiàn)之前需要先了解幾個 Trace 中的概念,在這里主要用到的是一個稱為 Baggage 的對象。soh28資訊網(wǎng)——每日最新資訊28at.com

在之前的文章中其實提到過它的原理以及使用場景:從 Dapper 到 OpenTelemetry:分布式追蹤的演進之旅soh28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片soh28資訊網(wǎng)——每日最新資訊28at.com

Baggage 的中文翻譯是:包裹

本文鏈接:http://www.tebozhan.com/showinfo-26-96995-0.htmlOpenTelemetry 深度定制:跨服務追蹤的實戰(zhàn)技巧

聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: Vue 3.4 重磅升級:defineModel 宏如何徹底改變前端狀態(tài)管理!

下一篇: 千萬不要再用錯了這個 Lodash 方法了!可能釀成大禍!

標簽:
  • 熱門焦點
  • 一加首款折疊屏!一加Open渲染圖出爐:罕見單手可握小尺寸

    8月5日消息,此前就有爆料稱,一加首款折疊屏手機將會在第三季度上市,如今隨著時間臨近,新機的各種消息也開始浮出水面。據(jù)悉,這款新機將會被命名為&ldquo;On
  • 掘力計劃第 20 期:Flutter 混合開發(fā)的混亂之治

    在掘力計劃系列活動第20場,《Flutter 開發(fā)實戰(zhàn)詳解》作者,掘金優(yōu)秀作者,Github GSY 系列目負責人戀貓的小郭分享了Flutter 混合開發(fā)的混亂之治。Flutter 基于自研的 Skia 引擎
  • 讓我們一起聊聊文件的操作

    文件【1】文件是什么?文件是保存數(shù)據(jù)的地方,是數(shù)據(jù)源的一種,比如大家經(jīng)常使用的word文檔、txt文件、excel文件、jpg文件...都是文件。文件最主要的作用就是保存數(shù)據(jù),它既可以保
  • 三言兩語說透柯里化和反柯里化

    JavaScript中的柯里化(Currying)和反柯里化(Uncurrying)是兩種很有用的技術,可以幫助我們寫出更加優(yōu)雅、泛用的函數(shù)。本文將首先介紹柯里化和反柯里化的概念、實現(xiàn)原理和應用
  • 自動化在DevOps中的力量:簡化軟件開發(fā)和交付

    自動化在DevOps中扮演著重要角色,它提升了DevOps的效能。通過自動化工具和方法,DevOps團隊可以實現(xiàn)以下目標:消除手動和重復性任務。簡化流程。在整個軟件開發(fā)生命周期中實現(xiàn)更
  • 當家的盒馬,加速謀生

    來源 | 價值星球Planet作者 | 歸去來自己&ldquo;當家&rdquo;的盒馬,開始加速謀生了。據(jù)盒馬官微消息,盒馬計劃今年開放生鮮供應鏈,將其生鮮商品送往食堂。目前,盒馬在上海已經(jīng)與
  • 認真聊聊東方甄選:如何告別低垂的果實

    來源:山核桃作者:財經(jīng)無忌爆火一年后,俞敏洪和他的東方甄選依舊是頗受外界關心的&ldquo;網(wǎng)紅&rdquo;。7月5日至9日,為期5天的東方甄選&ldquo;甘肅行&rdquo;首次在自有App內(nèi)直播,
  • AI芯片初創(chuàng)公司Tenstorrent獲三星和現(xiàn)代1億美元投資

    Tenstorrent是一家由芯片行業(yè)資深人士Jim Keller領導的加拿大初創(chuàng)公司,專注于開發(fā)人工智能芯片,該公司周三表示,已經(jīng)從現(xiàn)代汽車集團和三星投資基金等
  • 質感不錯!OPPO K11渲染圖曝光:旗艦IMX890傳感器首次下放

    一直以來,OPPO K系列機型都保持著較為均衡的產(chǎn)品體驗,歷來都是2K價位的明星機型,去年推出的OPPO K10和OPPO K10 Pro兩款機型憑借各自的出色配置,堪稱有
Top