相關(guān)申請
本申請要求于2014年6月24日提交的美國臨時申請no.61/998,321的權(quán)益。以上申請的全部教導(dǎo)通過引用并入本文。
背景技術(shù):
由像卡內(nèi)基·梅隆(carnegiemellon)和靜態(tài)分析工具的供應(yīng)商一樣的機構(gòu)執(zhí)行的許多研究已經(jīng)表明,軟件開發(fā)者花費其20%至25%的時間來編寫新代碼,并且花費其剩余的75%至80%的時間將它們的代碼與其他開發(fā)者的代碼結(jié)合或者修復(fù)它們自己的代碼的錯誤。在任何情況下,修復(fù)除了最平凡錯誤之外的所有錯誤可以花費長時間,特別是如果事務(wù)跨越多個線程、進程或?qū)?。當這些參與的進程在多個物理機器上運行時,問題變得甚至更加復(fù)雜。
技術(shù)實現(xiàn)要素:
一些實施例可以解決現(xiàn)有方式的上述缺陷。一些實施例包括提供優(yōu)點的自動化ntier(也被稱為“n-tier(n層)”或多層)調(diào)試工具,優(yōu)點至少在于其可大大減少在解決復(fù)雜錯誤時所花費的人工小時的數(shù)量。一些實施例的優(yōu)點在于,它們使開發(fā)者能夠快速找出復(fù)雜的問題,由此為他們的雇主節(jié)省大量的時間和資源。一些實施例不需要源代碼可用于它們的操作。因此,在一些實施例中,代碼分析可以在客戶的位置處執(zhí)行,并且還可以擴展到第三方可執(zhí)行文件中。此外,一些實施例可以跨層級來使時間相關(guān),這可能是有利的,因為其可以幫助隔離跨多個層級并且需要保持大量狀態(tài)的復(fù)雜問題。
本公開內(nèi)容針對于促進與一個或多個計算機應(yīng)用(也被稱為“應(yīng)用”)相關(guān)聯(lián)的根本原因分析的系統(tǒng)和方法。在一些實施例中,系統(tǒng)和方法可以在一個或多個計算機應(yīng)用處接收全局時間基準。該一個或多個計算機應(yīng)用中的每個計算機應(yīng)用可以具有對應(yīng)的本地時間基準。在一些實施例中,系統(tǒng)和方法可以使每個本地時間基準與全局時間基準同步。在一些實施例中,系統(tǒng)和方法可以關(guān)于對應(yīng)的本地時間基準來監(jiān)視一個或多個計算機應(yīng)用的至少一個計算機指令。在一些實施例中,系統(tǒng)和方法可以監(jiān)視至少一個計算機指令的執(zhí)行、加載、實現(xiàn)和/或存儲器分配。在一些實施例中,系統(tǒng)和方法可以取回與至少一個計算機指令相關(guān)聯(lián)的信息。在一些實施例中,系統(tǒng)和方法可以將取回的計算機指令信息的至少一部分轉(zhuǎn)發(fā)給驗證引擎,其中該至少一部分促進驗證引擎處的根本原因分析。
在一些實施例中,系統(tǒng)和方法可以針對網(wǎng)絡(luò)抖動來調(diào)整全局時間基準。在一些示例實施例中,本地時間基準可以通過借助同步分組對網(wǎng)絡(luò)遍歷時間的調(diào)整而被“調(diào)整”到全局時間基準。在一些實施例中,系統(tǒng)和方法可以接收同步消息(或分組),以便使本地時間基準與全局時間基準同步。在一些實施例中,可以周期性地(以可選地可編程的間隔)和/或在用戶命令上發(fā)送同步消息。
在一些實施例中,系統(tǒng)和方法可以監(jiān)視一個或多個計算機指令的至少一個序列和改至少一個序列的對應(yīng)的計算機指令信息。在一些實施例中,一個或多個計算機應(yīng)用可以包括至少兩個計算機應(yīng)用。在一些實施例中,該至少兩個計算機應(yīng)用中的每個計算機應(yīng)用可以具有該至少兩個計算機應(yīng)用中的單個計算機應(yīng)用的不同層級。
在一些實施例中,系統(tǒng)和方法可以在驗證引擎處將取回的計算機指令信息與存儲的計算機指令信息比較,以確定與至少一個計算機指令相關(guān)聯(lián)的意外行為。
在系統(tǒng)和方法的一些實施例中,監(jiān)視還可以包括:在物理計算機的流水線中截取至少一個計算機指令中的一個或多個計算機指令;執(zhí)行與該至少一個計算機指令中的一個或多個計算機指令相關(guān)聯(lián)的動態(tài)二進制插樁以生成至少一個二進制插樁的指令,以及在物理計算機的高速緩沖存儲器中與該至少一個二進制插樁的指令交換至少一個計算機指令中的一個或多個計算機指令。
在系統(tǒng)和方法的一些實施例中,取回的計算機指令信息可以包括以下各項中的至少一項:至少一個計算機指令的名稱、至少一個計算機指令的地址、一個計算機指令的進入狀態(tài)、至少一個計算機指令的輸入變元、至少一個計算機指令的退出狀態(tài)、至少一個計算機指令的時間和至少一個計算機指令的返回值。在系統(tǒng)和方法的一些實施例中,取回的計算機指令信息可以包括至少一個二進制計算機指令,并且該至少一個二進制計算機指令可以包括函數(shù)、系統(tǒng)調(diào)用、線程間通信調(diào)用和進程間通信調(diào)用中的至少一種。
系統(tǒng)和方法的一些實施例可以在多個計算機應(yīng)用處接收全局時間基準。多個計算機應(yīng)用的每個計算機應(yīng)用實例可以具有對應(yīng)的本地時間基準。系統(tǒng)和方法的一些實施例可以關(guān)于對應(yīng)的本地時間基準來監(jiān)視多個計算機應(yīng)用的至少一個計算機指令。系統(tǒng)和方法的一些實施例可以取回與多個計算機應(yīng)用的至少一個計算機指令相關(guān)聯(lián)的信息。系統(tǒng)和方法的一些實施例可以監(jiān)視多個計算機應(yīng)用中的至少兩個計算機應(yīng)用之間的至少一個通信。系統(tǒng)和方法的一些實施例可以取回與至少一個通信相關(guān)聯(lián)的信息。系統(tǒng)和方法的一些實施例可以將取回的計算機指令信息和取回的通信信息的至少一部分轉(zhuǎn)發(fā)給驗證引擎。在一些實施例中,該至少一部分可以促進驗證引擎處的根本原因分析。
在系統(tǒng)和方法的一些實施例中,多個計算機應(yīng)用中的兩個或更多個計算機應(yīng)用可以位于跨網(wǎng)絡(luò)被連接的分離的物理機器上。
在一些實施例中,系統(tǒng)可以包括分析引擎。系統(tǒng)還可以包括可以被通信地耦合到分析引擎的儀器引擎。系統(tǒng)還可包括可以被通信地耦合到分析引擎和/或儀器引擎的驗證引擎。
在一些實施例中,分析引擎和儀器引擎可以包括處理器結(jié)構(gòu),該處理器結(jié)構(gòu)包括一個或多個處理器。在一些實施例中,分析引擎、儀器引擎和驗證引擎可以包括處理器結(jié)構(gòu),該處理器結(jié)構(gòu)包括一個或多個處理器。
一些實施例由于多種原因是有利的。一些實施例的一個優(yōu)點是開發(fā)者不再必須使用調(diào)試器并且放置斷點或添加日志記錄語句來捕獲運行時狀態(tài)以便找出這些問題。一些實施例的另一優(yōu)點是源代碼不必在代碼體內(nèi)被插樁。一些實施例的又一優(yōu)點是它們不需要源代碼插樁,而是可以利用二進制插樁。一些實施例的另一優(yōu)點是開發(fā)者不必重建代碼并且然后在作出決定之前手動觀察結(jié)果。一些實施例的又一優(yōu)點是它們使增強的調(diào)試框架成為可能,因為它們不掩蓋由于競爭條件或定時引起的故障。在一些實施例中,故障不被掩蓋至少是因為:被應(yīng)用的插樁對源代碼不是侵入性的,而是在指令高速緩存中被執(zhí)行的二進制插樁(與源插樁相反),由此避免對定時的改變或源代碼插樁方式的延遲。
一些實施例的又一優(yōu)點是:當一個或多個事務(wù)、進程或線程在不同的機器上運行時,用戶可以容易地保持上下文并且跨每個線程、進程或?qū)蛹墎硎故录嚓P(guān)。一些實施例的另一優(yōu)點是它們可以提供比較來自客戶設(shè)置和開發(fā)者設(shè)置的運行時軌跡以看出哪里出現(xiàn)問題的能力。一些實施例可以使得容易找到問題的源,從而提供減少的上市時間和降低的軟件產(chǎn)品成本的優(yōu)點。
一些實施例可以提供包括跟蹤報告的優(yōu)點,該跟蹤報告包括來自用戶代碼、系統(tǒng)代碼和網(wǎng)絡(luò)活動的每線程和每進程運行時數(shù)據(jù),這可以通過使用公共高分辨率時間服務(wù)器而被容易地同步。一些實施例可以提供以下優(yōu)點:通過在時間上使層重疊,引發(fā)多個層的復(fù)雜事務(wù)可被容易地發(fā)現(xiàn)和檢查和調(diào)試。一些實施例的優(yōu)點是用戶運行時數(shù)據(jù)在測試被完成之后很久可以是可用的。一些實施例的另一優(yōu)點是用戶不需要通過手動或乏味的過程來放置插樁。
一些實施例提供關(guān)于代碼兼容性的優(yōu)點。一些實施例提供的優(yōu)點在于,它們對以包括但不限于c、c++和其他語言的語言(也被稱為“軟件語言”)被編寫的編譯代碼以及以包括但不限于java、ruby、php、perl、python和其他語言的語言被編寫的解釋代碼有效。一些實施例的又一優(yōu)點在于它們對使用以包括但不限于c、c++和其他語言的語言被編寫的編譯代碼和以包括但不限于java、ruby、php、perl、python和其他語言的語言被編寫的解釋代碼的組合被編寫的第三方應(yīng)用有效。
一些實施例可以提供關(guān)于根本原因分析的優(yōu)點。在一些實施例中,可以通過比較在發(fā)生故障和未發(fā)生故障的“良好”條件下獲得的軌跡來執(zhí)行根本原因分析。在一些實施例中,還可以通過比較每個函數(shù)的已知輸入或輸出參數(shù)并檢查它們的運行時狀態(tài)來執(zhí)行根本原因分析。在一些實施例中,根本原因分析可以用來準確地找出計算機應(yīng)用的已知良好狀態(tài)與已知不良狀態(tài)之間的分歧點。
附圖說明
根據(jù)如在附圖中示出的對本公開內(nèi)容的示例實施例的以下更具體的描述,前述內(nèi)容將是顯而易見的,在附圖中在不同的視圖中相似的附圖標記指代相同的部分。附圖不一定是成比例的,在圖示本公開內(nèi)容的實施例時進行強調(diào)。
圖1圖示了多層過程中的斷點。
圖2圖示了多層或多進程應(yīng)用的示例。
圖3圖示了本公開內(nèi)容的實施例中的用于促進與一個或多個計算機應(yīng)用相關(guān)聯(lián)的根本原因分析的示例方法的流程圖。
圖4圖示了圖3的流程圖的示例實施例系統(tǒng)。
圖5圖示了本公開內(nèi)容的實施例中的在運行時對用戶代碼進行插樁。
圖6圖示了本公開內(nèi)容的實施例中的多層事件相關(guān)顯示。
圖7a圖示了本公開內(nèi)容的實施例中的客戶端和分析引擎的示例框圖。
圖7b圖示了用來在圖7a的客戶端和分析引擎之間傳輸數(shù)據(jù)的示例協(xié)議數(shù)據(jù)單元(pdu)。
圖8圖示了其中可以實現(xiàn)本公開內(nèi)容的實施例的計算機網(wǎng)絡(luò)或類似的數(shù)字處理環(huán)境。
圖9圖示了圖8的計算機系統(tǒng)中的計算機(例如,客戶端處理器/設(shè)備或服務(wù)器計算機)的示例內(nèi)部結(jié)構(gòu)的示圖。
具體實施方式
下面是對本公開內(nèi)容的示例實施例的描述。
本文引用的所有專利、公開的申請和參考文獻的教導(dǎo)通過引用而整體并入。
如在一些實施例中的,現(xiàn)代計算機應(yīng)用可以包括許多層(例如,多層體系結(jié)構(gòu),其是可以使呈現(xiàn)、計算機應(yīng)用處理和數(shù)據(jù)管理分離的客戶端—服務(wù)器體系結(jié)構(gòu))。一些實施例可以包括但不限于瀏覽器層、框架層、業(yè)務(wù)或應(yīng)用邏輯層和數(shù)據(jù)庫層。當作為層中的某一用戶動作的結(jié)果而發(fā)起事務(wù)時,可以在一起提供應(yīng)用的功能的n層中的相關(guān)計算機應(yīng)用中觸發(fā)事件的級聯(lián)。在如本文所描述的一些實施例中,容易記錄和確定這樣的故障在多層計算機應(yīng)用的代碼中的何處發(fā)生。一些實施例克服了當嘗試在所有層中的操作代碼中設(shè)置斷點或某種形式的日志時用戶面臨的挑戰(zhàn),因為一些實施例不需要這樣的斷點或日志記錄。
一些實施例包括對計算機應(yīng)用(例如,軟件應(yīng)用或軟件)的調(diào)試,其中計算機應(yīng)用的功能被分布在一個或多個線程、進程和/或?qū)又小_@樣的軟件可以包括嵌入式軟件的組合,包括但不限于移動設(shè)備中的嵌入式軟件和/或在個人計算設(shè)備上運行的桌面軟件(包括但不限于數(shù)據(jù)中心中的或在服務(wù)器上運行的膝上型、臺式和/或基于web的計算機應(yīng)用軟件)。軟件應(yīng)用還可以包括解釋代碼或者編譯代碼,該解釋代碼包括但不限于java或腳本、ruby、php,該編譯代碼包括但不限于以c或c++編寫的代碼。應(yīng)用層或進程可以在包括但不限于移動、臺式、膝上型和/或服務(wù)器平臺的一個或多個計算平臺上運行。在一些實施例中,軟件開發(fā)者用戶可以對在其自身或第三方應(yīng)用中的任何位置(包括但不限于框架、堆棧和/或庫)中出現(xiàn)的錯誤進行故障尋找,無論是不穩(wěn)定的還是一致的。一些實施例可以將一個或多個軟件錯誤向下隔離到代碼段或代碼行,即使一個或多個軟件錯誤由第三方代碼引起。
調(diào)試技術(shù)的概述
調(diào)試技術(shù)可用于調(diào)試單層或多層計算機應(yīng)用,或單進程或多進程計算機應(yīng)用。一種調(diào)試技術(shù)是基于調(diào)試器的代碼調(diào)試,如圖1中所示。使用這樣的技術(shù),大多數(shù)集成開發(fā)環(huán)境提供調(diào)試和跟蹤功能。在基于調(diào)試器的代碼調(diào)試中,計算機應(yīng)用開發(fā)者(例如用戶、開發(fā)者或應(yīng)用開發(fā)者)運行鏡像的調(diào)試版本并創(chuàng)建斷點和/或跟蹤點。當計算機應(yīng)用運行并遇到斷點時,計算機應(yīng)用開發(fā)者可以檢查不同的變量并且用手或通過跟蹤點自動地記錄預(yù)定義變量的選擇的狀態(tài)。如圖1中所示,如果計算機應(yīng)用100包括許多進程(統(tǒng)稱為102、104、106),則單獨的斷點可被放置在每個進程(102、104和106中的每一個)中。當斷點在進程1(元素102)中被觸發(fā)時,其他進程(104、106)也可被停止,從而使得計算機應(yīng)用的狀態(tài)可被捕獲。以這種方式處理斷點可能是困難的、復(fù)雜的、繁瑣的、麻煩的或不切實際的。
一些實施例克服了基于調(diào)試器的代碼調(diào)試的上述缺陷。鑒于一些實施例不需要源代碼以用于調(diào)試,一些實施例至少在沒有源代碼可用于施加斷點的情況(包括但不限于組成線程和進程是沒有源代碼可用于施加斷點的第三方二進制文件的情況)下不遭受基于調(diào)試器的代碼調(diào)試的缺陷。與基于調(diào)試器的代碼調(diào)試中不同,一些實施例可以成功地調(diào)試間歇地(例如,在某些時間但不在其它時間)發(fā)生的復(fù)雜的暫態(tài)問題。因為一些實施例不需要放置斷點,因此一些實施例不會遭受基于調(diào)試器的代碼調(diào)試的缺陷,其中放置斷點的動作可充分地改變產(chǎn)品,使得現(xiàn)在的瞬態(tài)行為可能不會表現(xiàn)其本身。與基于調(diào)試器的代碼調(diào)試不同,在一些實施例中,計算機應(yīng)用可以用不同的時序約束來運行,因為用戶線程可以運行附加代碼。鑒于一些實施例不依賴于源代碼,不同于基于調(diào)試器的調(diào)試,一些實施例可以在客戶位置被使用,即使當在該位置處沒有可用的源代碼時。
另一種調(diào)試技術(shù)是基于日志的代碼調(diào)試。開發(fā)者可以在源代碼中放置日志語句。這養(yǎng)的方式比基于斷點的調(diào)試有一個好處,因為應(yīng)用狀態(tài)不必被手動捕獲。開發(fā)者既不必手動捕獲狀態(tài),也不需要停止下游線程和進程。遺憾的是,開發(fā)者可能不總是提前知道開發(fā)者為了隔離正被調(diào)試的問題所應(yīng)插樁的代碼。當開發(fā)者處理由合作開發(fā)者編寫的代碼時,這是一個甚至更復(fù)雜的問題。通常,添加日志消息的這樣的過程是增量過程。發(fā)現(xiàn)在哪里放置插樁可能是具有試錯嘗試的迭代過程。作為結(jié)果,基于日志的代碼調(diào)試可能有助于調(diào)試簡單的問題。然而,隨著問題的復(fù)雜性增加,確定正確的插樁集合對于大多數(shù)開發(fā)者來說可能變得非常乏味和令人沮喪。另外,添加源代碼插樁的過程可能改變代碼的行為,并且因此,原始問題可能不再顯示其自身(例如,問題可能被掩蓋或不可檢測)。此外,這一過程無法在客戶位置被使用,因為在該位置沒有可用的源代碼。一些實施例可以補救關(guān)于基于日志的代碼調(diào)試的上述缺陷。
又一種調(diào)試技術(shù)是動態(tài)代碼調(diào)試200,如圖2中所示。像dynatrace一樣的一些商業(yè)工具將二進制代碼自動注入現(xiàn)有的用戶java代碼中。像newrelic一樣的其他工具可以從像ruby和php一樣的腳本捕獲足夠的狀態(tài)。因此,當aid(或aide)java代碼運行或php/ruby腳本運行時,新插樁的代碼可以生成具有用于該層或線程(或進程)的參數(shù)信息的運行時調(diào)用棧跟蹤。這樣的信息可以使得用戶能夠確定java、php、ruby或其他腳本語言代碼如何與其周圍的計算環(huán)境的其余部分交互。如圖2中所示,商業(yè)工具(包括但不限于dynatrace或newrelic)可以為邏輯層212而不是為瀏覽器層202(其使得用戶能夠通過個人計算機或pc客戶端204通過網(wǎng)絡(luò)206向應(yīng)用服務(wù)器210通信)、框架層214或后端層220捕獲足夠的運行時狀態(tài)。如果框架層214未被正確配置,則即使邏輯層212被正確編碼,邏輯層212代碼也可能不正確地表現(xiàn)。例如,如果框架層214中的休眠層未正確設(shè)置,則取回(通過網(wǎng)絡(luò)216通信地耦合到框架層214的后端層220的)數(shù)據(jù)庫224的記錄中的字段的簡單查詢可能導(dǎo)致隨著整個數(shù)據(jù)庫內(nèi)容被遞送給邏輯層212而生成大量查詢。調(diào)試為什么存儲器使用突然迅速上升或為什么取讀一個記錄用sql查詢淹沒sql數(shù)據(jù)庫222可能需要大量的時間和資源。更一般地,由于配置不當?shù)拇a(自己或第三方)而被引入的調(diào)試錯誤可能是具有挑戰(zhàn)性的。一些實施例補救了關(guān)于動態(tài)代碼調(diào)試的上述缺陷。
實施例的優(yōu)點
與基于調(diào)試器的代碼調(diào)試、基于日志的代碼調(diào)試和/或動態(tài)代碼調(diào)試相比,一些實施例可提供優(yōu)點。其他實施例可結(jié)合該方法和系統(tǒng),采用代碼調(diào)試、基于日志的代碼調(diào)試和/或動態(tài)代碼調(diào)試或修改形式的代碼調(diào)試、基于日志的代碼調(diào)試和/或動態(tài)代碼調(diào)試中的一個或多個。
一些示例實施例不需要訪問源代碼。因此,一些示例實施例克服了調(diào)試共同開發(fā)者的復(fù)雜或難讀的代碼或調(diào)試第三方復(fù)雜或難讀的代碼的挑戰(zhàn)。鑒于一些實施例不需要源代碼插樁,一些實施例不會遭受插樁改變的缺陷,該缺陷導(dǎo)致新代碼不展現(xiàn)與發(fā)布的代碼相同的時序假象(artifact)。這樣,一些實施例不遭受以下缺陷:放置源插樁的動作可能掩蓋代碼中的真實問題。
在一些實施例中,用戶避免挫敗,因為不要求他們具有放置源代碼插樁的經(jīng)驗,并且不要求他們找到插樁的混合,這否則在沒有一些實施例的情況下是緩慢的、手動的或迭代的過程。這樣,如果問題是配置不良的代碼之一,則一些實施例不需要對由應(yīng)用中的不同層、線程或進程生成的數(shù)據(jù)進行冗長和手動的相關(guān)。一些實施例可以提供如這里在本公開內(nèi)容中所描述的其他優(yōu)點。
自動化根本原因分析概述
一些實施例通過創(chuàng)建不改變應(yīng)用的原始本地代碼并且仍然管理以在代碼被執(zhí)行之前即時放置插樁的機制(例如,二進制插樁)來使得調(diào)試過程簡單且獨立于開發(fā)者的技能集。另外,在一些實施例中,產(chǎn)品的各層可以接收針對周期性網(wǎng)絡(luò)延遲而被適當調(diào)整的公共時基(例如,全局時間基準),從而使得即使每個層可能看起來異步地運行,但是總體上,各層可以參考相同的時基,并且因此,諸如調(diào)用棧之類的運行時數(shù)據(jù)可以在時間上重疊。這樣,在一些實施例中,事務(wù)可以按照時間有序的方式出現(xiàn)在最終日志中,而無論哪個層正在執(zhí)行哪個代碼。
另外,在一些實施例中,對于每層,來自用戶代碼(包括但不限于原生、java或腳本代碼)、系統(tǒng)代碼(包括但不限于系統(tǒng)調(diào)用,其可以是操作系統(tǒng)或os依賴的)、網(wǎng)絡(luò)代碼(包括但不限于進程之間的套接字交換)的運行時數(shù)據(jù)可以是重疊的。這樣,在一些實施例中,用戶可以隨著來自多個層的調(diào)用棧在時間上發(fā)生而快速地掃描這些調(diào)用棧。
在一些實施例中,通過比較來自一個或多個測試用例的已知良好實例(包括但不限于在裝運產(chǎn)品之前由質(zhì)量保證執(zhí)行的詳細測試或回歸測試產(chǎn)生的那些)的調(diào)用棧和從客戶部署產(chǎn)生的那些,容易發(fā)現(xiàn)軌跡開始發(fā)散的地方。這樣,在一些實施例中,即使對于缺乏經(jīng)驗的開發(fā)者來說,標識問題的根本原因也是容易的。
自動化根本原因分析過程
圖3圖示了用于促進與一個或多個計算機應(yīng)用(和/或計算機應(yīng)用的層)相關(guān)聯(lián)的根本原因分析的示例方法(和系統(tǒng))300的流程圖。方法(和系統(tǒng))300可以促進與一個或多個計算機應(yīng)用(例如,計算機應(yīng)用層)相關(guān)聯(lián)的根本原因分析。在一些實施例中,方法(和系統(tǒng))300可以在一個或多個計算機應(yīng)用處接收全局時間基準302。一個或多個計算機應(yīng)用中的每個計算機應(yīng)用可以具有對應(yīng)的本地時間基準。在一些實施例中,系統(tǒng)和方法300可以使每個本地時間基準與全局時間基準同步304。
一些實施例可以周期性地使本地時間基準與全局時間基準相關(guān)以解決網(wǎng)絡(luò)抖動。在一些實施例中,每個計算機應(yīng)用(或?qū)?可以包括一組或多組記錄,其包括格式為{本地高分辨率定時器,公共或全局網(wǎng)絡(luò)高分辨率定時器}的定時器數(shù)據(jù)的有序?qū)?。一些實施例可以包括本地和全局定時器之間的周期性同步,這由此可以克服定時漂移和/或往返延遲的缺陷。在一些實施例中,系統(tǒng)和方法可以針對網(wǎng)絡(luò)抖動來調(diào)整全局時間基準。
在一些示例實施例中,本地時間基準可以通過借助于同步分組(或同步脈沖或信號)對網(wǎng)絡(luò)遍歷時間的調(diào)整而被“調(diào)整”為全局時間基準。在一些實施例中,系統(tǒng)和方法可以接收同步消息(或分組或脈沖或信號),以便使本地時間基準與全局時間基準同步。在一些實施例中,可以周期性地(以可選地可編程的間隔)和/或在用戶命令上發(fā)送同步消息。
在一些實施例中,方法和系統(tǒng)300可以在每個計算機應(yīng)用(或計算機應(yīng)用的每層)處接收公共(全局)時間基準。在一些實施例中,方法和系統(tǒng)300可以在每個計算機應(yīng)用(和/或每個應(yīng)用層)處接收公共(全局)時間基準。在一些實施例中,方法和系統(tǒng)300可以通過使用共享庫來接收公共(全局)時間基準,該共享庫周期性地聯(lián)系向每個計算機應(yīng)用(和/或每個應(yīng)用層)發(fā)送出高分辨率(在一些實施例中,64位分辨率或更高,但不限于此)時間的服務(wù)器。
根據(jù)一些實施例,每個層(和/或每個計算機應(yīng)用)可以使它的本地高分辨率定時器(在一些實施例中,64位分辨率或更高,但不限于此)與針對網(wǎng)絡(luò)抖動而被調(diào)整的公共時間基準高分辨率定時器相關(guān)。在一些實施例中,可以周期性地(以規(guī)則的間隔、不規(guī)則的間隔或以基于用戶命令的時間)調(diào)整公共時間基準高分辨率定時器。在一些實施例中,可以注意關(guān)閉可以使得與本地高分辨率定時器相關(guān)聯(lián)的本地機器基于其負載改變其頻率的代碼。
在一些實施例中,系統(tǒng)和方法300可以關(guān)于對應(yīng)的本地時間基準來監(jiān)視306一個或多個計算機應(yīng)用的至少一個計算機指令。在一些實施例中,系統(tǒng)和方法300可以取回與至少一個計算機指令相關(guān)聯(lián)的信息308。在一些實施例中,系統(tǒng)和方法300可以將取回的計算機指令信息的至少一部分轉(zhuǎn)發(fā)310給驗證引擎,其中該至少一部分促進驗證引擎處的根本原因分析。
在一些實施例中,系統(tǒng)和方法300可以監(jiān)視306一個或多個計算機指令的至少一個序列和至少一個序列的對應(yīng)的計算機指令信息。在一些實施例中,一個或多個計算機應(yīng)用可以包括至少兩個計算機應(yīng)用。在一些實施例中,至少兩個計算機應(yīng)用中的每個計算機應(yīng)用可以具有至少兩個計算機應(yīng)用的單個計算機應(yīng)用的不同層。在一些實施例中,一個或多個計算機應(yīng)用中的每個計算機應(yīng)用可以包括一個或多個線程和/或進程。
在一些實施例中,系統(tǒng)和方法300可以在驗證引擎處將取回的計算機指令信息與存儲的計算機指令信息比較312,以確定與至少一個計算機指令相關(guān)聯(lián)的意外行為。
在系統(tǒng)和方法300的一些實施例中,監(jiān)視306還可以包括:在物理計算機的流水線中截取所述至少一個計算機指令中的一個或多個計算機指令;執(zhí)行與所述至少一個計算機指令中的一個或多個計算機指令相關(guān)聯(lián)的動態(tài)二進制插樁以生成至少一個二進制插樁的指令,以及在物理計算機的高速緩沖存儲器中與至少一個二進制插樁的指令交換至少一個計算機指令中的一個或多個計算機指令。
一些實施例可以接收用戶代碼運行時數(shù)據(jù)。一些實施例可以接收由另一線程或進程生成的用戶運行時代碼數(shù)據(jù)。其他實施例可以生成用戶代碼運行時數(shù)據(jù)。其他實施例可以生成由另一線程或進程使用的用戶代碼運行時數(shù)據(jù)。在一些實施例中,儀器引擎可以在運行時攔截來自計算機應(yīng)用(或?qū)?的二進制指令。在其他實施例中,應(yīng)用層虛擬機可以在運行時攔截來自計算機應(yīng)用(或?qū)?的二進制指令。在一些實施例中,這樣的二進制指令可以在中央處理器單元(cpu)的流水線中被攔截并且被與插樁版本的二進制指令交換,從而使得插樁捕獲計算機指令的名稱(例如,函數(shù)和/或系統(tǒng)調(diào)用)、其狀態(tài)(進入)和/或其輸入變元。當計算機指令返回時,可以捕獲計算機指令的名稱和/或地址以及計算機指令的狀態(tài)(例如,接收、傳輸、進入或退出狀態(tài))及其返回值,并且將其報告到日志(例如,本地日志)中。在一些實施例中,在測試用例結(jié)束時,這些報告(例如,本地日志)可被轉(zhuǎn)發(fā)給驗證引擎(例如,給分析服務(wù)器,或者在與計算機應(yīng)用中的一個或多個應(yīng)用相同的機器上本地)以進行進一步處理。在一些實施例中,被轉(zhuǎn)發(fā)給驗證引擎的報告中的一個或多個報告可以包括本地和遠程定時器之間的周期性時間同步消息(例如,本地和遠程時間基準)。在一些實施例中,分析服務(wù)器可以為每層將本地時間更新為“網(wǎng)絡(luò)”時間。
在一些實施例中,位于每層(或計算機應(yīng)用)處的儀器引擎可以攔截用戶函數(shù)調(diào)用、系統(tǒng)調(diào)用、套接字調(diào)用、進程間調(diào)用和線程間調(diào)用,包括但不限于共享存儲器或管道。在其他實施例中,位于每層(或計算機應(yīng)用)處的虛擬機可以攔截用戶函數(shù)調(diào)用、系統(tǒng)調(diào)用、套接字調(diào)用、進程間調(diào)用和線程間調(diào)用。在一些實施例中,每種類型的運行時“軌跡”可以被加時間戳并且報告(例如,寫入)到本地日志中。一些實施例可以基于編譯代碼和解釋代碼二者來對運行時“軌跡”加時間戳和報告。在一些實施例中,這些日志可以被轉(zhuǎn)發(fā)(例如,導(dǎo)出)給上述驗證引擎。
在一些實施例中,層(或計算機應(yīng)用)可以位于相同的物理機器上。在一些實施例中,層(或計算機應(yīng)用)可以位于與驗證引擎相同的物理機器上。在一些實施例中,驗證引擎可以位于與本公開內(nèi)容中先前描述的儀器引擎和分析引擎相同的物理機器處。在一些實施例中,層(或計算機應(yīng)用)可以位于一個或多個不同的物理機器上。在一些實施例中,層(或計算機應(yīng)用)可以位于與驗證引擎相同的物理機器上。在一些實施例中,驗證引擎可以位于與本公開內(nèi)容中先前描述的儀器引擎和分析引擎不同的物理機器處。
在系統(tǒng)和方法300的一些實施例中,(取回步驟308的)取回的計算機指令信息可以包括以下各項中的至少一項:至少一個計算機指令的名稱或地址、至少一個計算機指令的地址、至少一個計算機指令的進入狀態(tài)、至少一個計算機指令的輸入變元、至少一個計算機指令的退出狀態(tài)、至少一個計算機指令的時間以及至少一個計算機指令的返回值。在系統(tǒng)和方法的一些實施例中,取回的計算機指令信息可以包括至少一個二進制計算機指令,并且至少一個二進制計算機指令包括函數(shù)、系統(tǒng)調(diào)用、線程間通信調(diào)用和進程間通信調(diào)用中的至少一種。
在一些實施例中,鑒于來自每個層、進程和/或線程的運行時數(shù)據(jù)可以針對相同的網(wǎng)絡(luò)時間被記錄,一些實施例可以從每個層接收數(shù)據(jù),以及甚至觀察導(dǎo)致線程間或進程間通信(例如,事務(wù))的代碼。在一些示例實施例中,如果一個層可以通過通信協(xié)議(包括但不限于傳輸控制協(xié)議(tcp)套接字、共享存儲器或管道)與另一層通信。
系統(tǒng)和方法300的一些實施例可以在多個計算機應(yīng)用處接收302可以針對網(wǎng)絡(luò)抖動被周期性地調(diào)整的全局時間基準。在系統(tǒng)和方法300的一些實施例中,多個計算機應(yīng)用中的兩個或更多個計算機應(yīng)用可以位于跨網(wǎng)絡(luò)被連接的分離的物理機器上。多個計算機應(yīng)用的每個計算機應(yīng)用實例可以具有對應(yīng)的本地時間基準。系統(tǒng)和方法300的一些實施例可以關(guān)于對應(yīng)的本地時間基準來監(jiān)視306多個計算機應(yīng)用的至少一個計算機指令。系統(tǒng)和方法300的一些實施例可以取回308與多個計算機應(yīng)用的至少一個計算機指令相關(guān)聯(lián)的信息。系統(tǒng)和方法300的一些實施例可以監(jiān)視306多個計算機應(yīng)用中的至少兩個計算機應(yīng)用之間的至少一個通信。系統(tǒng)和方法300的一些實施例可以取回308與至少一個通信相關(guān)聯(lián)的信息。系統(tǒng)和方法300的一些實施例可以將取回的計算機指令信息和取回的通信信息的至少一部分轉(zhuǎn)發(fā)310給驗證引擎。
在一些實施例中,成的軌跡的至少一部分可以促進驗證引擎處的根本原因分析。一些實施例可以包括確定與使用上述方法和系統(tǒng)而被取回的信息相關(guān)的錯誤、警告、失誤或故障的根本原因的多種方法。一些實施例可以通過將至少一個已知計算機指令(諸如函數(shù)或應(yīng)用編程接口或者說api)與它們的已知范圍和/或返回值比較來發(fā)現(xiàn)錯誤輸入變元或返回值。在示例實施例中,計算機指令可以接受預(yù)期在值0和10之間變化的整數(shù)輸入?yún)?shù)。這樣,在示例實施例中,如果檢測到具有大于值10的輸入值的該計算機指令的實例,則可以從檢測點執(zhí)行反向跟蹤,以便確定什么導(dǎo)致該整數(shù)輸入?yún)?shù)超過邊界。
在一些實施例中,來自每個計算機應(yīng)用(例如,層)的跟蹤報告可以按照逗號分隔值(csv)格式文件被保存。這些csv文件可以對每個層可用。當儀器引擎(或在一些實施例中為虛擬機)在觀察到錯誤的客戶位置處運行時,用戶(包括開發(fā)者或他們的指定代理)可以運行他們在裝運產(chǎn)品時運行的相同測試用例,以便取回與計算機指令相關(guān)聯(lián)的信息。然后可以使用標準“diff”技術(shù)來比較所生成的csv文件。在一些實施例中,可以容易地發(fā)現(xiàn)和準確地找出發(fā)散點。
自動化根本原因分析系統(tǒng)
圖4圖示了圖3的流程圖的示例實施例系統(tǒng)400。圖4還圖示了在本公開內(nèi)容的實施例中提供公共時基。如圖4中所示,一個或多個計算機應(yīng)用(或?qū)?402、404、406中的每個計算機應(yīng)用(或?qū)?可以具有對應(yīng)的本地時間基準。在一些實施例中,與每個應(yīng)用(或?qū)?402、404、406相關(guān)聯(lián)的分析引擎可以通過網(wǎng)絡(luò)408使應(yīng)用(或?qū)?402、404、406的給定本地時間基準與由服務(wù)器410生成的全局時間基準同步。在一些實施例中,系統(tǒng)400可以針對網(wǎng)絡(luò)抖動來調(diào)整全局時間基準。
在一些示例實施例中,本地時間基準可以通過借助同步分組、同步脈沖或同步信號對網(wǎng)絡(luò)遍歷時間的調(diào)整而被“調(diào)整”為全局時間基準。在一些實施例中,服務(wù)器410可以生成同步消息(或分組或脈沖或信號),其被應(yīng)用(或?qū)?402、404、406中的每個接收以便使每個應(yīng)用(或?qū)?的本地時間基準與全局時間基準同步。在一些實施例中,可以周期性地(以可選地可編程的間隔)和/或在用戶命令上發(fā)送同步消息。在一些實施例中,本地時間基準、全局時間基準以及它們之間的對應(yīng)的同步可被實現(xiàn)為物理時鐘電路。
在一些實施例中,儀器引擎可以關(guān)于對應(yīng)的本地時間基準來監(jiān)視一個或多個計算機應(yīng)用的至少一個計算機指令。在一些實施例中,儀器引擎可以取回與至少一個計算機指令相關(guān)聯(lián)的信息。在一些實施例中,儀器引擎可以將取回的計算機指令信息的至少一部分轉(zhuǎn)發(fā)給驗證引擎,其中該至少一部分促進驗證引擎處的根本原因分析。在一些實施例中,驗證引擎可以位于服務(wù)器410上。在一些實施例中,驗證引擎可以位于與計算機應(yīng)用(或?qū)?402、404、406相關(guān)聯(lián)的物理機器中的一個或多個物理機器上。
指令的插樁
如圖5中所示,在一些實施例中,儀器引擎500可以在運行時攔截來自計算機應(yīng)用(或?qū)?的二進制計算機指令502、504。二進制計算機指令502、504可以包括函數(shù)、系統(tǒng)調(diào)用、線程間通信和進程間通信中的至少一種。在一些實施例中,這樣的二進制指令502、504可以在中央處理器單元(cpu)的流水線中被攔截,并且被與插樁版本的二進制指令交換,從而使得插樁捕獲計算機指令的名稱(例如,函數(shù)和/或系統(tǒng)調(diào)用)512或522、其狀態(tài)(例如,進入狀態(tài)或退出狀態(tài))510或520和/或其輸入變元514或524。當計算機指令502或504返回時,計算機指令的名稱512或522可以與計算機指令的狀態(tài)(例如,退出狀態(tài))510或520及其返回值一起被捕獲,并且被報告到被轉(zhuǎn)發(fā)給驗證引擎的日志(例如,本地日志)中。
跨層使事件相關(guān)
圖6圖示了本公開內(nèi)容的實施例中的多層事件相關(guān)顯示600。在一些實施例中,可以針對相同的網(wǎng)絡(luò)時間記錄來自每個層、進程和/或線程的運行時數(shù)據(jù)。一些實施例可以呈現(xiàn)來自每個層的數(shù)據(jù)并觀察導(dǎo)致線程間和/或進程間通信的代碼。在一些示例實施例中,如果一個層通過傳輸控制協(xié)議(tcp)套接字與另一個通信,則這樣的線程間和/或進程間通信可以在每個參與層中被觀察到。
如圖6中所示,實施例可以包括顯示600,其中用戶可以檢查如在右上角和在y軸650中顯示的不同的參與層640。在圖6中示出的示例實施例中,用戶可以查看分別作為框架層(層4)和數(shù)據(jù)庫層(層8)的層4和層8之間的交互。在圖6中的示例性實施例中,用戶可以查看在給定時間652正在從層發(fā)送628的通信以及正被層接收630的通信。通過在時間上快速遍歷ntier(n-tier或多層)事務(wù)(參見流逝的時間,基準元素652和用于遍歷的用戶鍵654),用戶可以準確地找出復(fù)雜的ntier活動并且使在這樣的層之間的用戶、系統(tǒng)和網(wǎng)絡(luò)調(diào)用之間傳遞的運行時數(shù)據(jù)相關(guān)。顯示600的一些實施例還包括對與可選的過濾器610相關(guān)聯(lián)的網(wǎng)絡(luò)功能620(共同地,用于函數(shù)跟蹤或者說ftrace的624、用于java跟蹤或者說jtrace的624、用于系統(tǒng)跟蹤或者說strace的626、用于發(fā)送者(sender)的628以及用于接收者(receiver)的630)的顯示,可選的過濾器610基于用戶命令從顯示600添加或去除對應(yīng)的網(wǎng)絡(luò)功能元件(622、624、626、628或630)。
監(jiān)視代理和分析引擎基礎(chǔ)架構(gòu)
圖7a描繪了示例監(jiān)視代理和分析引擎基礎(chǔ)設(shè)施的高級框圖。該可以在包括范圍從智能電話、平板、膝上型計算機、臺式機到高端服務(wù)器的計算設(shè)備的各種硬件上配置基礎(chǔ)設(shè)施。如該圖所示,由監(jiān)視代理702執(zhí)行的數(shù)據(jù)收集可以與由分析引擎執(zhí)行的分析分離,以提高應(yīng)用性能。該基礎(chǔ)設(shè)施提供高可用性,以防止黑客破壞其對惡意軟件攻擊的保護。監(jiān)視代理702與應(yīng)用交互以收集加載時間和運行時數(shù)據(jù)。應(yīng)用701的基礎(chǔ)設(shè)施包括進程存儲器703、第三方庫704、內(nèi)核服務(wù)706和指令流水線707。監(jiān)視代理702的基礎(chǔ)設(shè)施包括儀器和分析引擎(儀器引擎)705、圖形用戶界面(gui)711、客戶端守護進程708、配置數(shù)據(jù)庫709以及流傳輸和壓縮引擎710、以及中央處理單元(cpu)736。應(yīng)用701的本地或遠程用戶738通過像鍵盤、鼠標或類似的i/o設(shè)備的設(shè)備與應(yīng)用交互,或者通過可以通過管道、共享存儲器或套接字建立的通信信道在網(wǎng)絡(luò)上與應(yīng)用交互。作為響應(yīng),應(yīng)用進程703將適當?shù)闹噶罴峙傻街噶盍魉€707中以供執(zhí)行。應(yīng)用還可以利用其自己的或第三方的庫704,諸如libc.so(linux)或msvcrtxx.dll(windows)。當來自這些庫的功能被調(diào)用時,來自這些庫的適當指令也被插入到指令流水線707以供執(zhí)行。此外,應(yīng)用可以利用來自內(nèi)核706的諸如存儲器、文件i/o等的系統(tǒng)資源。以時間排序順序放在一起的來自應(yīng)用、庫和內(nèi)核的這些指令序列交付給定用戶所需的應(yīng)用功能。
當應(yīng)用的代碼開始加載到存儲器中時,儀器和分析引擎(即,儀器引擎)705執(zhí)行若干不同的加載時間動作。一旦所有模塊都已加載,應(yīng)用的檢測指令就生成運行時數(shù)據(jù)??蛻舳耸刈o程序708通過從配置數(shù)據(jù)庫709讀取一個或多個配置文件來在736處初始化cpu中的儀器和分析引擎705、流傳輸引擎710和gui711進程。它還初始化儀器引擎、流傳輸引擎、gui、儀器和分析引擎705及其自身之間的相互通信管道。客戶端守護程序還確保如果包括其自身在內(nèi)的任何監(jiān)視代理進程變得無響應(yīng)或死掉,則其將被重新生成。這確保了監(jiān)視代理702是高可用性企業(yè)級產(chǎn)品。
儀器和分析引擎705將從應(yīng)用收集的負載和運行時數(shù)據(jù)推送到流傳輸引擎中。流傳輸引擎將來自監(jiān)視代理702的原始數(shù)據(jù)封裝到pdu中。然后,它在高帶寬、低延遲通信信道712上將pdu推送到分析引擎728。如果監(jiān)視代理702和分析引擎728位于同一機器上,則該信道可以是存儲器總線。如果這些實體位于不同的硬件上但在相同的物理鄰域中,則信道可以是基于以太網(wǎng)或光纖的傳輸,其允許在實體之間建立遠程連接,以跨因特網(wǎng)傳輸負載和運行時數(shù)據(jù)。
分析引擎728的基礎(chǔ)設(shè)施包括網(wǎng)絡(luò)接口卡(nic)713、分組池714、時間戳引擎715、處理器結(jié)構(gòu)716、散列化引擎717、tcam引擎718、應(yīng)用映射數(shù)據(jù)庫719和線程上下文數(shù)據(jù)庫720,其可以包含由執(zhí)行被系統(tǒng)監(jiān)視的應(yīng)用的一類用戶使用的存儲器地址的表。分析引擎728的基礎(chǔ)設(shè)施還包括內(nèi)容分析引擎721、事件和事件鏈722、事件管理引擎723、事件日志724、應(yīng)用守護進程725、分析引擎配置數(shù)據(jù)庫726、網(wǎng)絡(luò)接口727、儀表板或cms737、sms/smtp服務(wù)器729、otp服務(wù)器730、升級客戶端731、軟件升級服務(wù)器732、軟件鏡像733、事件更新客戶端734和事件升級服務(wù)器735。
在網(wǎng)絡(luò)接口卡713處截取pdu以及協(xié)議頭部,pdu從該網(wǎng)絡(luò)接口卡713被拉出并放入分組池714中。pdu中的時間戳字段由時間戳引擎715填充。這有助于以確保在分組池緩沖區(qū)中沒有分組卡住非常長的時間。
處理器結(jié)構(gòu)716從分組緩沖區(qū)中拉出分組,并且地址字段被散列和替換在分組中的適當位置中。該操作由散列化引擎717執(zhí)行。然后,處理器結(jié)構(gòu)開始以分組到達的次序從分組緩沖區(qū)中移除分組。具有來自加載時間階段的信息的分組被處理,以使得相關(guān)數(shù)據(jù)被提取并存儲在應(yīng)用映射數(shù)據(jù)庫719中。具有來自運行時階段的信息的分組根據(jù)圖5被處理。分析引擎728的效率可以基于處理器結(jié)構(gòu)中的處理器的數(shù)量而被增加或減少。
轉(zhuǎn)換目標數(shù)據(jù)被保存在線程上下文數(shù)據(jù)庫720中,線程上下文數(shù)據(jù)庫720具有用于每個線程的表。處理器結(jié)構(gòu)還利用tcam引擎718來執(zhí)行轉(zhuǎn)換和存儲器區(qū)域搜索。由于處理器結(jié)構(gòu)使用散列執(zhí)行查找,所以使用的實際時間是可預(yù)測的并且非常短。通過仔細選擇結(jié)構(gòu)中的處理器的數(shù)量,可以適當?shù)馗淖兠總€分組的吞吐量。
當分析引擎728執(zhí)行搜索時,其可以不時地發(fā)現(xiàn)關(guān)鍵/管理函數(shù)或系統(tǒng)調(diào)用的無效轉(zhuǎn)換、無效操作,或者在不期望的位置上找到存儲器寫入。在這些情況的每一種情況中,分析引擎728將如在事件和事件鏈數(shù)據(jù)庫722中存儲的策略所描述的編程嚴重性的事件分派給事件管理引擎723。原始事件日志被存儲在事件日志數(shù)據(jù)庫724中。儀表板/cms737還可以訪問事件日志以及顯示應(yīng)用狀態(tài)。
補救動作還與事件和事件鏈數(shù)據(jù)庫722中的每個事件相關(guān)聯(lián)。用戶可以從一系列動作來設(shè)置補救動作,這一系列動作從在一個極端忽略事件到在另一極端終止線程??梢允褂檬录驴蛻舳?34和事件升級服務(wù)器735向分析員推薦所推薦的補救動作。為了改變上述推薦動作,分析員可以相應(yīng)地使用儀表板/cms737。儀表板/cms737提供了gui界面,該gui界面顯示每個受監(jiān)視應(yīng)用的狀態(tài)并允許安全分析員對應(yīng)用具有某些控制,諸如啟動和停止應(yīng)用。當事件被生成時,事件鏈從正常狀態(tài)前進到后續(xù)狀態(tài)。可以采取與新狀態(tài)相關(guān)聯(lián)的補救動作。如果補救動作涉及非忽略動作,則使用sms或smtp服務(wù)器729向安全分析員發(fā)送通知。安全分析員的sms/smtp地址可以使用ldap或其他目錄協(xié)議來確定。從儀表板/cms737啟動或停止應(yīng)用的過程需要提升的特權(quán),故安全分析員必須使用otp服務(wù)器730進行認證。
新事件還可以被創(chuàng)建并被鏈接到事件和事件鏈數(shù)據(jù)庫722中,連同嚴重性和向分析員推薦的補救動作。這允許將針對一個安裝處的新攻擊的唯一事件和事件鏈被分派到其他安裝。為此目的,所有新事件和事件鏈都被加載到事件升級服務(wù)器735中。事件更新客戶端734周期性地連接并認證事件升級服務(wù)器735以取回新事件和事件鏈。事件更新客戶端然后將這些新事件和事件鏈加載到事件和事件鏈數(shù)據(jù)庫722中。內(nèi)容分析引擎721可以開始針對封裝到新事件鏈中的新攻擊來跟蹤應(yīng)用。
正如客戶端守護進程一樣,設(shè)施守護進程725負責啟動在分析引擎728上運行的各種進程。為此目的,它必須從分析引擎配置數(shù)據(jù)庫726讀取配置信息。守護進程還負責對分析引擎728中的所有進程運行心跳輪詢。這確保分析引擎生態(tài)系統(tǒng)中的所有設(shè)備始終處于最高工作狀態(tài)。三個連續(xù)的心跳的丟失表明目標進程沒有反應(yīng)。如果任何進程已經(jīng)過早退出,守護進程將恢復(fù)包括自身在內(nèi)的該進程。
不時地,出于諸如修復(fù)軟件中的錯誤的目的,可以在設(shè)施主機中或在分析引擎728或監(jiān)視代理702中升級軟件。為此目的,升級客戶端731不斷地檢查軟件升級服務(wù)器732,最新軟件在軟件升級服務(wù)器732處可獲得。如果客戶端發(fā)現(xiàn)分析引擎728或監(jiān)視代理702中的實體正在運行較舊的鏡像,則它將允許分析員利用來自軟件升級服務(wù)器732的新鏡像來升級舊鏡像。新鏡像被捆綁在一起作為系統(tǒng)鏡像733。這使得有可能向設(shè)施或主機提供經(jīng)測試的兼容鏡像。如果分析引擎728或監(jiān)視代理702中的子系統(tǒng)的鏡像之一與系統(tǒng)鏡像中的針對相同組件的鏡像不匹配,則所有鏡像將被滾動到先前已知的良好系統(tǒng)鏡像。
用于監(jiān)視代理和分析引擎通信的pdu
圖7b圖示了用來在圖7a中的監(jiān)視代理702和分析引擎728之間傳送數(shù)據(jù)的示例協(xié)議數(shù)據(jù)單元(pdu)。為了使監(jiān)視代理702和分析引擎728彼此有效地工作,它們使用pdu彼此通信。pdu可以特別地被監(jiān)視代理702用來將提取的應(yīng)用的模型和/或收集的運行時數(shù)據(jù)打包以用于向分析引擎728的傳輸。pdu包含要在監(jiān)視代理702和分析引擎728之間傳輸?shù)尼槍γ糠N類型的信息的字段。pdu被劃分為應(yīng)用提供的數(shù)據(jù)部分、生成的hw/cve以及內(nèi)容分析引擎或原始數(shù)據(jù)部分。
應(yīng)用提供的數(shù)據(jù)部分包含來自各種寄存器的數(shù)據(jù)以及放置在該部分的各個字段中的源地址和目標地址。協(xié)議版本包含pdu752的版本號。隨著協(xié)議版本隨時間改變,源和目的地必須能夠繼續(xù)彼此通信。該8位字段描述如由源實體生成的分組的版本號。在協(xié)議版本字段之后是當前未使用的保留字段756。
如圖7所示,應(yīng)用提供的數(shù)據(jù)部分中的下一個字段是消息源/目的地標識符757、753和754,用來在分析引擎基礎(chǔ)設(shè)施內(nèi)交換流量。不時地,圖7中所示的各種實體相互交換流量。并非所有這些設(shè)備都具有或需要ip地址,并且因此,兩個(硬件和主機)查詢路由器引擎使用消息源和目的地字段在內(nèi)部路由流量。某些消息需要跨網(wǎng)絡(luò)去往分析引擎中的實體。為此目的,向?qū)嶓w指派以下id。給定的分析引擎設(shè)施可以具有多于一個加速器卡。每張卡將具有唯一的ip地址;因此,各個實體將具有唯一的id。上述基礎(chǔ)設(shè)施還可以運行多于一個應(yīng)用。由于每個應(yīng)用服務(wù)器將具有唯一的ip地址,因此對應(yīng)的監(jiān)視代理側(cè)實體也將具有唯一的id。
監(jiān)視代理側(cè)實體
1.gui
2.儀器和分析引擎
3.客戶端消息路由器
4.流傳輸引擎
5.客戶端側(cè)守護進程
6.cli引擎
7.客戶端看門狗
8.客戶端壓縮塊
9.客戶端iwarp/rdma/roce以太網(wǎng)驅(qū)動器(100mb/1gb/10gb)
每個pci卡的實體(起始地址=20+n*20)
20.分析引擎toe塊
21.分析引擎pci橋
22.解壓縮塊
23.消息驗證塊
24.分組散列塊
25.時間戳塊
26.消息超時定時器塊
27.統(tǒng)計計數(shù)器塊
28.分析引擎查詢路由器引擎
29.分析引擎輔助
分析引擎主機實體
200.分析引擎pcie驅(qū)動器
201.主機路由引擎
202.內(nèi)容分析引擎
203.日志管理器
204.守護進程
205.web引擎
206.看門狗
207.ipc消息傳送總線
208.配置數(shù)據(jù)庫
209.日志數(shù)據(jù)庫
siem連接器
220.siem連接器1-儀表板/cms
221.siem連接器2-hparcsight
222.siem連接器3-ibmqradar
223.siem連接器4-alienvaultusm
分析引擎基礎(chǔ)設(shè)施實體
230.儀表板/cms
231.smtp服務(wù)器
232.ldap服務(wù)器
233.sms服務(wù)器
234.權(quán)利服務(wù)器
235.數(shù)據(jù)庫備份服務(wù)器
236.otp客戶端
237.otp服務(wù)器
238.校驗和服務(wù)器
239.票務(wù)服務(wù)器
240.事件鏈升級服務(wù)器
241.軟件更新服務(wù)器
所有用戶應(yīng)用
255.用戶應(yīng)用-應(yīng)用pid被用于標識發(fā)出查詢的應(yīng)用
應(yīng)用提供的數(shù)據(jù)部分的另一個字段是消息類型字段,其指示正在傳輸?shù)臄?shù)據(jù)的類型755。在最高級別,存在在各個本地監(jiān)視代理側(cè)實體之間、在分析引擎設(shè)備側(cè)實體之間以及在監(jiān)視代理側(cè)和設(shè)備側(cè)實體之間流動的三種不同類型的消息。另外,需要通過網(wǎng)絡(luò)行進的消息必須符合osi模型和其他協(xié)議。
應(yīng)用提供的數(shù)據(jù)部分的以下字段是包含針對分組779的序列標識符的分組序列號字段。流傳輸引擎將對丟失的分組執(zhí)行錯誤恢復(fù)。為此目的,它需要唯一地標識分組。遞增的有符號64位分組序列號被流傳輸引擎插入,并且僅通過剩余的分析引擎基礎(chǔ)設(shè)施。如果序列號在64位邊界處包裝,則其可以從0重新開始。在諸如心跳或日志消息等的非應(yīng)用分組的情況下,分組序列號可以是-1。
應(yīng)用提供的數(shù)據(jù)部分還包含金絲雀消息字段,其包含用于加密目的的金絲雀761。監(jiān)視代理702和分析引擎728知道如何根據(jù)一些常見但是具有新鮮性質(zhì)的信息(諸如應(yīng)用啟動時間、pid、許可證字符串和授權(quán)用戶名)計算金絲雀。
應(yīng)用提供的數(shù)據(jù)部分還包含在所有消息中使用的通用字段。應(yīng)用源指令地址780、應(yīng)用目的地指令地址758、存儲器起始地址指針759、存儲器結(jié)束地址指針760、應(yīng)用pid762、線程id763、分析引擎到達時間戳764和分析引擎離開時間戳765字段保存通用應(yīng)用數(shù)據(jù)。
pdu還包含hw/cae生成部分。為了便于分析和保持固定時間的預(yù)算,分析引擎在處理之前對源和目的地地址字段進行散列并更新pdu。pdu的hw/cae生成的部分是放置散列數(shù)據(jù)以供以后使用的地方。該部分包括散列應(yīng)用源指令地址766、散列應(yīng)用目的地指令地址767、散列存儲器起始地址768和散列存儲器結(jié)束地址769字段。hw/cae生成部分另外包含與金絲雀771相關(guān)的其他字段,其包括存在于所有pdu分組中的硬編碼內(nèi)容起始魔術(shù)頭部、api名稱魔術(shù)頭部、調(diào)用下文魔術(shù)頭部和調(diào)用原始數(shù)據(jù)魔術(shù)頭部。
hw/cae生成部分還包括用來標識包括結(jié)果、配置位、操作模式、錯誤代碼和操作模式數(shù)據(jù)的其他配置和錯誤數(shù)據(jù)的字段770。字段的結(jié)果部分被分段以返回針對不同分析引擎查詢的布爾結(jié)果—轉(zhuǎn)換劇本、代碼布局、存儲器(堆棧或堆)溢出和深度檢查查詢。該字段的配置位部分指示何時設(shè)置壓縮標志、演示標志或同位標志。該字段中的標志的存在向分析引擎728指示分組是否應(yīng)該在壓縮模式下返回。演示標志指示系統(tǒng)處于演示模式,因為不存在針對系統(tǒng)的有效許可。在此模式下,日志和事件將不會完全可用。同位標志指示應(yīng)用正在分析引擎728中運行以使得主機查詢路由器引擎能夠確定向哪里發(fā)送需要返回到應(yīng)用的分組。如果此標志被設(shè)置,則分組經(jīng)由pci橋被發(fā)送,否則它們通過pci卡上的以太網(wǎng)接口被發(fā)送。字段的操作模式部分指示系統(tǒng)是處于偏執(zhí)模式、監(jiān)視模式還是學(xué)習(xí)模式。這些模式將在本節(jié)稍后更詳細地討論。最后,字段的錯誤代碼部分指示系統(tǒng)中的錯誤。錯誤代碼的前八位將對應(yīng)于消息源。其余的12位將對應(yīng)于每個子系統(tǒng)所報告的實際錯誤。
pdu還包含內(nèi)容分析引擎或原始數(shù)據(jù)。諸如os庫調(diào)用和系統(tǒng)調(diào)用的參數(shù)和返回值之類的所有可變數(shù)據(jù)都放在pdu的該部分中。該部分中的數(shù)據(jù)包含從應(yīng)用收集的數(shù)據(jù)的內(nèi)容,并且主要以內(nèi)容分析引擎為目標。該部分包含可變大小的api名稱或編號772、調(diào)用內(nèi)容魔術(shù)頭部777、可變大小的調(diào)用內(nèi)容774、調(diào)用原始數(shù)據(jù)魔術(shù)頭部778、可變大小的原始數(shù)據(jù)內(nèi)容776以及兩個保留的773和775字段。另外,這些字段可以針對管理消息而過載。
數(shù)字處理基礎(chǔ)設(shè)施
圖8圖示了其中可以實現(xiàn)本公開內(nèi)容的實施例的計算機網(wǎng)絡(luò)或類似的數(shù)字處理環(huán)境。
一個或多個客戶端計算機/設(shè)備50和一個或多個服務(wù)器計算機60提供執(zhí)行應(yīng)用程序等的處理、存儲和輸入/輸出設(shè)備。一個或多個客戶端計算機/設(shè)備50還可以通過通信網(wǎng)絡(luò)70被鏈接到包括其他客戶端設(shè)備/過程50和一個或多個服務(wù)器計算機60的其他計算設(shè)備。通信網(wǎng)絡(luò)70可以是遠程接入網(wǎng)絡(luò)、全球網(wǎng)絡(luò)(例如,因特網(wǎng))、全世界計算機集合、局域或廣域網(wǎng)以及當前使用相應(yīng)的協(xié)議(tcp/ip、藍牙
客戶端計算機/設(shè)備50可以配置有監(jiān)視代理。服務(wù)器計算機60可被配置為與用于訪問自動化根本原因分析調(diào)試工具的客戶端設(shè)備(即,監(jiān)視代理)50通信的分析引擎。服務(wù)器計算機60可以不是分離的服務(wù)器計算機,而是云網(wǎng)絡(luò)70的一部分。在一些實施例中,服務(wù)器計算機(例如,分析引擎)可以在一個或多個計算機應(yīng)用處接收全局時間基準。一個或多個計算機應(yīng)用中的每個計算機應(yīng)用可以具有對應(yīng)的本地時間基準。每個服務(wù)器計算機60可以使每個本地時間基準與全局時間基準同步。服務(wù)器計算機60可以包括被配置為關(guān)于對應(yīng)的本地時間基準來監(jiān)視一個或多個計算機應(yīng)用的至少一個計算機指令的儀器引擎。儀器引擎可以取回與至少一個計算機指令相關(guān)聯(lián)的信息,并將取回的計算機指令信息的至少一部分轉(zhuǎn)發(fā)給驗證引擎。
客戶端(監(jiān)視代理,和/或在一些實施例中為驗證引擎)50可以從服務(wù)器(分析和/或儀器引擎)60接收取回的計算機指令信息的至少一部分。在一些實施例中,客戶端50可以包括在客戶端(即,監(jiān)視代理,和/或在一些實施例中為驗證引擎)50上執(zhí)行以用于監(jiān)視計算機指令和取回與計算機指令相關(guān)聯(lián)的信息以促進根本原因分析的客戶端應(yīng)用或組件(例如,儀表引擎),并且客戶端50可以將這一信息傳達給服務(wù)器(例如,分析引擎)60。
圖9是圖8的計算機系統(tǒng)中的計算機(例如,客戶端處理器/設(shè)備50或服務(wù)器計算機60)的示例內(nèi)部結(jié)構(gòu)的示圖。每個計算機50、60包含系統(tǒng)總線79,其中總線是用于計算機或處理系統(tǒng)的組件之間的數(shù)據(jù)傳送的一組硬件線。系統(tǒng)總線79本質(zhì)上是連接計算機系統(tǒng)的不同元件(例如,處理器、盤存儲裝置、存儲器、輸入/輸出端口、網(wǎng)絡(luò)端口等)的共享導(dǎo)管,其使得能夠在元件之間傳送信息。附接到系統(tǒng)總線79的是用于將各種輸入和輸出設(shè)備(例如,鍵盤、鼠標、顯示器、打印機、揚聲器等)連接到計算機50、60的i/o設(shè)備接口82。網(wǎng)絡(luò)接口86允許計算機連接到被附接到網(wǎng)絡(luò)(例如,圖8的網(wǎng)絡(luò)70)的各種其他設(shè)備。存儲器90為用來實現(xiàn)本公開內(nèi)容的實施例(例如,本文所述的監(jiān)視代理、儀器引擎和分析引擎元件)的計算機軟件指令92和數(shù)據(jù)94提供易失性存儲。盤存儲裝置95為用于實現(xiàn)本公開內(nèi)容的實施例的計算機軟件指令92和數(shù)據(jù)94提供非易失性存儲。中央處理器單元84也被附接到系統(tǒng)總線79并提供計算機指令的執(zhí)行。
實施例或其各方面可以按照硬件(包括但不限于硬件電路)、固件或軟件的形式而被實現(xiàn)。如果按照軟件被實現(xiàn),則軟件可被存儲在被配置為使得處理器能夠加載軟件或其指令的子集的任何非瞬態(tài)計算機可讀介質(zhì)上。處理器然后執(zhí)行指令并且被配置為以如本文所描述的方式操作或使得裝置以如本文所描述的方式操作。
一些實施例可以通過截取指令并對這些指令執(zhí)行動態(tài)二進制插樁來變換一個或多個計算機指令的行為和/或數(shù)據(jù)。一些實施例還可以通過在物理計算機的高速緩沖存儲器中與二進制插樁的指令交換計算機指令來變換一個或多個計算機指令的行為和/或數(shù)據(jù)。一些實施例還通過在本地和全局時間基準之間使指令同步來及時變換計算機指令。一些實施例還通過取回與指令相關(guān)聯(lián)的信息并將取回的信息轉(zhuǎn)發(fā)給驗證引擎來變換計算機指令。
一些實施例還通過跨計算機應(yīng)用的一個或多個層使根本原因分析自動化來提供對計算機應(yīng)用、計算機程序功能和/或計算機代碼的質(zhì)量的功能改進。一些實施例還提供功能改進,因為源代碼(或跟蹤代碼)不必在代碼體內(nèi)被插樁。一些實施例還提供功能改進,因為它們不需要源代碼插樁,而是可以利用二進制插樁。一些實施例還提供功能改進因為計算機指令故障不被屏蔽,至少因為所施加的插樁對源代碼不是侵入性的,而是作為二進制插樁,由此避免對定時的改變或者源代碼插樁方法的延遲。一些實施例還通過提供跟蹤報告來提供功能改進,跟蹤報告包括來自用戶代碼、系統(tǒng)代碼和網(wǎng)絡(luò)活動的每線程和每進程運行時數(shù)據(jù),其可以通過使用公共高分辨率時間服務(wù)器而被容易地同步。一些實施例還提供功能改進,因為用戶運行時數(shù)據(jù)在測試被完成后很久可以是可用的。一些實施例還提供功能改進,因為通過在時間上使層重疊,引發(fā)多個層的復(fù)雜事務(wù)可被容易地發(fā)現(xiàn)和檢查和調(diào)試。
一些實施例解決技術(shù)問題(由此提供技術(shù)效果),因為開發(fā)人員不再必須使用調(diào)試器和放置斷點或添加日志記錄語句來捕獲運行時狀態(tài)以便找出代碼問題。一些實施例解決技術(shù)問題(由此提供技術(shù)效果),因為開發(fā)者不必重建代碼,并且然后在作出決定之前手動觀察結(jié)果。一些實施例解決技術(shù)問題(由此提供技術(shù)效果),因為它們能增強的調(diào)試框架成為可能,因為它們不掩蓋由競爭條件或線程之間的定時引起的失敗。一些實施例解決技術(shù)問題(由此提供技術(shù)效果),因為當一個或多個事務(wù)、進程或線程在不同的機器上運行時,與現(xiàn)有方式不同,用戶可以保持上下文并且容易地跨每個線程、進程或?qū)觼硎故录嚓P(guān)。一些實施例解決技術(shù)問題(由此提供技術(shù)效果),因為它們提供了比較來自客戶設(shè)置和開發(fā)者設(shè)置的運行時軌跡以看出哪里出現(xiàn)問題的能力。作為這一技術(shù)解決方案的結(jié)果(技術(shù)效果),一些實施例可以使得容易找到問題的源,從而提供減少的上市時間和降低的軟件產(chǎn)品成本的優(yōu)點。一些實施例解決技術(shù)問題(由此提供技術(shù)效果),因為用戶不需要通過手動或乏味的過程來放置插樁。一些實施例解決技術(shù)問題(由此提供技術(shù)效果),因為它們提供代碼兼容性。例如,一些實施例對以包括但不限于c、c++和其他語言的語言被編寫的編譯代碼以及以包括但不限于java、ruby、php、perl、python和其他語言的語言被編寫的解釋代碼有效。并且一些實施例對使用以包括但不限于c、c++和其他語言的語言被編寫的編譯代碼以及以包括但不限于java、ruby、php、perl、python和其他語言的語言被編寫的解釋代碼的組合編寫的第三方應(yīng)用有效。一些實施例解決技術(shù)問題(由此提供技術(shù)效果),因為它們提供關(guān)于根本原因分析的優(yōu)點。在一些實施例中,可以通過比較在發(fā)生故障和不發(fā)生故障的“良好”條件下獲得的軌跡來執(zhí)行根本原因分析。在一些實施例中,還可以通過比較每個函數(shù)的已知輸入或輸出參數(shù)并檢查其運行時狀態(tài)來執(zhí)行根本原因分析。在一些實施例中,根本原因分析可以用來準確地找出計算機應(yīng)用的已知良好狀態(tài)與已知不良狀態(tài)之間的分歧點。
另外,硬件、固件、軟件、例程或指令在本文中可被描述為執(zhí)行數(shù)據(jù)處理器的某些動作和/或功能。然而,應(yīng)當認識到,本文包含的這樣的描述僅僅是為了方便,并且這樣的動作實際上由計算設(shè)備、處理器、控制器或其他設(shè)備執(zhí)行固件、軟件、例程、指令等而造成。
應(yīng)當理解,流程圖、框圖和網(wǎng)絡(luò)圖可以包括更多或更少的元件、被不同地布置或者被不同地表示。但是還應(yīng)當理解,某些實現(xiàn)方式可以規(guī)定塊和網(wǎng)絡(luò)圖以及圖示了實施例的執(zhí)行的塊和網(wǎng)絡(luò)圖的數(shù)量以特定方式被實現(xiàn)。
因此,另外的實施例還可以在各種計算機體系結(jié)構(gòu)、物理、虛擬、云計算機和/或它們的某種組合中被實現(xiàn),因此,本文所描述的數(shù)據(jù)處理器僅旨在用于說明的目的,而不是作為對實施例的限制。
雖然已經(jīng)參照本公開內(nèi)容的示例實施例具體示出和描述了本公開內(nèi)容,但是本領(lǐng)域技術(shù)人員將理解,在不脫離所附權(quán)利要求所涵蓋的本公開內(nèi)容的范圍的情況下,可以在其中進行形式和細節(jié)上的各種改變。