非入侵式客戶端運行時數(shù)據(jù)采集方法與系統(tǒng)的制作方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及數(shù)據(jù)采集技術(shù)領(lǐng)域,特別是涉及非入侵式客戶端運行時數(shù)據(jù)采集方法與系統(tǒng)。
【背景技術(shù)】
[0002]客戶端運行時的一些數(shù)據(jù),包括用戶使用哪些功能、使用頻率、客戶端運行效率以及運行時發(fā)生的異常等數(shù)據(jù),對改進(jìn)客戶端的用戶體驗、提高互聯(lián)網(wǎng)業(yè)務(wù)的運營效果都有重要意義,基本上每個客戶端都有采集、統(tǒng)計并上報客戶端運營數(shù)據(jù)的需求。
[0003]但傳統(tǒng)的數(shù)據(jù)采集方法實際上把數(shù)據(jù)采集代碼與處理業(yè)務(wù)邏輯的代碼寫在一起,使得實際的業(yè)務(wù)代碼與采集數(shù)據(jù)的代碼緊密耦合,導(dǎo)致代碼容易出錯、容易泄漏數(shù),存在可靠性和安全性低等問題。
【發(fā)明內(nèi)容】
[0004]基于此,有必要針對現(xiàn)有客戶端運行時數(shù)據(jù)采集方式存在可靠性和安全性低的問題,提供一種可靠性和安全性高的非入侵式客戶端運行時數(shù)據(jù)采集方法與系統(tǒng)。
[0005]—種非入侵式客戶端運行時數(shù)據(jù)采集方法,包括步驟:
[0006]配置需采集客戶端運行數(shù)據(jù)類型,獲得配置數(shù)據(jù);
[0007]根據(jù)所述配置數(shù)據(jù)采集客戶端運行數(shù)據(jù);
[0008]將所述客戶端運行數(shù)據(jù)采用統(tǒng)一且開放的協(xié)議封裝;
[0009]分析所述客戶端運行數(shù)據(jù),當(dāng)客戶端運行發(fā)生異常時,采集并上傳客戶端異常數(shù)據(jù)。
[0010]一種非入侵式客戶端運行時數(shù)據(jù)采集系統(tǒng),包括:
[0011]配置模塊,用于配置需采集客戶端運行數(shù)據(jù)類型,獲得配置數(shù)據(jù);
[0012]采集模塊,用于根據(jù)所述配置數(shù)據(jù)采集客戶端運行數(shù)據(jù);
[0013]封裝模塊,用于將所述客戶端運行數(shù)據(jù)采用統(tǒng)一且開放的協(xié)議封裝;
[0014]上傳模塊,用于分析所述客戶端運行數(shù)據(jù),當(dāng)客戶端運行發(fā)生異常時,采集并上傳客戶端異常數(shù)據(jù)。
[0015]本發(fā)明非入侵式客戶端運行時數(shù)據(jù)采集方法與系統(tǒng),配置需采集客戶端運行數(shù)據(jù)類型,獲得配置數(shù)據(jù),根據(jù)配置數(shù)據(jù)采集客戶端運行數(shù)據(jù),將客戶端運行數(shù)據(jù)采用統(tǒng)一且開放的協(xié)議封裝,分析所述客戶端運行數(shù)據(jù),當(dāng)客戶端運行發(fā)生異常時,采集并上傳客戶端異常數(shù)據(jù)。整個過程中,無需對客戶端業(yè)務(wù)邏輯代碼進(jìn)行修改,客戶端業(yè)務(wù)邏輯代碼和客戶端運行數(shù)據(jù)采集代碼相互獨立,不存在相互耦合影響,代碼不容易出錯和泄露,客戶端數(shù)據(jù)采集的可靠性和安全性大大提高。
【附圖說明】
[0016]圖1為本發(fā)明非入侵式客戶端運行時數(shù)據(jù)采集方法第一個實施例的流程示意圖;
[0017]圖2為本發(fā)明非入侵式客戶端運行時數(shù)據(jù)采集方法第二個實施例的流程示意圖;
[0018]圖3為本發(fā)明非入侵式客戶端運行時數(shù)據(jù)采集系統(tǒng)第一個實施例的結(jié)構(gòu)示意圖;
[0019]圖4為本發(fā)明非入侵式客戶端運行時數(shù)據(jù)采集系統(tǒng)第二個實施例的結(jié)構(gòu)示意圖。
【具體實施方式】
[0020]如圖1所示,一種非入侵式客戶端運行時數(shù)據(jù)采集方法,包括步驟:
[0021]SlOO:配置需采集客戶端運行數(shù)據(jù)類型,獲得配置數(shù)據(jù)。
[0022]客戶端在運行過程中會產(chǎn)生大量的數(shù)據(jù),我們在對客戶端運行數(shù)據(jù)進(jìn)行采集之前需要明確當(dāng)前需要采集哪些數(shù)據(jù),這樣一方面能夠減少數(shù)據(jù)采集、處理量,另外一方面能夠提高數(shù)據(jù)采集的準(zhǔn)確性。具體來說,配置數(shù)據(jù)包括跟蹤客戶端的數(shù)據(jù)類、統(tǒng)計客戶端運行性能數(shù)據(jù)類、客戶端異常情況關(guān)注數(shù)據(jù)類以及客戶端異常情況處理數(shù)據(jù)類。針對不同的客戶端,我們可以在服務(wù)器進(jìn)行統(tǒng)一的配置,以使后續(xù)操作中可以根據(jù)實際情況的需要,采集與服務(wù)器連接各種類型客戶端的數(shù)據(jù)。
[0023]S200:根據(jù)所述配置數(shù)據(jù)采集客戶端運行數(shù)據(jù)。
[0024]根據(jù)配置數(shù)據(jù)采集客戶端運行數(shù)據(jù),這個采集過程可以通過攔截方法調(diào)用實現(xiàn)。針對不同操作系統(tǒng)的客戶端采用不同的攔截方法,具體來說,在其中一個實施例中,步驟S200包括步驟:
[0025]步驟一:識別客戶端類型,其中,所述客戶端類型包括安卓系統(tǒng)客戶端和1S系統(tǒng)客戶端。
[0026]客戶端類型主要包括安卓系統(tǒng)客戶端和1S系統(tǒng)客戶端,例如安卓系統(tǒng)智能手機(jī)和蘋果智能手機(jī)。
[0027]步驟二:當(dāng)客戶端為安卓系統(tǒng)客戶端時,利用JavaAgent技術(shù)修改所述配置數(shù)據(jù)指定的類,編譯修改后的字節(jié)碼,并對不同的數(shù)據(jù)采集需求植入不同的數(shù)據(jù)采集代碼,更新配置數(shù)據(jù)。
[0028]步驟三:當(dāng)客戶端為1S系統(tǒng)客戶端時,利用Method Swizzling技術(shù)對所述配置數(shù)據(jù)添加代碼更新配置數(shù)據(jù)。
[0029]步驟四:根據(jù)更新后的配置數(shù)據(jù)采集客戶端運行數(shù)據(jù)。
[0030]對安卓系統(tǒng)客戶端而言,利用JavaAgent技術(shù)修改配置數(shù)據(jù)指定的類,編譯后的字節(jié)碼,并可按下述原理對不同的數(shù)據(jù)采集需求植入不同的數(shù)據(jù)采集代碼,更新配置數(shù)據(jù);對于1S客戶端而言,利用Method Swizzling技術(shù),對可按下述原理添加代碼更新配置數(shù)據(jù),最后根據(jù)更新后的配置數(shù)據(jù)采集客戶端運行數(shù)據(jù)。
[0031]具體原理為:
[0032]I)對于需要統(tǒng)計訪問量的功能,直接在對應(yīng)的統(tǒng)計方法中加入記錄方法已被調(diào)用的代碼即可,這里記錄用戶對客戶端某個功能的使用情況。
[0033]2)對于需要統(tǒng)計客戶端運行性能的功能,如果只需要統(tǒng)計一類數(shù)據(jù),直接在該類數(shù)據(jù)的開頭植入獲取系統(tǒng)時間的代碼,然后在該類數(shù)據(jù)的結(jié)尾植入獲取系統(tǒng)當(dāng)前時間的代碼并計算兩個時間的時間差值;如果需要統(tǒng)計多類數(shù)據(jù)的執(zhí)行時間,只需在第一類數(shù)據(jù)執(zhí)行前和最后一類數(shù)據(jù)執(zhí)行后分別獲取系統(tǒng)時間并計算二者的差值即可。
[0034]3)對于網(wǎng)絡(luò)訪問數(shù)據(jù),自動采集并存儲網(wǎng)絡(luò)類型、網(wǎng)絡(luò)速度數(shù)據(jù)和HTTP (Hypertext transfer protocol,超文本傳送協(xié)議)響應(yīng)狀態(tài)碼數(shù)據(jù),具體做法:對1S客戶端,利用NSURLProtocol替換NSURLConnect1n或者NSURLSess1n的默認(rèn)實現(xiàn),即可攔截HTTP相關(guān)的網(wǎng)絡(luò)數(shù)據(jù)。
[0035]S300:將所述客戶端運行數(shù)據(jù)采用統(tǒng)一且開放的協(xié)議封裝。
[0036]在客戶端運行時,由這些數(shù)據(jù)采集代碼自動地采集數(shù)據(jù)并把搜集到的數(shù)據(jù)異步地傳遞給服務(wù)器,所有采集到的數(shù)據(jù)采用統(tǒng)一、開放的協(xié)議封裝,方便供各類客戶端使用。
[0037]S400:分析所述客戶端運行數(shù)據(jù),當(dāng)客戶端運行發(fā)生異常時,采集并上傳客戶端異常數(shù)據(jù)。
[0038]本發(fā)明非入侵式客戶端運行時數(shù)據(jù)采集方法,配置需采集客戶端運行數(shù)據(jù)類型,獲得配置數(shù)據(jù),根據(jù)配置數(shù)據(jù)采集客戶端運行數(shù)據(jù),將客戶端運行數(shù)據(jù)采用統(tǒng)一且開放的協(xié)議封裝,分析所述客戶端運行數(shù)據(jù),當(dāng)客戶端運行發(fā)生異常時,采集并上傳客戶端異常數(shù)據(jù)。整個過程中,無需對客戶端業(yè)務(wù)邏輯代碼進(jìn)行修改,客戶端業(yè)務(wù)邏輯代碼和客戶端運行數(shù)據(jù)采集代碼相互獨立,不存在相互耦合影響,代碼不容易出錯和泄露,客戶端數(shù)據(jù)采集的可靠性和安全性大大提高。
[0039]如圖2所示,在其中一個實施例中,步驟S200之前還有步驟:
[0040]S120:驗證所述配置數(shù)據(jù)的有效性,當(dāng)驗證成功時,進(jìn)入所述根據(jù)所述配置數(shù)據(jù)采集客戶端運行數(shù)據(jù)的步驟,當(dāng)驗證失敗時,讀取預(yù)設(shè)默認(rèn)配置數(shù)據(jù)。
[0041]預(yù)設(shè)默認(rèn)配置數(shù)據(jù)可以是基于歷史經(jīng)驗數(shù)據(jù)或者專家數(shù)據(jù)預(yù)設(shè)存儲的,當(dāng)配置數(shù)據(jù)驗證不成功時,丟棄步驟SlOO獲得的配置數(shù)據(jù),讀取預(yù)設(shè)默認(rèn)配置數(shù)據(jù)作為有效的配置數(shù)據(jù)進(jìn)入下一步。對配置數(shù)據(jù)進(jìn)行驗證確保配置數(shù)據(jù)的合法、有效性,提高客戶端運行時數(shù)據(jù)采集的準(zhǔn)確性。
[0042]在其中一個實施例中,所述根據(jù)所述配置數(shù)據(jù)采集客戶端運行數(shù)據(jù)具體包括步驟:
[0043]識別客戶端類型,其中,所述客戶端類型包括安卓系統(tǒng)客戶端和1S系統(tǒng)客戶端;
[0044]當(dāng)客戶端為安卓系統(tǒng)客戶端時,利用JavaAgent技術(shù)修改所述配置數(shù)據(jù)指定的類,編譯修改后的字節(jié)碼,并對不同的數(shù)據(jù)采集需求植入不同的數(shù)據(jù)采集代碼,更新配置數(shù)據(jù);
[0045]當(dāng)客戶端為1S系統(tǒng)客戶端時,利用Method Swizzling技術(shù)對所述配置數(shù)據(jù)添加代碼更新配置數(shù)據(jù);
[0046]根據(jù)更新后的配置數(shù)據(jù)采集客戶端運行數(shù)據(jù)。
[0047]在其中一個實施例中,所述分析所述客戶端運行數(shù)據(jù),當(dāng)客戶端運行發(fā)生異常時,采集并上傳客戶端異常數(shù)據(jù)具體包括步驟:
[0048]分析所述客戶端運行數(shù)據(jù),并根據(jù)所述配置數(shù)據(jù)建立客戶端全局默認(rèn)的異常信息米集和處理類;
[0049]當(dāng)客戶端運行發(fā)生異常時,根據(jù)所述客戶端全局默認(rèn)的異常信息采集和處理類對客戶端異常情況進(jìn)行處理,采集并上傳客戶端異常數(shù)據(jù)。
[0050]客戶端發(fā)生異常時,需要對異常進(jìn)行處理,這個處理具體可以是根據(jù)客戶端全局默認(rèn)的異常信息采集和處理類對客戶端異常情況進(jìn)行處理,在處理的同時,采集客戶端異常數(shù)據(jù)并上傳。
[0051]具體做法為:
[0052]a)對于安卓系統(tǒng)客戶端,首先檢測客戶端是否建立了 App