<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          微服務(wù)基石 || 分布式鏈路追蹤Jaeger實(shí)踐分享

          共 4028字,需瀏覽 9分鐘

           ·

          2022-08-09 09:47

          隨著微服務(wù)架構(gòu)的流行,客戶端發(fā)起的一次請求可能需要涉及到多個(gè)或 N 個(gè)服務(wù),致使我們對服務(wù)之間的監(jiān)控和排查變得更加復(fù)雜。

          「舉個(gè)例子:」

          某條業(yè)務(wù)線的某個(gè)接口調(diào)用服務(wù)端時(shí)快時(shí)慢,這時(shí)就需要排查各個(gè)服務(wù)的日志進(jìn)行分析,調(diào)動(dòng)各個(gè)服務(wù)的開發(fā)人員聯(lián)動(dòng)排查,這種排查費(fèi)時(shí)又費(fèi)力。對于 ToB 的業(yè)務(wù)有時(shí)候還拿不到日志,難搞哦!

          因此,就需要可以幫助理解系統(tǒng)行為、用于分析性能問題的工具,以便發(fā)生故障的時(shí)候,能夠快速定位和解決問題,那就是 APM (Application Performance Monitor)。目前流行的 APM 開源工具有很多,比如:Zipkin,Skywalking,Pinpoint、Jaeger 等等,本文將主要介紹 Jaeger 。

          Jaeger 是 Uber 技術(shù)團(tuán)隊(duì)發(fā)布的開源分布式跟蹤系統(tǒng),它用于監(jiān)控和故障排查基于微服務(wù)的分布式系統(tǒng):

          • 分布式上下文傳播、事務(wù)監(jiān)控
          • 根本原因、服務(wù)依賴分析
          • 性能/延遲優(yōu)化
          • OpenTracing[1] 啟發(fā)的數(shù)據(jù)模型
          • 多個(gè)存儲后端:Cassandra, Elasticsearch, memory.
          • 系統(tǒng)拓?fù)鋱D
          • 服務(wù)性能監(jiān)控(SPM)
          • 自適應(yīng)采樣

          Jaeger 架構(gòu)

          ComponentDescription
          Jaeger ClientJaeger Client SDK
          Jaeger Agent收集 Client 數(shù)據(jù)
          Jaeger Collector收集 Jaeger Agent 數(shù)據(jù),有 pull/push 兩種方式
          DB StorageCollector 需要存儲后端,Collector 拿到的數(shù)據(jù)將存在 Elasticsearch 或 Cassandra。
          Spark jobs用于生成拓?fù)鋱D UI 數(shù)據(jù)
          Jaeger Query Service & UI負(fù)責(zé)從 Storage 查詢數(shù)據(jù)并提供 API 和 UI

          如何在Rainbond上集成?

          「1.集成 OpenTelemetry Client:」

          v1.36 版本以前 Jaeger Client 是基于 OpenTracing API 實(shí)現(xiàn)的客戶端庫,Jaeger Client 結(jié)合 Jaeger Agent 一起使用,發(fā)送 span 到 Jaeger Collector。

          v1.36 版本以后被棄用。使用 OpenTelemetry[2] 替代  Jaeger Client and Jaeger Agent,詳情見 Jaeger and OpenTelemetry[3]

          OpenTelemetry 是無侵入的,只需在 Java 進(jìn)程啟動(dòng)時(shí)添加 javaagent,例:java -javaagent:path/to/opentelemetry-javaagent.jar -jar myapp.jar

          那么在 Rainbond 上就可以通過插件將 OpenTelemetry javaagent 下載到組件中并修改啟動(dòng)命令。

          「2.連接到 Jaeger-Collector:」

          將所有安裝了 OpenTelemetry javaagent 插件的微服務(wù)組件都通過依賴連接到 Jaeger Collector

          實(shí)踐步驟

          實(shí)踐中將使用 Spring Cloud Pig 進(jìn)行演示,Gitee:https://gitee.com/zhangbigqi/pig

          Rainbond 部署請參閱文檔 快速安裝[4]

          1. Spring Cloud Pig 源碼部署

          通過源碼部署 Spring Cloud Pig 微服務(wù)框架就不詳細(xì)介紹部署了,請參閱:

          • Spring Cloud Pig 部署教程[5]
          • Spring Cloud Pig 視頻教程[6]

          2. OpenTelemetry 插件安裝

          從應(yīng)用商店安裝 opentelemetry-java-agent 初始化插件,該插件的作用是下載 opentelemetry-javaagent.jar 到微服務(wù)組件內(nèi),可以在 Java 啟動(dòng)項(xiàng)中指定。

          • 團(tuán)隊(duì)視圖 -> 插件 -> 從應(yīng)用商店安裝插件 -> 搜索 opentelemetry-java-agent 并安裝。

          3. 部署 Jaeger

          在開源應(yīng)用商店中搜索 Jaeger 并安裝到指定應(yīng)用中。

          4. OpenTelemetry Agent 插件配置

          「1.開通 OpenTelemetry Agent 插件」

          pig-gateway 為例,在組件 -> 插件中開通 opentelemetry-java-agent 插件并更新組件生效,微服務(wù)內(nèi)的其他組件均需要開通插件并更新或重啟組件生效。

          「2.配置環(huán)境變量」

          為所有微服務(wù)組件配置環(huán)境變量。

          變量名變量值說明
          OTEL_TRACES_EXPORTERjaeger選擇 Jaeger exporter
          OTEL_EXPORTER_JAEGER_ENDPOINThttp://127.0.0.1:14250Jaeger Collector gRPC endpoint
          OTEL_EXPORTER_JAEGER_TIMEOUT10000超時(shí)時(shí)間(毫秒)
          OTEL_METRICS_EXPORTERnoneMetrics 導(dǎo)出器
          JAVA_OPTS-javaagent:/agent/opentelemetry-javaagent.jarJava 啟動(dòng)參數(shù)

          可使用 應(yīng)用配置組 統(tǒng)一配置并應(yīng)用到所有組件中。

          「3.配置組件服務(wù)名稱」

          為所有微服務(wù)組件配置環(huán)境變量 OTEL_SERVICE_NAME ,配置組件的 Jaeger 服務(wù)名稱,如:OTEL_SERVICE_NAME=pig-gateway OTEL_SERVICE_NAME=pig-auth

          5.建立依賴關(guān)系

          將所有微服務(wù)組件添加依賴連接到 Jaeger Collector

          Jaeger 部署在另外一個(gè)應(yīng)用,需要進(jìn)入 組件 -> 依賴 -> 添加 Jaeger Collector 依賴,就可以在當(dāng)前應(yīng)用的拓?fù)鋱D看到 Jaeger Collector 組件,剩下的組件都可通過拓?fù)鋱D編輯模式進(jìn)行依賴連接。更新或重啟所有微服務(wù)組件使依賴關(guān)系生效。

          6.  Jaeger 快速使用

          1. 訪問 Spring Cloud Pig UI 進(jìn)行登錄,使其產(chǎn)生數(shù)據(jù)。
          2. 訪問 Jaeger-Query16686 端口,打開對外服務(wù)即可訪問 Jaeger UI
          3. 在 Jaeger Search 頁面中搜索微服務(wù) Pig-gateway 的 Traces
            • Service:選擇微服務(wù)的組件
            • Operation:選擇操作類型,例:GET POST、接口、類.....
            • Tags:根據(jù)響應(yīng)頭篩選,例:http.status_code=200 error=true
            • Lookback:選擇時(shí)間
            • Max Duration:最大持續(xù)時(shí)間;Min Duration:最小持續(xù)時(shí)間。
            • Limit Results:限制返回結(jié)果數(shù)量。
          1. 找到 Pig-gateway HTTP POST 的 Traces 并包含了 pig-auth Span并進(jìn)入,可看到很清晰的展示了服務(wù)之間一層一層的調(diào)用以及接口的響應(yīng)時(shí)間,這樣我們就可以排查到底是哪個(gè)服務(wù)調(diào)用的慢或者調(diào)用有問題。

          「Jaeger 拓?fù)鋱D生成」

          拓?fù)鋱D默認(rèn)不會(huì)生成,使用 spark-dependencies 組件生成拓?fù)鋱D數(shù)據(jù),這是一個(gè) Spark 作業(yè),它從存儲中收集 span,分析服務(wù)之間的鏈接,并將它們存儲起來以供以后在 UI 中展示。請參閱 Jaeger Spark dependencies[7]

          spark-dependencies 組件占用資源較大,不使用時(shí)可關(guān)閉,需要生成拓?fù)鋱D數(shù)據(jù)時(shí)將其啟動(dòng)即可。

          最后

          有了 APM 系統(tǒng)后,使我們可以更好的分析業(yè)務(wù)性能、排查故障等。

          結(jié)合 Rainbond 作為基座不管是 Spring Cloud 還是 Jaeger 或其他 APM 都可以很方便、快捷的部署使用,從繁瑣的部署、配置中解放出來,讓我們更多的關(guān)注于業(yè)務(wù)層。

          Reference Link

          [1]

          OpenTracing: http://opentracing.io/

          [2]

          OpenTelemetry: https://opentelemetry.io/

          [3]

          Jaeger and OpenTelemetry: https://medium.com/jaegertracing/jaeger-and-opentelemetry-1846f701d9f2

          [4]

          Rainbond快速安裝: https://www.rainbond.com/docs/quick-start/quick-install

          [5]

          Spring Cloud Pig 部署教程: https://t.goodrain.com/d/3-springcloud-pig-rainbond

          [6]

          Spring Cloud Pig 視頻教程: https://www.bilibili.com/video/BV1MZ4y1b7wW

          [7]

          Jaeger Spark dependencies: https://github.com/jaegertracing/spark-dependencies




          關(guān)于 Rainbond

          Rainbond 核心100%開源,使用簡單,不需要懂容器和Kubernetes,支持管理多種Kubernetes集群,提供企業(yè)級應(yīng)用的全生命周期管理。

          ?? Github:https://github.com/goodrain/rainbond

          ?? 官網(wǎng):https://www.rainbond.com

          ?? 微信群:關(guān)注 Rainbond 公眾號加入技術(shù)交流群

          ?? 釘釘群:請搜索釘釘群號 31096419

          瀏覽 129
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評論
          圖片
          表情
          推薦
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  性爱视频网页 | 手机看片自拍自拍自拍日轉 | 亚洲无码我不卡 | 久久久一区二区三区四曲免费听 | 日韩家庭乱伦视频 |