本發(fā)明涉及分布式系統(tǒng)、應(yīng)用性能管理,具體地,涉及基于網(wǎng)絡(luò)報文的全鏈路追蹤的方法及系統(tǒng)。
背景技術(shù):
1、全鏈路追蹤是當(dāng)下分布式系統(tǒng)排查定位問題的重要手段之一。分布式系統(tǒng)下每一個用戶請求需要調(diào)用多個子系統(tǒng)才能返回最終結(jié)果,如果某個用戶請求失敗了,或者某個請求耗時比較高,那么需要定位是哪個子系統(tǒng)出問題了。全鏈路追蹤就是一種解決此類問題的有效手段。
2、當(dāng)前全鏈路追蹤已經(jīng)有了一些解決方案,譬如:基于客戶端埋點、基于java字節(jié)碼注入,基于日志收集等?;诳蛻舳寺顸c需要對鏈路上的所有服務(wù)都進(jìn)行改造才能進(jìn)行完整的數(shù)據(jù)采集,投入工作量大,完成時間周期長,有些系統(tǒng)甚至完全不可能改造?;趈ava字節(jié)碼注入的方式僅支持java應(yīng)用,但當(dāng)前分布式系統(tǒng)大多是多語言混合的,該方法很難做到全鏈路覆蓋?;谌罩臼占蕾嚠?dāng)前日志信息的輸出,很難保證日志中存在所需的關(guān)聯(lián)信息。同時這些方法都依賴于全局的關(guān)聯(lián)id才能得到完整的全鏈路記錄,這需要在全系統(tǒng)進(jìn)行統(tǒng)一改造后才可能實現(xiàn)。
3、專利文獻(xiàn)cn109359094b(申請?zhí)枺篶n201810877216.4)公開了一種分布式系統(tǒng)日志全鏈路追蹤方法及裝置。所述方法包括:s1,創(chuàng)建配置文件配置系統(tǒng),按以下流程執(zhí)行:配置集群服務(wù)器;配置集群依賴關(guān)系;配置數(shù)據(jù)邏輯關(guān)系;s2,通過應(yīng)用程序讀取并解析配置文件獲取關(guān)鍵信息;s3,根據(jù)關(guān)鍵信息獲取系統(tǒng)數(shù)據(jù)的生命歷程。所述裝置包括系統(tǒng)配置單元,信息獲取單元和集群遍歷單元。把數(shù)據(jù)日志全鏈路追蹤抽象成三個配置文件,通過相應(yīng)應(yīng)用程序讀取并解析這些配置文件即可獲取每個集群對應(yīng)的服務(wù)器信息、系統(tǒng)的上下游順序和系統(tǒng)數(shù)據(jù)間邏輯關(guān)系這些關(guān)鍵信息,可以實現(xiàn)在無代碼埋點,一鍵式獲取一條系統(tǒng)數(shù)據(jù)的生命歷程,并定位線上或者測試過程中遇到的問題。
技術(shù)實現(xiàn)思路
1、針對現(xiàn)有技術(shù)中的缺陷,本發(fā)明的目的是提供一種基于網(wǎng)絡(luò)報文的全鏈路追蹤方法及系統(tǒng)。
2、根據(jù)本發(fā)明提供的一種基于網(wǎng)絡(luò)報文的全鏈路追蹤方法,包括:
3、步驟s1:在網(wǎng)絡(luò)環(huán)境中通過旁路設(shè)備進(jìn)行數(shù)據(jù)包捕獲生成單獨span記錄;
4、步驟s2:觸發(fā)全鏈路查詢生成全鏈路trace記錄。
5、優(yōu)選地,所述步驟s1包括:
6、步驟s1.1:在網(wǎng)絡(luò)環(huán)境中通過旁路設(shè)備通過tap方法采集各段網(wǎng)絡(luò)流量;
7、步驟s1.2:將采集到的各段網(wǎng)絡(luò)流量進(jìn)行協(xié)議解碼和交易關(guān)聯(lián)得到交易記錄;
8、步驟s1.3:將交易記錄進(jìn)行格式轉(zhuǎn)換得到opentelemetry/opentracing格式的span記錄。
9、優(yōu)選地,所述步驟s1.2中交易關(guān)聯(lián)通過網(wǎng)狀結(jié)構(gòu)表示;其中,所述網(wǎng)狀結(jié)構(gòu)包括點和邊,每個點表示每個子系統(tǒng);每條邊表示兩個子系統(tǒng)存在相互調(diào)用關(guān)系。
10、優(yōu)選地,所述交易記錄使用biz_id,trans_id,duration,ret_code,req內(nèi)容,resp內(nèi)容表示;
11、其中,所述biz_id表示全局用戶請求的業(yè)務(wù)id;
12、所述trans_id表示單段關(guān)聯(lián)字段;
13、所述duration表示單段響應(yīng)時間;
14、所述ret_code表示響應(yīng)碼,用于表示請求是否成功;
15、所述req內(nèi)容和resp內(nèi)容分別表示請求和響應(yīng),并且包含請求響應(yīng)中的全部業(yè)務(wù)信息。
16、優(yōu)選地,所述span記錄使用name,traceid,spanid,starttime,endtime,parent,status,links,events,attributes表示;
17、其中,所述name表示名稱,用于描述當(dāng)前段的含義;
18、所述traceid表示用戶請求的全局id;
19、所述spanid表示單段span的唯一id;
20、所述starttime和所述endtime分別表示起始時間和結(jié)束時間;
21、所述parent表示當(dāng)前span的父節(jié)點;
22、所述status表示請求狀態(tài);
23、所述links表示和其他span記錄的之間的相互關(guān)系;
24、所述events表示單段記錄內(nèi)部發(fā)生的事件;
25、所述attributes表示span記錄相關(guān)聯(lián)的屬性,用戶描述span的特征。
26、根據(jù)本發(fā)明提供的一種基于網(wǎng)絡(luò)報文的全鏈路追蹤系統(tǒng),包括:
27、模塊m1:在網(wǎng)絡(luò)環(huán)境中通過旁路設(shè)備進(jìn)行數(shù)據(jù)包捕獲生成單獨span記錄;
28、模塊m2:觸發(fā)全鏈路查詢生成全鏈路trace記錄。
29、優(yōu)選地,所述模塊m1包括:
30、模塊m1.1:在網(wǎng)絡(luò)環(huán)境中通過旁路設(shè)備通過tap方法采集各段網(wǎng)絡(luò)流量;
31、模塊m1.2:將采集到的各段網(wǎng)絡(luò)流量進(jìn)行協(xié)議解碼和交易關(guān)聯(lián)得到交易記錄;
32、模塊m1.3:將交易記錄進(jìn)行格式轉(zhuǎn)換得到opentelemetry/opentracing格式的span記錄。
33、優(yōu)選地,所述模塊m1.2中交易關(guān)聯(lián)通過網(wǎng)狀結(jié)構(gòu)表示;其中,所述網(wǎng)狀結(jié)構(gòu)包括點和邊,每個點表示每個子系統(tǒng);每條邊表示兩個子系統(tǒng)存在相互調(diào)用關(guān)系。
34、優(yōu)選地,所述交易記錄使用biz_id,trans_id,duration,ret_code,req內(nèi)容,resp內(nèi)容表示;
35、其中,所述biz_id表示全局用戶請求的業(yè)務(wù)id;
36、所述trans_id表示單段關(guān)聯(lián)字段;
37、所述duration表示單段響應(yīng)時間;
38、所述ret_code表示響應(yīng)碼,用于表示請求是否成功;
39、所述req內(nèi)容和resp內(nèi)容分別表示請求和響應(yīng),并且包含請求響應(yīng)中的全部業(yè)務(wù)信息。
40、優(yōu)選地,所述span記錄使用name,traceid,spanid,starttime,endtime,parent,status,links,events,attributes表示;
41、其中,所述name表示名稱,用于描述當(dāng)前段的含義;
42、所述traceid表示用戶請求的全局id;
43、所述spanid表示單段span的唯一id;
44、所述starttime和所述endtime分別表示起始時間和結(jié)束時間;
45、所述parent表示當(dāng)前span的父節(jié)點;
46、所述status表示請求狀態(tài);
47、所述links表示和其他span記錄的之間的相互關(guān)系;
48、所述events表示單段記錄內(nèi)部發(fā)生的事件;
49、所述attributes表示span記錄相關(guān)聯(lián)的屬性,用戶描述span的特征。
50、與現(xiàn)有技術(shù)相比,本發(fā)明具有如下的有益效果:
51、1、本發(fā)明基于旁路的網(wǎng)絡(luò)數(shù)據(jù)包采集,通過解碼可以獲取完整的請求參數(shù)和響應(yīng)數(shù)據(jù),從而在完全不改動現(xiàn)有系統(tǒng)的情況下解決數(shù)據(jù)采集的問題;
52、2、本發(fā)明通過配置單段請求響應(yīng)的關(guān)聯(lián)邏輯,以及多段關(guān)聯(lián)邏輯可以將記錄輸出為標(biāo)準(zhǔn)的opentelemetry/opentracing格式,可以實現(xiàn)存在新舊子系統(tǒng)的混合系統(tǒng);
53、3、本發(fā)明通過并行深度遍歷算法查找和關(guān)聯(lián)全部子系統(tǒng)的追蹤記錄,可以有效解決不存在全局關(guān)聯(lián)id的問題。