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

        ?

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

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

        張愛華 白金峰

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

        中圖分類號:TP391 文獻標志碼:A

        0 引言(Introduction)

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

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

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

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

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

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

        2.1 技術(shù)路線

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

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

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

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

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

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

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

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

        2.2.1 整體架構(gòu)

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

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

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

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

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

        3.1 節(jié)點分配

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

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

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

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

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

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

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

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

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

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

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

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

        4.3 指標展示測試

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

        4.4 其他測試

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

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

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

        5 結(jié)論(Conclusion)

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

        作者簡介:

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

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

        猜你喜歡
        配置文件調(diào)用鏈路
        家紡“全鏈路”升級
        提示用戶配置文件錯誤 這樣解決
        天空地一體化網(wǎng)絡(luò)多中繼鏈路自適應(yīng)調(diào)度技術(shù)
        移動通信(2021年5期)2021-10-25 11:41:48
        搭建簡單的Kubernetes集群
        互不干涉混用Chromium Edge
        核電項目物項調(diào)用管理的應(yīng)用研究
        LabWindows/CVI下基于ActiveX技術(shù)的Excel調(diào)用
        忘記ESXi主機root密碼怎么辦
        基于系統(tǒng)調(diào)用的惡意軟件檢測技術(shù)研究
        基于3G的VPDN技術(shù)在高速公路備份鏈路中的應(yīng)用
        蜜桃tv在线免费观看| 中文字幕第一页亚洲观看| 日韩精品国产一区在线| 色系免费一区二区三区| 国产一级自拍av播放| 国产一区二区黄色录像| 中国农村妇女hdxxxx| 国产精品大屁股1区二区三区| 亚洲av一区二区网址| 在线观看午夜视频一区二区| 四虎影视永久地址www成人| 乱码午夜-极品国产内射| 国产自精品在线| 亚洲成av人片在久久性色av| 日韩精品人妻久久久一二三| 性色av无码久久一区二区三区| 麻豆国产av尤物网站尤物| 国产av三级精品车模| 久久久精品中文字幕麻豆发布| 国产人与zoxxxx另类| 国产精品视频牛仔裤一区| 国产性感丝袜美女av| 操风骚人妻沉沦中文字幕| 亚洲av无码片vr一区二区三区| 亚洲av区无码字幕中文色| 亚洲成a人片77777kkkkk| 人妻少妇精品专区性色anvn| 2018国产精华国产精品| 国产女高清在线看免费观看| 国产黄色三级三级三级看三级| 妺妺窝人体色www婷婷| 国产成人无码一区二区在线播放| 99热门精品一区二区三区无码| 91中文在线九色视频| 精品国品一二三产品区别在线观看 | 国产精品国产午夜免费看福利 | 中文字幕日韩一区二区不卡| 色yeye免费视频免费看| 40分钟永久免费又黄又粗| 亚洲av一二三四五区在线| 国产又大又硬又粗|