亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        基于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

        中圖分類號(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ò)可視化界面的方式查詢應(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)的主要用戶為系統(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ù)路線

        系統(tǒng)服務(wù)端采用B/S架構(gòu),前端和后端基于HTTP協(xié)議進(jìn)行通信,數(shù)據(jù)格式使用JSON。前端使用的是NodeJS+React技術(shù),通過(guò)NodeJS查詢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)查詢和展示分析后的鏈路和調(diào)用網(wǎng)絡(luò)。

        Prometheus是一款存儲(chǔ)應(yīng)用度量數(shù)據(jù)的工具,它提供了一種基于時(shí)間軸的新型數(shù)據(jù)存儲(chǔ)和管理方案,可以很好地記錄某一指標(biāo)隨著時(shí)間變化而變化的值[2];同時(shí),它還提供一套類似于結(jié)構(gòu)化查詢語(yǔ)言(Structured Query Language,SQL),通過(guò)使用其提供的查詢語(yǔ)言可以方便地從各個(gè)維度查詢度量數(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ù)類型分別發(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ù)用戶的需求將數(shù)據(jù)從ElasticSearch和Prometheus中取出并通過(guò)用戶界面(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ò)訪問(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(不小于雙核),以滿足運(yùn)算需要。

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

        由于開(kāi)源組件ElasticSearch和Prometheus的部署方案在官網(wǎng)或者網(wǎng)絡(luò)上有很多相關(guān)資料,故在此不做贅述。OpenTelemetry Collector的部署重點(diǎn)是配置文件的編寫,需要配置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ǔ)類型、索引前綴名稱等。將下載好的二進(jìn)制文件放在/opt/app/jaeger/jaeger-collector中,則可以使用圖7中的命令啟動(dòng)Jaeger Collector。Jaeger Query 和Jaeger UI的啟動(dòng)方式與Jaeger Collector的啟動(dòng)方案類似,這里不再贅述。

        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ò)觀察應(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ò)訪問(wèn)應(yīng)用接口和提升應(yīng)用接口壓力的方案實(shí)現(xiàn)。通過(guò)訪問(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)用增加訪問(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)的其他分支功能如鏈路步驟查詢、鏈路標(biāo)簽查詢、鏈路中某一步驟參數(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í)
        提示用戶配置文件錯(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)用
        亚洲午夜精品一区二区麻豆av| 免费黄色福利| 熟女丝袜美腿亚洲一区二区三区| 亚洲精品在线视频一区二区| 亚洲国产成人久久三区| 午夜精品一区二区三区在线观看| 亚洲成a人片在线观看中文!!!| 亚洲av永久一区二区三区| 日韩人妻少妇一区二区三区| 亚洲精品综合一区二区| 亚洲天堂av免费在线看| 亚州中文字幕乱码中文字幕| 色多多性虎精品无码av| 长腿校花无力呻吟娇喘的视频| 成人综合亚洲欧美一区h| 日韩av水蜜桃一区二区三区| a级毛片免费观看在线播放| 久久精品成人欧美大片| AV无码系列一区二区三区| 国产一区二区三区啊啊| 精品无码国产一区二区三区av| 波多野结衣国产一区二区三区| 我和丰满老女人性销魂| 亚洲一区二区三区乱码在线中国| 国产97色在线 | 日韩| 91精品国产免费久久久久久青草| 99视频偷拍视频一区二区三区| 无码日韩精品一区二区免费暖暖 | 不卡日韩av在线播放| 久久久无码中文字幕久...| 中文字幕国产精品中文字幕| 亚洲成人av大片在线观看| 免费无码高潮流白浆视频| 亚洲香蕉视频| 中文字幕日韩一区二区不卡| 国产乱子伦精品无码专区| 无码一区二区三区老色鬼| 日本精品一区二区在线看| 加勒比东京热中文字幕| 饥渴的熟妇张开腿呻吟视频| 99久久99久久精品免观看|