• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      基于OpenTelemetry+Jaeger的分布式系統(tǒng)調(diào)用鏈路監(jiān)控方案

      2023-09-06 12:50:56張愛(ài)華白金峰
      軟件工程 2023年9期
      關(guān)鍵詞:配置文件調(diào)用鏈路

      張愛(ài)華 白金峰

      關(guān)鍵詞:分布式系統(tǒng);鏈路監(jiān)控;OpenTelemetry;Jaeger

      中圖分類(lèi)號(hào):TP391 文獻(xiàn)標(biāo)志碼:A

      0 引言(Introduction)

      隨著互聯(lián)網(wǎng)移動(dòng)應(yīng)用的興起,一種新的計(jì)算機(jī)應(yīng)用系統(tǒng)服務(wù)架構(gòu)-分布式架構(gòu)應(yīng)運(yùn)而生。但是,隨著分布式架構(gòu)方案的使用越來(lái)越多,該架構(gòu)的缺點(diǎn)慢慢顯現(xiàn)出來(lái),首當(dāng)其沖的就是調(diào)用鏈路的問(wèn)題[1]。隨著分布式系統(tǒng)中服務(wù)數(shù)量的增加,其相互調(diào)用的關(guān)系網(wǎng)絡(luò)也變得錯(cuò)綜復(fù)雜,無(wú)論是系統(tǒng)的開(kāi)發(fā)人員,還是維護(hù)人員,都因?yàn)闊o(wú)法追蹤一個(gè)請(qǐng)求的調(diào)用鏈路而犯難。

      本文針對(duì)這一情況,提供了一種通用的調(diào)用鏈路監(jiān)控方案,細(xì)化每一個(gè)服務(wù)接口的粒度。在本方案中,既可以通過(guò)可視化界面的方式查詢(xún)應(yīng)用接口的調(diào)用流程、錯(cuò)誤率、負(fù)載強(qiáng)度,又可以通過(guò)圖示的方式查看系統(tǒng)的調(diào)用結(jié)構(gòu)。

      通過(guò)使用本文中提供的監(jiān)控方案,系統(tǒng)開(kāi)發(fā)人員可以快速追蹤系統(tǒng)中任意服務(wù)的調(diào)用步驟、執(zhí)行的命令或者參數(shù),方便快速排查問(wèn)題;運(yùn)維人員可以實(shí)時(shí)查看系統(tǒng)中每一個(gè)服務(wù)接口的負(fù)載壓力與錯(cuò)誤率,可以提前預(yù)判服務(wù)狀態(tài)。

      1 系統(tǒng)需求(System requirements)

      分布式鏈路監(jiān)控系統(tǒng)的主要用戶(hù)為系統(tǒng)的開(kāi)發(fā)人員和維護(hù)人員。圖1為系統(tǒng)開(kāi)發(fā)人員的需求。系統(tǒng)開(kāi)發(fā)人員希望使用該系統(tǒng)查看應(yīng)用的調(diào)用鏈路、接口耗時(shí)、調(diào)用步驟中的應(yīng)用信息、參數(shù)、環(huán)境信息等,還需要查看系統(tǒng)的整體調(diào)用網(wǎng)絡(luò)。

      2 系統(tǒng)設(shè)計(jì)(System design)

      2.1 技術(shù)路線(xiàn)

      系統(tǒng)服務(wù)端采用B/S架構(gòu),前端和后端基于HTTP協(xié)議進(jìn)行通信,數(shù)據(jù)格式使用JSON。前端使用的是NodeJS+React技術(shù),通過(guò)NodeJS查詢(xún)Server端數(shù)據(jù),然后結(jié)合React構(gòu)造的模塊化頁(yè)面展示實(shí)現(xiàn)動(dòng)態(tài)響應(yīng)。

      系統(tǒng)后端使用的是Golang語(yǔ)言,該語(yǔ)言自身的協(xié)程設(shè)計(jì)使其非常適合應(yīng)用在處理高并發(fā)請(qǐng)求環(huán)境中,并且構(gòu)建后的可執(zhí)行產(chǎn)物體積小、啟動(dòng)方便。

      服務(wù)埋點(diǎn)以Java應(yīng)用為例,使用的是Java語(yǔ)言本身支持的JavaAgent方案,通過(guò)JavaAgent掛載到應(yīng)用本身的Java虛擬機(jī)(Java Virtual Machine,JVM)中。該方案對(duì)應(yīng)用本身沒(méi)有任何的代碼侵入,業(yè)務(wù)應(yīng)用不需要任何改造即可輕松集成Agent。

      ElasticSearch是一款分布式的搜索和分析引擎,該引擎可以使鏈路監(jiān)控的數(shù)據(jù)搜集部分與展示部分解耦[1]。Agent在應(yīng)用層面搜集到的應(yīng)用運(yùn)行數(shù)據(jù)和日志等信息上報(bào)給ElasticSearch引擎,引擎對(duì)數(shù)據(jù)進(jìn)行存儲(chǔ)和索引,頁(yè)面展示部分從ElasticSearch中讀取并分析數(shù)據(jù),然后展示到頁(yè)面上。

      OpenTelemetry Collector是一款設(shè)備無(wú)關(guān)性的新興采集器。在以往的分布式系統(tǒng)度量數(shù)據(jù)采集方案中使用的采集器一般與技術(shù)棧綁定,一旦選擇了某個(gè)技術(shù)棧中的一個(gè)工具,則后續(xù)拓展必須使用該技術(shù)棧下的其他工具。例如,在搜集應(yīng)用日志時(shí),一旦選擇了使用filebeat,則后續(xù)的日志存儲(chǔ)只能選擇ElasticSearch,日志展示與分析也只能選擇Kibana。OpenTelemetry Collector的出現(xiàn)打破了這一局限性,它支持從多個(gè)輸入端采集數(shù)據(jù),然后通過(guò)自定義的Processor處理,處理后又可以從多個(gè)輸出端輸出數(shù)據(jù),方便隨時(shí)替換度量數(shù)據(jù)的搜集器和分析器。

      Jaeger是一款新型的鏈路分析工具,它包含Agent、Analyzer、QueryUI等組件。本文使用Jaeger的Analyzer和QueryUI組件,其中Analyzer用來(lái)分析鏈路數(shù)據(jù)和服務(wù)的網(wǎng)絡(luò)結(jié)構(gòu),QueryUI用來(lái)查詢(xún)和展示分析后的鏈路和調(diào)用網(wǎng)絡(luò)。

      Prometheus是一款存儲(chǔ)應(yīng)用度量數(shù)據(jù)的工具,它提供了一種基于時(shí)間軸的新型數(shù)據(jù)存儲(chǔ)和管理方案,可以很好地記錄某一指標(biāo)隨著時(shí)間變化而變化的值[2];同時(shí),它還提供一套類(lèi)似于結(jié)構(gòu)化查詢(xún)語(yǔ)言(Structured Query Language,SQL),通過(guò)使用其提供的查詢(xún)語(yǔ)言可以方便地從各個(gè)維度查詢(xún)度量數(shù)據(jù)。

      2.2 系統(tǒng)架構(gòu)

      2.2.1 整體架構(gòu)

      系統(tǒng)的整體架構(gòu)如圖 3所示,系統(tǒng)中存在多個(gè)業(yè)務(wù)應(yīng)用(Business Application),并且每一個(gè)業(yè)務(wù)應(yīng)用都掛載了一個(gè)Agent用來(lái)收集應(yīng)用的度量數(shù)據(jù)和運(yùn)行時(shí)的狀態(tài)數(shù)據(jù)[3]。Agent收集數(shù)據(jù)后會(huì)發(fā)送給OpenTelemetry Collector,Collector對(duì)數(shù)據(jù)進(jìn)行處理后,根據(jù)不同的數(shù)據(jù)類(lèi)型分別發(fā)送給Jaeger Collector 搜集器和Prometheus 數(shù)據(jù)庫(kù)。JaegerCollector對(duì)數(shù)據(jù)做篩選,加標(biāo)簽處理后存入ElasticSearch中等待分析和展示,ElasticSearch中的數(shù)據(jù)會(huì)定時(shí)由Spark Job獲取并計(jì)算調(diào)用網(wǎng)絡(luò),計(jì)算后的結(jié)果會(huì)再次存儲(chǔ)至ElasticSearch中。Jaeger Query 服務(wù)負(fù)責(zé)根據(jù)用戶(hù)的需求將數(shù)據(jù)從ElasticSearch和Prometheus中取出并通過(guò)用戶(hù)界面(UserInterface,UI)進(jìn)行相應(yīng)的展示。

      2.2.2 高可用節(jié)點(diǎn)集群方案

      為保證系統(tǒng)處于高可用狀態(tài)(如圖 4所示),系統(tǒng)中的OpenTelemetry Collector、Jaeger Collector和Jaeger Query等組件都可以使用集群化部署,根據(jù)系統(tǒng)壓力進(jìn)行水平擴(kuò)容[4]。

      同時(shí),開(kāi)源組件ElasticSearch和Prometheus也支持高可用的集群化部署,多節(jié)點(diǎn)通過(guò)訪(fǎng)問(wèn)單一存儲(chǔ)系統(tǒng)實(shí)現(xiàn)數(shù)據(jù)一致性,開(kāi)源組件高可用方案如圖 5所示[5]。

      3 系統(tǒng)實(shí)現(xiàn)(System implementation)

      3.1 節(jié)點(diǎn)分配

      如表1所示,搭建一個(gè)最小集群共需要6臺(tái)機(jī)器,可以選擇在虛擬機(jī)中創(chuàng)建這些機(jī)器并分配為固定IP。其中,用來(lái)部署ElasticSearch的機(jī)器需要分配足夠的內(nèi)存(建議不小于8 GB)和存儲(chǔ)(不小于50 GB);用來(lái)部署Prometheus的機(jī)器需要分配足夠的存儲(chǔ)(不小于50 GB);用來(lái)部署Collector的兩臺(tái)機(jī)器需要分配足夠的CPU(不小于雙核),以滿(mǎn)足運(yùn)算需要。

      3.2 應(yīng)用的配置與部署

      由于開(kāi)源組件ElasticSearch和Prometheus的部署方案在官網(wǎng)或者網(wǎng)絡(luò)上有很多相關(guān)資料,故在此不做贅述。OpenTelemetry Collector的部署重點(diǎn)是配置文件的編寫(xiě),需要配置Collector的輸入監(jiān)聽(tīng)、數(shù)據(jù)處理器和輸出監(jiān)聽(tīng)。輸入監(jiān)聽(tīng)使用的是Jaeger格式數(shù)據(jù)的監(jiān)聽(tīng)方案,數(shù)據(jù)處理器使用SpanMetrics方案將度量數(shù)據(jù)與鏈路數(shù)據(jù)進(jìn)行拆分,輸出監(jiān)聽(tīng)分別需要Prometheus 和Jaeger Collector。配置文件的具體內(nèi)容如圖 6所示。

      Jaeger Collector可以使用官網(wǎng)上的二進(jìn)制文件,然后通過(guò)命令行參數(shù)的方式直接啟動(dòng)該應(yīng)用即可,主要的命令行參數(shù)包括指定存儲(chǔ)類(lèi)型、索引前綴名稱(chēng)等。將下載好的二進(jìn)制文件放在/opt/app/jaeger/jaeger-collector中,則可以使用圖7中的命令啟動(dòng)Jaeger Collector。Jaeger Query 和Jaeger UI的啟動(dòng)方式與Jaeger Collector的啟動(dòng)方案類(lèi)似,這里不再贅述。

      3.3 業(yè)務(wù)服務(wù)Agent配置

      以Java應(yīng)用為例,使用Java Agent的方案進(jìn)行配置[6]。該方案需要準(zhǔn)備收集數(shù)據(jù)的Agent.jar和應(yīng)用相關(guān)的參數(shù)配置文件,應(yīng)用配置文件內(nèi)容詳解如圖 8所示。

      更新參數(shù)配置文件后,需要對(duì)業(yè)務(wù)服務(wù)的啟動(dòng)命令進(jìn)行改造,將agent和agent使用的應(yīng)用參數(shù)配置文件加入啟動(dòng)命令中,應(yīng)用啟動(dòng)參數(shù)的修改如圖 9所示。

      4 系統(tǒng)測(cè)試(System testing)

      4.1 服務(wù)應(yīng)用Agent測(cè)試

      系統(tǒng)采用的是Agent掛載到業(yè)務(wù)應(yīng)用上的啟動(dòng)方案,所以對(duì)Agent的測(cè)試可通過(guò)應(yīng)用打印的啟動(dòng)日志進(jìn)行查看[7]。在應(yīng)用啟動(dòng)的過(guò)程中,可以通過(guò)觀(guān)察應(yīng)用的輸出日志判斷Agent是否成功掛載到應(yīng)用上。經(jīng)測(cè)試,Agent已經(jīng)成功掛載到應(yīng)用上。

      4.2 鏈路監(jiān)控系統(tǒng)測(cè)試

      對(duì)鏈路監(jiān)控系統(tǒng)的測(cè)試,可以通過(guò)訪(fǎng)問(wèn)應(yīng)用接口和提升應(yīng)用接口壓力的方案實(shí)現(xiàn)。通過(guò)訪(fǎng)問(wèn)業(yè)務(wù)應(yīng)用的接口,然后在本系統(tǒng)中查看追蹤到的鏈路即可確認(rèn)鏈路上報(bào)與監(jiān)控功能是否可用[8]。經(jīng)測(cè)試,系統(tǒng)的鏈路監(jiān)控功能可用,鏈路監(jiān)控頁(yè)面測(cè)試結(jié)果如圖10所示。

      4.3 指標(biāo)展示測(cè)試

      對(duì)系統(tǒng)的指標(biāo)展示的測(cè)試,可以通過(guò)給指定應(yīng)用增加訪(fǎng)問(wèn)壓力迫使指標(biāo)數(shù)據(jù)出現(xiàn)波動(dòng)的方案實(shí)現(xiàn)。經(jīng)測(cè)試,系統(tǒng)指標(biāo)展示功能可用。系統(tǒng)指標(biāo)數(shù)據(jù)頁(yè)面測(cè)試結(jié)果如圖11所示。

      4.4 其他測(cè)試

      除了上述幾項(xiàng)重要功能測(cè)試,本文還對(duì)系統(tǒng)的其他分支功能如鏈路步驟查詢(xún)、鏈路標(biāo)簽查詢(xún)、鏈路中某一步驟參數(shù)與結(jié)果分析、鏈路對(duì)比、服務(wù)網(wǎng)絡(luò)分析等進(jìn)行測(cè)試,測(cè)試結(jié)果均正常,各項(xiàng)功能均可用。

      4.5 測(cè)試結(jié)果總結(jié)

      系統(tǒng)共設(shè)計(jì)了功能性測(cè)試用例共35個(gè),執(zhí)行成功35個(gè);設(shè)計(jì)了非功能性測(cè)試12個(gè),成功執(zhí)行了12個(gè);設(shè)計(jì)了性能測(cè)試共3項(xiàng),在單節(jié)點(diǎn)狀態(tài)下,服務(wù)接口成功率達(dá)99.97%,系統(tǒng)資源占用穩(wěn)定,沒(méi)有內(nèi)存泄漏和CPU占用率過(guò)高的情況。

      5 結(jié)論(Conclusion)

      本文提出的鏈路監(jiān)控方案與傳統(tǒng)的鏈路監(jiān)控方案相比,對(duì)業(yè)務(wù)應(yīng)用的侵入幾乎可以忽略不計(jì),對(duì)業(yè)務(wù)應(yīng)用的性能影響非常小。同時(shí),提供了更全面、詳細(xì)的各項(xiàng)鏈路指標(biāo),方便系統(tǒng)的開(kāi)發(fā)和維護(hù)人員快速排查、定位問(wèn)題。同時(shí),系統(tǒng)的可拓展性非常強(qiáng),既可以兼容現(xiàn)有比較主流的鏈路監(jiān)控插件,也可以支持個(gè)性化的鏈路監(jiān)控指標(biāo)配置。

      作者簡(jiǎn)介:

      張愛(ài)華(1981-),女,碩士,講師。研究領(lǐng)域:DevOps,網(wǎng)絡(luò)工程,軟件開(kāi)發(fā)。

      白金峰(1997-),男,本科,工程師。研究領(lǐng)域:Linux,分布式系統(tǒng),DevOps。

      猜你喜歡
      配置文件調(diào)用鏈路
      家紡“全鏈路”升級(jí)
      提示用戶(hù)配置文件錯(cuò)誤 這樣解決
      天空地一體化網(wǎng)絡(luò)多中繼鏈路自適應(yīng)調(diào)度技術(shù)
      搭建簡(jiǎn)單的Kubernetes集群
      互不干涉混用Chromium Edge
      核電項(xiàng)目物項(xiàng)調(diào)用管理的應(yīng)用研究
      LabWindows/CVI下基于ActiveX技術(shù)的Excel調(diào)用
      忘記ESXi主機(jī)root密碼怎么辦
      基于系統(tǒng)調(diào)用的惡意軟件檢測(cè)技術(shù)研究
      基于3G的VPDN技術(shù)在高速公路備份鏈路中的應(yīng)用
      开远市| 射阳县| 河曲县| 铜川市| 山阴县| 尼勒克县| 东乡族自治县| 沽源县| 康平县| 静安区| 康马县| 甘泉县| 江孜县| 新源县| 湖口县| 波密县| 赣榆县| 桂林市| 洪湖市| 田阳县| 龙里县| 石门县| 曲松县| 龙州县| 和田市| 宾阳县| 工布江达县| 昌乐县| 油尖旺区| 信宜市| 修水县| 安阳市| 开鲁县| 五常市| 黔西| 济阳县| 彩票| 泽州县| 葵青区| 涟水县| 峨边|