本發(fā)明涉及通信領(lǐng)域,具體而言,涉及一種日志報文處理方法及系統(tǒng)。
背景技術(shù):
在軟件的開發(fā)、測試、使用和維護(hù)中,日志為系統(tǒng)正確和穩(wěn)定的運行提供了非常重要的參考和依據(jù),幫助開發(fā)、測試、維護(hù)人員對軟件系統(tǒng)進(jìn)行調(diào)試和維護(hù)。然而一般情況下日志的數(shù)據(jù)量是非常大的,這就使查詢、維護(hù)起來非常困難。
隨著業(yè)務(wù)的不斷擴展,系統(tǒng)服務(wù)數(shù)量劇增,維護(hù)服務(wù)中最重要的一塊就是日志維護(hù)工作。分析日志,可以發(fā)現(xiàn)服務(wù)運行時出現(xiàn)的一系列問題,再改造服務(wù)。擴展服務(wù)時,日志也能讓開發(fā)人員對服務(wù)實時的運行狀況進(jìn)行監(jiān)控。
然而由于服務(wù)過多,不管是開發(fā)人員還是維護(hù)人員,對服務(wù)日志的維護(hù)也越來越繁瑣,造成用戶體驗較低。
技術(shù)實現(xiàn)要素:
本發(fā)明的主要目的在于公開了一種日志報文處理方法及系統(tǒng),以至少解決相關(guān)技術(shù)中由于服務(wù)過多,對服務(wù)日志的維護(hù)也越來越繁瑣,造成用戶體驗較低的問題。
根據(jù)本發(fā)明的一個方面,提供了一種日志報文處理方法。
根據(jù)本發(fā)明的日志報文處理方法包括:采用作為統(tǒng)一入口的日志采集服務(wù)器接收日志來源端發(fā)送的全部日志報文,其中,上述日志報文攜帶有當(dāng)前服務(wù)對應(yīng)的編號;上述日志采集服務(wù)器將日志信息轉(zhuǎn)換成json數(shù)據(jù);上述日志采集服務(wù)器將上述json數(shù)據(jù)發(fā)送至REDIS緩存中上述編號對應(yīng)的哈希表中暫存。
優(yōu)選地,上述日志采集服務(wù)器接收日志來源端發(fā)送的全部日志報文包括:上述日志采集服務(wù)器接收上述日志來源端以POST請求方式發(fā)送的全部日志報文。
優(yōu)選地,在上述日志采集服務(wù)器將上述json數(shù)據(jù)發(fā)送至REDIS緩存中上述編號對應(yīng)的哈希表中暫存之后,還包括:日志記錄服務(wù)器每隔預(yù)定時間從上述REDIS緩存中上述編號對應(yīng)的哈希表中獲取全部json數(shù)據(jù);上述日志記錄服務(wù)器將哈希表中取出的json數(shù)據(jù)進(jìn)行解析,得到日志內(nèi)容并保存。
優(yōu)選地,上述日志報文還攜帶有:日志類型,則當(dāng)前服務(wù)對應(yīng)的編號上述日志記錄服務(wù)器將哈希表中取出的json數(shù)據(jù)進(jìn)行解析,得到日志內(nèi)容并保存包括:上述日志記錄服務(wù)器根據(jù)當(dāng)前服務(wù)對應(yīng)的編號以及日志類型判斷當(dāng)前服務(wù)下是否包括上述日志內(nèi)容的日志類型;如果包括上述日志內(nèi)容的日志類型,則繼續(xù)保存上述日志內(nèi)容;如果沒有包括上述日志內(nèi)容的日志類型,則自動創(chuàng)建該日志類型,之后繼續(xù)保存上述日志內(nèi)容。
優(yōu)選地,上述日志記錄服務(wù)器保存上述日志內(nèi)容包括:上述日志記錄服務(wù)器對各個服務(wù)判斷配置的保存類型,確定將上述日志內(nèi)容保存到數(shù)據(jù)庫和/或文本文件中。
優(yōu)選地,上述日志采集服務(wù)器為能夠配置進(jìn)程數(shù)量的web服務(wù)器,其中,上述日志采集服務(wù)器根據(jù)日志報文的數(shù)量對上述進(jìn)程數(shù)量進(jìn)行配置。
根據(jù)本發(fā)明的另一方面,提供了一種日志報文處理系統(tǒng)。
根據(jù)本發(fā)明的日志報文處理系統(tǒng)包括:作為統(tǒng)一入口的日志采集服務(wù)器;其中,上述日志采集服務(wù)器包括:接收模塊,用于接收日志來源端發(fā)送的全部日志報文,其中,上述日志報文攜帶有當(dāng)前服務(wù)對應(yīng)的編號;轉(zhuǎn)換模塊,用于將日志信息轉(zhuǎn)換成json數(shù)據(jù);發(fā)送模塊,用于將上述json數(shù)據(jù)發(fā)送至REDIS緩存中上述編號對應(yīng)的哈希表中暫存。
優(yōu)選地,上述系統(tǒng)還包括:日志記錄服務(wù)器,其中,上述日志記錄服務(wù)器包括:獲取模塊,用于每隔預(yù)定時間從上述REDIS緩存中上述編號對應(yīng)的哈希表中獲取全部json數(shù)據(jù);保存模塊,用于將哈希表中取出的json數(shù)據(jù)進(jìn)行解析,得到日志內(nèi)容并保存。
優(yōu)選地,上述日志報文還攜帶有:日志類型,則上述保存模塊包括:判斷單元,用于根據(jù)當(dāng)前服務(wù)對應(yīng)的編號以及日志類型判斷當(dāng)前服務(wù)下是否包括上述日志內(nèi)容的日志類型;第一保存單元,用于在包括上述日志內(nèi)容的日志類型,繼續(xù)保存上述日志內(nèi)容;第二保存單元,用于在沒有包括上述日志內(nèi)容的日志類型時,則自動創(chuàng)建該日志類型,之后繼續(xù)保存上述日志內(nèi)容。
優(yōu)選地,上述日志采集服務(wù)器為能夠配置進(jìn)程數(shù)量的web服務(wù)器,其中,上述日志采集服務(wù)器根據(jù)日志報文的數(shù)量對上述進(jìn)程數(shù)量進(jìn)行配置。
與現(xiàn)有技術(shù)相比,本發(fā)明實施例至少具有以下優(yōu)點:能夠讓整個系統(tǒng)的日志通過唯一的入口進(jìn)行采集,實現(xiàn)了日志統(tǒng)一采集、記錄、管理,開發(fā)維護(hù)人員能從一個頁面瀏覽每一個服務(wù)產(chǎn)生的每一條日志記錄。極大方便了用戶協(xié)調(diào)工作,大大提升了排查問題,解決問題的效率。將資源消耗極大的日志采集一分為二,實現(xiàn)快速采集和延時查看。
附圖說明
圖1是根據(jù)本發(fā)明實施例的日志報文處理方法的流程圖;
圖2是根據(jù)本發(fā)明優(yōu)選實施例的日志保存類型的配置頁面截圖;
圖3是根據(jù)本發(fā)明優(yōu)選實施例的日志報文處理方法的流程圖;
圖4是根據(jù)本發(fā)明實施例的日志報文處理系統(tǒng)的結(jié)構(gòu)框圖;以及
圖5是根據(jù)本發(fā)明優(yōu)選實施例的日志報文處理系統(tǒng)的結(jié)構(gòu)框圖。
具體實施方式
下面結(jié)合說明書附圖對本發(fā)明的具體實現(xiàn)方式做一詳細(xì)描述。
圖1是根據(jù)本發(fā)明實施例的日志報文處理方法的流程圖。如圖1所示,該日志報文處理方法包括:
步驟S101:采用作為統(tǒng)一入口的日志采集服務(wù)器接收日志來源端發(fā)送的全部日志報文,其中,上述日志報文攜帶有當(dāng)前服務(wù)對應(yīng)的編號;
步驟S103:上述日志采集服務(wù)器將日志信息轉(zhuǎn)換成json數(shù)據(jù);
步驟S105:上述日志采集服務(wù)器將上述json數(shù)據(jù)發(fā)送至REDIS緩存中上述編號對應(yīng)的哈希表中暫存。
采用圖1所示的方法,能夠讓整個系統(tǒng)的日志通過唯一的入口進(jìn)行采集,實現(xiàn)了日志統(tǒng)一采集、記錄、管理,開發(fā)維護(hù)人員能從一個頁面瀏覽每一個服務(wù)產(chǎn)生的每一條日志記錄。極大方便了用戶協(xié)調(diào)工作,大大提升了排查問題,解決問題的效率;將資源消耗極大的日志采集一分為二,實現(xiàn)快速采集和延時查看。
優(yōu)選地,上述日志采集服務(wù)器接收日志來源端發(fā)送的全部日志報文包括:上述日志采集服務(wù)器接收上述日志來源端以POST請求方式發(fā)送的全部日志報文。
在優(yōu)選實施過程中,網(wǎng)站,服務(wù)等日志來源端將日志報文構(gòu)造為POST請求,然后發(fā)送至日志采集服務(wù)器。POST請求如下:
$data=array(
“l(fā)ogName”=>$moduleNm,
“code”=>$typeCode,
“l(fā)ogInfo”=>$msg,
“op”=>’888’
);
其中,code表示每個服務(wù)對應(yīng)的編號;logName表示日志類型;logInfo表示日志內(nèi)容;op表示日志操作人(888代表系統(tǒng)服務(wù)產(chǎn)生)。
優(yōu)選地,在上述日志采集服務(wù)器將上述json數(shù)據(jù)發(fā)送至REDIS緩存中上述編號對應(yīng)的哈希表中暫存之后,還可以包括:日志記錄服務(wù)器每隔預(yù)定時間從上述REDIS緩存中上述編號對應(yīng)的哈希表中獲取全部json數(shù)據(jù);上述日志記錄服務(wù)器將哈希表中取出的json數(shù)據(jù)進(jìn)行解析,得到日志內(nèi)容并保存。
利用性能極佳的REDIS緩存作為中間保存工具,在內(nèi)存中為每個服務(wù)創(chuàng)建一張哈希表,用來保存該服務(wù)產(chǎn)生的所有類型的服務(wù)。服務(wù)器接收到日志收集請求后,如果直接寫入文件或是直接寫入數(shù)據(jù)庫,會受到數(shù)據(jù)庫、文件寫入較慢的限制,從而影響到整個服務(wù)的日志接收效率。
日志記錄服務(wù)器每隔預(yù)定時間將內(nèi)存哈希表中的數(shù)據(jù)全部取出,導(dǎo)入到數(shù)據(jù)庫或表中。由于日志對實時性要求不是特別高,故采用間隔執(zhí)行導(dǎo)入的方式,一方面定時減輕,內(nèi)存的數(shù)據(jù)負(fù)擔(dān);另一方面控制了寫入頻率,不會對數(shù)據(jù)庫或文件IO造成無法控制的壓力。
優(yōu)選地,上述日志報文還可以攜帶有:日志類型,則當(dāng)前服務(wù)對應(yīng)的編號上述日志記錄服務(wù)器將哈希表中取出的json數(shù)據(jù)進(jìn)行解析,得到日志內(nèi)容并保存包括:上述日志記錄服務(wù)器根據(jù)當(dāng)前服務(wù)對應(yīng)的編號以及日志類型判斷當(dāng)前服務(wù)下是否包括上述日志內(nèi)容的日志類型;如果包括上述日志內(nèi)容的日志類型,則繼續(xù)保存上述日志內(nèi)容;如果沒有包括上述日志內(nèi)容的日志類型,則自動創(chuàng)建該日志類型,之后繼續(xù)保存上述日志內(nèi)容。
優(yōu)選地,上述日志記錄服務(wù)器保存上述日志內(nèi)容可以進(jìn)一步包括:上述日志記錄服務(wù)器對各個服務(wù)判斷配置的保存類型,確定將上述日志內(nèi)容保存到數(shù)據(jù)庫和/或文本文件中。
在優(yōu)選實施過程中,日志載體可以包括:文件或數(shù)據(jù)庫表。在配置服務(wù)時,可以選擇將日志保存為文件、數(shù)據(jù)庫表或者兩者都保存,根據(jù)需求靈活的選擇記錄方式,具體可以參見圖2所示的配置頁面截圖。
優(yōu)選地,上述日志采集服務(wù)器可以為能夠配置進(jìn)程數(shù)量的web服務(wù)器,其中,上述日志采集服務(wù)器根據(jù)日志報文的數(shù)量對上述進(jìn)程數(shù)量進(jìn)行配置。例如,日志報文的數(shù)量越多,可以配置越多的進(jìn)程數(shù)量,這樣多進(jìn)程處理可以提高服務(wù)的處理效率。
以下結(jié)合圖3進(jìn)一步描述上述優(yōu)選實施方式。
圖3是根據(jù)本發(fā)明優(yōu)選實施例的日志報文處理方法的流程圖。如圖3所示,該日志報文處理方法包括:
步驟S301:網(wǎng)站,服務(wù)等日志來源端將日志報文構(gòu)造為POST請求。
例如,POST請求如下:
$data=array(
“l(fā)ogName”=>$moduleNm,
“code”=>$typeCode,
“l(fā)ogInfo”=>$msg,
“op”=>’888’
);
其中,code表示每個服務(wù)對應(yīng)的編號;logName表示日志類型;logInfo表示日志內(nèi)容;op表示日志操作人(888代表系統(tǒng)服務(wù)產(chǎn)生)。
步驟S303:通過POST請求將信息發(fā)送到日志采集服務(wù)器。
其中,日志采集服務(wù)器是一個能夠設(shè)置進(jìn)程數(shù)量的web服務(wù)器,可以根據(jù)日志量對進(jìn)程數(shù)量進(jìn)行配置,提高服務(wù)的處理過程。
步驟S305:日志采集服務(wù)器接收到日志報文后,將日志報文整理轉(zhuǎn)換成json數(shù)據(jù)。
例如,json數(shù)據(jù):{
"logName":"日志類型名稱",
"logInfo":"日志內(nèi)容",
"op":"操作者",
"dt":"日志時間"
}
步驟S307:將數(shù)據(jù)存入REDIS緩存中,當(dāng)前服務(wù)對應(yīng)的編號所對應(yīng)的哈希表中。
步驟S309:日志記錄服務(wù)器每隔預(yù)定時間(例如,一分鐘),將REDIS哈希表中的所有數(shù)據(jù)取出。
步驟S311:日志記錄服務(wù)器將哈希表中取出的json進(jìn)行解析,得到日志內(nèi)容,日志記錄服務(wù)器根據(jù)當(dāng)前服務(wù)對應(yīng)的編號以及日志類型進(jìn)行處理,判斷當(dāng)前服務(wù)下是否已經(jīng)包含該日志類型,有則繼續(xù)保存日志,沒有則會自動創(chuàng)建日志類型再繼續(xù)保存日志。
步驟S313:日志記錄服務(wù)器對各個服務(wù)判斷配置的保存類型,確定是保存到數(shù)據(jù)庫和/或文本文件中,將日志內(nèi)容儲存到相應(yīng)的保存實體中。
圖4是根據(jù)本發(fā)明實施例的日志報文處理系統(tǒng)的結(jié)構(gòu)框圖。如圖4所示,該日志報文處理系統(tǒng)包括:作為統(tǒng)一入口的日志采集服務(wù)器1;其中,上述日志采集服務(wù)器1包括:接收模塊10,用于接收日志來源端發(fā)送的全部日志報文,其中,上述日志報文攜帶有當(dāng)前服務(wù)對應(yīng)的編號;轉(zhuǎn)換模塊12,用于將日志信息轉(zhuǎn)換成json數(shù)據(jù);發(fā)送模塊14,用于將上述json數(shù)據(jù)發(fā)送至REDIS緩存中上述編號對應(yīng)的哈希表中暫存。
采用圖4所示的系統(tǒng),通過唯一的入口進(jìn)行采集日志,實現(xiàn)了日志統(tǒng)一采集、記錄、管理,開發(fā)維護(hù)人員能從一個頁面瀏覽每一個服務(wù)產(chǎn)生的每一條日志記錄。極大方便了用戶協(xié)調(diào)工作,大大提升了排查問題,解決問題的效率;性能方便將資源消耗極大的日志采集一分為二,實現(xiàn)快速采集和延時查看。
優(yōu)選地,如圖5所示,上述系統(tǒng)還可以包括:日志記錄服務(wù)器2,其中,上述日志記錄服務(wù)器2包括:獲取模塊20,用于每隔預(yù)定時間從上述REDIS緩存中上述編號對應(yīng)的哈希表中獲取全部json數(shù)據(jù);保存模塊22,用于將哈希表中取出的json數(shù)據(jù)進(jìn)行解析,得到日志內(nèi)容并保存。
優(yōu)選地,如圖5所示,上述日志報文還可以攜帶有:日志類型,則上述保存模塊22可以進(jìn)一步包括:判斷單元220,用于根據(jù)當(dāng)前服務(wù)對應(yīng)的編號以及日志類型判斷當(dāng)前服務(wù)下是否包括上述日志內(nèi)容的日志類型;第一保存單元222,用于在包括上述日志內(nèi)容的日志類型,繼續(xù)保存上述日志內(nèi)容;第二保存單元224,用于在沒有包括上述日志內(nèi)容的日志類型時,則自動創(chuàng)建該日志類型,之后繼續(xù)保存上述日志內(nèi)容。
優(yōu)選地,上述日志采集服務(wù)器為能夠配置進(jìn)程數(shù)量的web服務(wù)器,其中,上述日志采集服務(wù)器根據(jù)日志報文的數(shù)量對上述進(jìn)程數(shù)量進(jìn)行配置。
綜上所述,借助本發(fā)明提供的上述實施例,實現(xiàn)了日志統(tǒng)一采集、記錄、管理,開發(fā)人員、維護(hù)人員能從一個頁面就能夠瀏覽每一個服務(wù)產(chǎn)生的各條日志記錄。極大方便了用戶協(xié)調(diào)工作,大大提升了排查問題,解決問題的效率;將資源消耗極大的日志采集一分為二,實現(xiàn)快速采集和延時查看。
以上公開的僅為本發(fā)明的幾個具體實施例,但是,本發(fā)明并非局限于此,任何本領(lǐng)域的技術(shù)人員能思之的變化都應(yīng)落入本發(fā)明的保護(hù)范圍。