本發(fā)明涉及網(wǎng)絡通信領域,尤其涉及一種性能監(jiān)控的方法及裝置。
背景技術:
隨著企業(yè)信息系統(tǒng)的部署復雜化、云化,辦理一筆業(yè)務往往需要經(jīng)過數(shù)十臺服務器,數(shù)百個服務接口的調(diào)用。面對如此復雜的系統(tǒng)和應用,業(yè)務中斷、系統(tǒng)性能緩慢成為主要技術難題。通過采集業(yè)務應用系統(tǒng)各環(huán)節(jié)的性能信息,分析業(yè)務性能瓶頸,可以為系統(tǒng)性能提出優(yōu)化策略。
目前的獲取業(yè)務應用性能信息,進行監(jiān)控、分析的方法主要以下幾種:
1、主動探測技術:模擬移動客戶、營業(yè)員等系統(tǒng)終端用戶的實際業(yè)務操作,采用仿真方式直接對被探測系統(tǒng)特定業(yè)務發(fā)起探測,通過對被探測業(yè)務辦理結果及辦理時延等探測結果的分析,發(fā)現(xiàn)被探測系統(tǒng)中存在問題的業(yè)務功能模塊。然而,主動探測技術基于仿真技術,需要周期執(zhí)行,受探測終端、探測頻率、網(wǎng)絡等情況影響,很難準確反映實際的業(yè)務狀況。
2、dpi(deeppacketinspect,深度包檢測技術)分析:根據(jù)業(yè)務需求在合適的交換機上設置鏡像端口,獲取交換機網(wǎng)絡數(shù)據(jù)報文并進行數(shù)據(jù)解析、后續(xù)分析,進而還原真實用戶業(yè)務辦理情況。dpi分析業(yè)務系統(tǒng)負荷小、采集實時性高,但軟硬件設備成本較高,且需要對報文格式進行修改。此外,目前真實流量采集只能支持http(hypertexttransferprotocol,超文本傳輸協(xié)議),對于復雜業(yè)務系統(tǒng)的后臺應用服務、數(shù)據(jù)庫服務,均不能很好的進行解析并還原業(yè)務過程。
3、網(wǎng)頁插碼技術:通過在被采集的系統(tǒng)網(wǎng)頁內(nèi)嵌入java(計算機編程語言)腳本代碼,收集并分析用戶訪問信息,進而還原真實用戶業(yè)務辦理情況。網(wǎng)頁插碼技術可做到對業(yè)務系統(tǒng)基本無負荷,采集實時性高,但只能在網(wǎng)頁層發(fā)揮作用,不能做業(yè)務全過程分析。
4、業(yè)務系統(tǒng)日志改造技術:通過全面改造業(yè)務系統(tǒng),在業(yè)務系統(tǒng)內(nèi)埋點,通過標準api調(diào)用取得業(yè)務受理日志數(shù)據(jù),并對其進行數(shù)據(jù)解析、后續(xù)分析,進而還原真實用戶業(yè)務辦理情況。業(yè)務系統(tǒng)日志改造技術難度不大,但對于大型的在線生產(chǎn)系統(tǒng)進行業(yè)務日志標準api(applicationprogramminginterface,應用程序編程接口)調(diào)用改造,會導致原始程序的全面修改。一方面工作量大,影響業(yè)務生產(chǎn);另一方面,日志規(guī)范的參數(shù)隨著需求的變化而修改,維護成本高。
綜上所述,現(xiàn)有的對應用性能監(jiān)控分析時需要修改業(yè)務系統(tǒng)框架層代碼、工作量大和維護成本高。
技術實現(xiàn)要素:
本發(fā)明提供一種監(jiān)控方法及裝置,用以解決現(xiàn)有技術中對應用性能監(jiān)控分析時存在需要修改業(yè)務系統(tǒng)框架層代碼、工作量大和維護成本高的問題。
本發(fā)明實施例提供一種性能監(jiān)控的方法,包括:
獲取業(yè)務系統(tǒng)中所有類,確定所述所有類中需要監(jiān)控性能信息的類;
在所述需要監(jiān)控性能信息的類中添加日志處理信息;
加載所述添加日志處理信息的類,生成日志文件。
可選的,所述確定所述所有類中需要監(jiān)控性能參數(shù)的類,包括:
確定需要監(jiān)控性能信息的業(yè)務的業(yè)務標識,根據(jù)所述業(yè)務標識確定父調(diào)用對象;
根據(jù)所述所有類中的線程獲取java堆棧信息,將所述java堆棧信息與所述父調(diào)用對象匹配;
將與所述父調(diào)用對象匹配的java堆棧信息對應的類作為所述需要監(jiān)控性能參數(shù)的類。
可選的,所述在所述需要監(jiān)控性能信息的類中添加日志處理信息,包括:
通過加載網(wǎng)絡代理proxy組件,在所述需要監(jiān)控性能信息的類的所述業(yè)務系統(tǒng)的框架層的頭部和/或尾部添加日志處理信息。
可選的,所述日志處理信息包括以下中的任一種或組合:
日志公共頭、日志參數(shù)、日志內(nèi)容;
所述日志內(nèi)容包括下中的任一種或組合:
頭部日志、尾部日志、異常日志。
可選的,加載所述確定添加日志處理信息的類,生成日志文件之后,包括:
分析所述日志文件,得到所述需要監(jiān)控性能信息的業(yè)務的性能信息;
所述性能信息包括:
業(yè)務開始時間、業(yè)務結束時間、業(yè)務持續(xù)時長、業(yè)務異常信息。
本發(fā)明實施例還提供一種性能監(jiān)控的裝置,包括:
確定模塊:用于獲取業(yè)務系統(tǒng)中所有類,確定所述所有類中需要監(jiān)控性能信息的類;
添加模塊:用于在所述需要監(jiān)控性能信息的類中添加日志處理信息;
生成模塊:用于加載所述添加日志處理信息的類,生成日志文件。
可選的,所述確定模塊,具體用于:
確定需要監(jiān)控性能信息的業(yè)務的業(yè)務標識,根據(jù)所述業(yè)務標識確定父調(diào)用對象;
根據(jù)所述所有類中的線程獲取java堆棧信息,將所述java堆棧信息與所述父調(diào)用對象匹配;
將與所述父調(diào)用對象匹配的java堆棧信息對應的類作為所述需要監(jiān)控性能參數(shù)的類。
可選的,所述添加模塊,具體用于:
通過加載網(wǎng)絡代理proxy組件,在所述需要監(jiān)控性能信息的類的所述業(yè)務系統(tǒng)的框架層的頭部和/或尾部添加日志處理信息。
可選的,所述日志處理信息包括以下中的任一種或組合:
日志公共頭、日志參數(shù)、日志內(nèi)容;
所述日志內(nèi)容包括下中的任一種或組合:
頭部日志、尾部日志、異常日志。
可選的,所述生成模塊,還用于:
分析所述日志文件,得到所述需要監(jiān)控性能信息的業(yè)務的性能信息;
所述性能信息包括:
業(yè)務開始時間、業(yè)務結束時間、業(yè)務持續(xù)時長、業(yè)務異常信息。
本發(fā)明實施例提供了一種性能監(jiān)控的方法及裝置,通過獲取業(yè)務系統(tǒng)中所有類,確定所述所有類中需要監(jiān)控性能信息的類;在所述需要監(jiān)控性能信息的類中添加日志處理信息;加載所述添加日志處理信息的類,生成日志文件。本發(fā)明實施例提供的性能監(jiān)控的方法及裝置,在對應用系統(tǒng)性能監(jiān)控分析時不需要修改業(yè)務系統(tǒng)框架層代碼,通過在需要監(jiān)控性能信息的類中添加日志處理信息,從而獲取系統(tǒng)的調(diào)用參數(shù),時長等關鍵性能信息,實現(xiàn)應用系統(tǒng)的性能分析,減小了工作量,降低了維護成本。
附圖說明
為了更清楚地說明本發(fā)明實施例中的技術方案,下面將對實施例描述中所需要使用的附圖作簡要介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實施例,對于本領域的普通技術人員來講,在不付出創(chuàng)造性勞動性的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
圖1為本發(fā)明實施例提供的一種性能監(jiān)控的方法流程示意圖;
圖2為本發(fā)明實施例提供的一種性能監(jiān)控的方法流程圖;
圖3為本發(fā)明實施例提供的一種性能監(jiān)控的裝置結構示意圖。
具體實施方式
為了使本發(fā)明的目的、技術方案和優(yōu)點更加清楚,下面將結合附圖對本發(fā)明作進一步地詳細描述,顯然,所描述的實施例僅僅是本發(fā)明一部份實施例,而不是全部的實施例。基于本發(fā)明中的實施例,本領域普通技術人員在沒有做出創(chuàng)造性勞動前提下所獲得的所有其它實施例,都屬于本發(fā)明保護的范圍。
本發(fā)明實施例提供一種性能監(jiān)控的方法,如圖1所示,為本發(fā)明實施例提供的一種性能監(jiān)控的方法流程示意圖,包括:
步驟101:獲取業(yè)務系統(tǒng)中所有類,確定所有類中需要監(jiān)控性能信息的類。
本發(fā)明實施例中,類(class)是對某種類型的對象定義變量和方法的原型,包含有關對象動作方式的信息,如對象的名稱、方法、屬性和事件等。業(yè)務系統(tǒng)的框架層包括多個類,在獲取所有類之后,需要確定出待監(jiān)控性能信息的類。
具體地,首先確定需要監(jiān)控性能信息的業(yè)務,得到需要監(jiān)控性能信息的業(yè)務標識,根據(jù)業(yè)務標識確定父調(diào)用對象;然后在所有類中的線程獲取java堆棧信息,將java堆棧信息與父調(diào)用對象匹配;若任一java堆棧信息與父調(diào)用對象匹配,則將該java堆棧信息對應的類作為需要監(jiān)控性能參數(shù)的類。
例如,將“開戶”業(yè)務作為需要監(jiān)控性能的業(yè)務,繳費業(yè)務對應的業(yè)務標識為“createuser”,確定“開戶”業(yè)務的父調(diào)用對象“org.iplatform.framework.security.controller.usercontroller.createuser”;在獲取到的所有類的系統(tǒng)框架層進行攔截,通過json(javascriptobjectnotation,java腳本對象表示法)配置識別所有java堆棧調(diào)用對象,得到調(diào)用對戲與“org.iplatform.framework.security.controller.usercontroller.createuser”匹配的所有java堆棧,并提取出匹配后的java堆棧對應的類,作為“開戶”業(yè)務對應的類。
步驟102:在需要監(jiān)控性能信息的類中添加日志處理信息。
本發(fā)明實施例中,通過java的反射機制在需要監(jiān)控性能信息的類中添加日志處理信息。java的反射機制一種動態(tài)獲取的信息以及動態(tài)調(diào)用對象的方法,具體指在系統(tǒng)運行狀態(tài)中,對于任意一個類,都可以獲取該類的所有屬性和方法;對于任意一個對象,都能夠調(diào)用它的任意一個方法和屬性。
具體地,在系統(tǒng)運行時,判斷任意一個對象所屬的類,構造任意所需監(jiān)控性能的類的對象,確定所需監(jiān)控性能的類所具有的成員變量和方法,并生成動態(tài)網(wǎng)絡代理proxy組件,通過加載網(wǎng)絡代理proxy組件,在需要監(jiān)控性能信息的類的業(yè)務系統(tǒng)的框架層的頭部和/或尾部添加日志處理信息。
進一步地,日志處理信息根據(jù)預設格式生成,日志處理信息包括以下中的任一種或組合:日志公共頭、日志參數(shù)、日志內(nèi)容。日志內(nèi)容包括下中的任一種或組合:頭部日志、尾部日志、異常日志。
為了保證日志處理信息的易讀性,需要規(guī)范化日志處理信息的格式,具體可以根據(jù)表1中的格式生成日志處理信息。
表1
具體地,“header”為日志公共頭,日志共公頭用空格與日志參數(shù)間隔;para為日志參數(shù),根據(jù)日志類型的,日志參數(shù)不同,采用para@[paraname=xxx,]格式,并用逗號分隔不同參數(shù);content為日志內(nèi)容,為文本字符串。例如,日志處理信息可以為“host_app110.0.2.1crmcrmapp2014-12-1212:00:01222infoapinpara@[clientip=”10.0.1.1”,clienttype=”ie”]callmethodsucceed.”
例如,如表2所示,日志公共header,可以包括主機名稱、主機ip、應用服務名稱、時間戳、日志級別、日志類別、日志參數(shù)類型等信息。對時間戳,可以采用格式“yyyymmddhhmmsssss”。對于日志級別,可以設置“debug(調(diào)試),info(異常),warning(告警),error(錯誤),critical(重要)”五個日志級別。對于日志類別,可以設置為app(application,應用程序),即類別為服務調(diào)用。對于日志參數(shù)類型,可以包括調(diào)入?yún)?shù)in、調(diào)出參數(shù)out和異常參數(shù)info三個參數(shù),其中in為調(diào)入時刻打印的日志,用于計算調(diào)用時長的starttime;out為調(diào)出時刻打印的日志,用于計算調(diào)用時長的endtime;info為調(diào)用內(nèi)部的信息,不參與時長計算。
表2
具體地,在每一個需要監(jiān)控性能信息的類都需要記錄一個頭部日志,一個尾部日志以及若干個異常日志。對于日志類別為app的日志公共頭,日志內(nèi)容中的頭部日志in用來記錄調(diào)入app的日志,可以包括如表3所示的內(nèi)容:
表3
對于日志類別為app的日志公共頭,日志內(nèi)容中的尾部日志out用來記錄退出app的日志,可以包括如表4所示的內(nèi)容:
表4
對于日志類別為app的日志公共頭,日志內(nèi)容中的異常日志info用來記錄除in,out以外的日志信息,例如異常信息,內(nèi)部業(yè)務調(diào)試信息等,可以包括如表5所示的內(nèi)容:
表5
步驟103:加載添加日志處理信息的類,生成日志文件。
業(yè)務程序運行時,在動態(tài)加載類時性能監(jiān)控proxy組件代碼已植入進應用系統(tǒng)的框架層的需要監(jiān)控性能信息的類中,通過加載類生成日志文件,根據(jù)in,out日志可以分析出每個業(yè)務的調(diào)用時長,根據(jù)info日志可以分析出業(yè)務的方法明細、異常信息以及敏感詞匯,即可以輸出需要監(jiān)控性能信息的業(yè)務的性能信息。
本發(fā)明實施例提供了一種性能監(jiān)控的方法,通過獲取業(yè)務系統(tǒng)中所有類,確定所述所有類中需要監(jiān)控性能信息的類;在所述需要監(jiān)控性能信息的類中添加日志處理信息;加載所述添加日志處理信息的類,生成日志文件。本發(fā)明實施例提供的性能監(jiān)控的方法,在對應用系統(tǒng)性能監(jiān)控分析時不需要修改業(yè)務系統(tǒng)框架層代碼,通過在需要監(jiān)控性能信息的類中添加日志處理信息,從而獲取系統(tǒng)的調(diào)用參數(shù),時長等關鍵性能信息,實現(xiàn)應用系統(tǒng)的性能分析,減小了工作量,降低了維護成本。
下面通過具體的方法流程對本發(fā)明實施提供的一種性能監(jiān)控的方法進行詳細說明,如圖2所示,為本發(fā)明實施例提供的一種性能監(jiān)控的方法流程圖,包括:
步驟201:啟動應用系統(tǒng)。
步驟202:獲取jvm(javavirtualmachine,java虛擬機)中所有類。
具體地,jvm為java程序的運行環(huán)境,應用系統(tǒng)的框架層包括的所有類都在jvm中運行。在jvm中可以直接讀取到運行環(huán)境中的所有類。
步驟203:判斷每一個類是否為需要監(jiān)控的類,若是,則執(zhí)行步驟204,否則執(zhí)行步驟205。
具體地,首先確定需要監(jiān)控性能信息的業(yè)務,得到需要監(jiān)控性能信息的業(yè)務標識,根據(jù)業(yè)務標識確定父調(diào)用對象;然后在所有類中的線程獲取java堆棧信息,將java堆棧的調(diào)用對象與父調(diào)用對象匹配;若任一java堆棧信息與父調(diào)用對象匹配,則將該java堆棧信息對應的類作為需要監(jiān)控性能參數(shù)的類。
例如,將“開戶”業(yè)務作為需要監(jiān)控性能的業(yè)務,繳費業(yè)務對應的業(yè)務標識為“createuser”,確定“開戶”業(yè)務的父調(diào)用對象“org.iplatform.framework.security.controller.usercontroller.createuser”;在獲取到的所有類的系統(tǒng)框架層進行攔截,通過json(javascriptobjectnotation,java腳本對象表示法)配置識別所有java堆棧調(diào)用對象,得到調(diào)用對戲與“org.iplatform.framework.security.controller.usercontroller.createuser”匹配的所有java堆棧,并提取出匹配后的java堆棧對應的類,作為“開戶”業(yè)務對應的類。
步驟204:添加日志處理信息。
具體地,在系統(tǒng)運行時,判斷任意一個對象所屬的類,構造任意所需監(jiān)控性能的類的對象,確定所需監(jiān)控性能的類所具有的成員變量和方法,并生成動態(tài)網(wǎng)絡代理proxy組件,通過加載網(wǎng)絡代理proxy組件,在需要監(jiān)控性能信息的類的業(yè)務系統(tǒng)的框架層的頭部和/或尾部添加日志處理信息。
進一步地,日志處理信息根據(jù)預設格式生成,日志處理信息包括以下中的任一種或組合:日志公共頭、日志參數(shù)、日志內(nèi)容。日志內(nèi)容包括下中的任一種或組合:頭部日志、尾部日志、異常日志。在每一個需要監(jiān)控性能信息的類都需要記錄一個頭部日志,一個尾部日志以及若干個異常日志。
未添加日志處理信息的類可以為:
publicvoidtest(string[]args)throwsexpection
{
dosomething();
}
添加日志處理信息之后的類可以為:
publicvoidtest(stringreqid,string[]args)throwsexpection
{
try
{
messagemsq=messagefactory.createmessage();
meq.setreqid(reqid);//設置日志參數(shù)其他屬性
logtrack.info(msq);
}
catch(expectione)
{thrownewlogtrackexpection(“e001”,”參數(shù)1”,e)}
}
步驟205:加載jvm。
具體地,在加載加載jvm運行環(huán)境時,性能監(jiān)控proxy組件代碼已植入進應用系統(tǒng)的框架層的所有需要監(jiān)控性能信息的類中,通過加載類生成日志文件。根據(jù)頭部日志及尾部日志可以分析出每個業(yè)務的調(diào)用時長,根據(jù)異常日志可以分析出業(yè)務的方法明細、異常信息以及敏感詞匯,即可以輸出需要監(jiān)控性能信息的業(yè)務的性能信息。
基于相同的發(fā)明構思,本發(fā)明實施例還提供一種性能監(jiān)控的裝置,如圖3所示,包括:
確定模塊301:用于獲取業(yè)務系統(tǒng)中所有類,確定所述所有類中需要監(jiān)控性能信息的類;
添加模塊302:用于在所述需要監(jiān)控性能信息的類中添加日志處理信息;
生成模塊303:用于加載所述添加日志處理信息的類,生成日志文件。
可選的,所述確定模塊301,具體用于:
確定需要監(jiān)控性能信息的業(yè)務的業(yè)務標識,根據(jù)所述業(yè)務標識確定父調(diào)用對象;
根據(jù)所述所有類中的線程獲取java堆棧信息,將所述java堆棧信息與所述父調(diào)用對象匹配;
將與所述父調(diào)用對象匹配的java堆棧信息對應的類作為所述需要監(jiān)控性能參數(shù)的類。
可選的,所述添加模塊302,具體用于:
通過加載網(wǎng)絡代理proxy組件,在所述需要監(jiān)控性能信息的類的所述業(yè)務系統(tǒng)的框架層的頭部和/或尾部添加日志處理信息。
可選的,所述日志處理信息包括以下中的任一種或組合:
日志公共頭、日志參數(shù)、日志內(nèi)容;
所述日志內(nèi)容包括下中的任一種或組合:
頭部日志、尾部日志、異常日志。
可選的,所述生成模塊303,還用于:
分析所述日志文件,得到所述需要監(jiān)控性能信息的業(yè)務的性能信息;
所述性能信息包括:
業(yè)務開始時間、業(yè)務結束時間、業(yè)務持續(xù)時長、業(yè)務異常信息。
本發(fā)明實施例提供了一種性能監(jiān)控的裝置,通過獲取業(yè)務系統(tǒng)中所有類,確定所述所有類中需要監(jiān)控性能信息的類;在所述需要監(jiān)控性能信息的類中添加日志處理信息;加載所述添加日志處理信息的類,生成日志文件。本發(fā)明實施例提供的性能監(jiān)控的裝置,在對應用系統(tǒng)性能監(jiān)控分析時不需要修改業(yè)務系統(tǒng)框架層代碼,通過在需要監(jiān)控性能信息的類中添加日志處理信息,從而獲取系統(tǒng)的調(diào)用參數(shù),時長等關鍵性能信息,實現(xiàn)應用系統(tǒng)的性能分析,減小了工作量,降低了維護成本。
本發(fā)明是參照根據(jù)本發(fā)明實施例的方法、設備(系統(tǒng))、和計算機程序產(chǎn)品的流程圖和/或方框圖來描述的。應理解可由計算機程序指令實現(xiàn)流程圖和/或方框圖中的每一流程和/或方框、以及流程圖和/或方框圖中的流程和/或方框的結合??商峁┻@些計算機程序指令到通用計算機、專用計算機、嵌入式處理機或其他可編程數(shù)據(jù)處理設備的處理器以產(chǎn)生一個機器,使得通過計算機或其他可編程數(shù)據(jù)處理設備的處理器執(zhí)行的指令產(chǎn)生用于實現(xiàn)在流程圖一個流程或多個流程和/或方框圖一個方框或多個方框中指定的功能的裝置。
這些計算機程序指令也可存儲在能引導計算機或其他可編程數(shù)據(jù)處理設備以特定方式工作的計算機可讀存儲器中,使得存儲在該計算機可讀存儲器中的指令產(chǎn)生包括指令裝置的制造品,該指令裝置實現(xiàn)在流程圖一個流程或多個流程和/或方框圖一個方框或多個方框中指定的功能。
這些計算機程序指令也可裝載到計算機或其他可編程數(shù)據(jù)處理設備上,使得在計算機或其他可編程設備上執(zhí)行一系列操作步驟以產(chǎn)生計算機實現(xiàn)的處理,從而在計算機或其他可編程設備上執(zhí)行的指令提供用于實現(xiàn)在流程圖一個流程或多個流程和/或方框圖一個方框或多個方框中指定的功能的步驟。
盡管已描述了本發(fā)明的優(yōu)選實施例,但本領域內(nèi)的技術人員一旦得知了基本創(chuàng)造性概念,則可對這些實施例作出另外的變更和修改。所以,所附權利要求意欲解釋為包括優(yōu)選實施例以及落入本發(fā)明范圍的所有變更和修改。
顯然,本領域的技術人員可以對本發(fā)明進行各種改動和變型而不脫離本發(fā)明的精神和范圍。這樣,倘若本發(fā)明的這些修改和變型屬于本發(fā)明權利要求及其等同技術的范圍之內(nèi),則本發(fā)明也意圖包含這些改動和變型在內(nèi)。