本發(fā)明涉及一種基于配置文件的流式統(tǒng)計定義及運行方法,屬于電力系統(tǒng)自動化技術(shù)領(lǐng)域。
背景技術(shù):
隨著云計算、大數(shù)據(jù)技術(shù)的發(fā)展,運用大數(shù)據(jù)技術(shù)從海量數(shù)據(jù)中獲取潛在的有用信息已得到了各方面的廣泛關(guān)注。日志數(shù)據(jù)作為原始大數(shù)據(jù),其價值也越來越受到重視。在調(diào)度自動化系統(tǒng)中,目前日志數(shù)據(jù)只停留在事后故障診斷單一用途上,其主要分析方法仍停留在人工配合簡單腳本進行日志過濾及檢索的階段。為了充分挖掘調(diào)度自動化系統(tǒng)中日志的價值,對調(diào)度自動化系統(tǒng)關(guān)鍵指標進行數(shù)據(jù)統(tǒng)計,為以量化方式考核系統(tǒng)健康狀況提供數(shù)據(jù)基礎(chǔ),需要一種以日志數(shù)據(jù)為數(shù)據(jù)源的流式統(tǒng)計框架。
借助開源流式計算框架,實現(xiàn)對日志數(shù)據(jù)的流式統(tǒng)計是普遍采用的方案,目前業(yè)內(nèi)常用的流式計算框架有Storm和Spark Streaming。無論是Storm還是Spark Streaming,其本身是一個分布式系統(tǒng),提供了一個編程模型及相應(yīng)的接口。這種設(shè)計方式的靈活度高、適應(yīng)面廣,但是其代價是增加新的統(tǒng)計任務(wù)需要調(diào)用相應(yīng)的接口完成代碼編輯和編譯,使用比較復(fù)雜,學(xué)習(xí)成本高。對于調(diào)度自動化系統(tǒng)而言,基于開源流式計算框架實現(xiàn)流式統(tǒng)計功能一方面在部署上對原系統(tǒng)的侵入性大,另一方面不利于用戶的使用。
技術(shù)實現(xiàn)要素:
針對現(xiàn)有技術(shù)存在的不足,本發(fā)明目的是提供一種免代碼維護的、可靈活定義的、適用于調(diào)度自動化系統(tǒng)的基于配置文件的流式統(tǒng)計定義及運行方法。
為了實現(xiàn)上述目的,本發(fā)明是通過如下的技術(shù)方案來實現(xiàn):
本發(fā)明的一種基于配置文件的流式統(tǒng)計定義及運行方法,包括以下幾個步驟:
(1)創(chuàng)建配置文件,所述配置文件的內(nèi)容包括任務(wù)信息和計算模型;所述配置文件的名稱格式為:名稱_任務(wù)編號.conf,所述任務(wù)編號按自然順序遞增;
(2)編輯所述任務(wù)信息,所述任務(wù)信息包括屬性:任務(wù)名稱、任務(wù)類型和任務(wù)描述;所述任務(wù)名稱用于標識任務(wù),所述任務(wù)類型用于描述任務(wù)執(zhí)行方式,所述任務(wù)描述用于說明任務(wù)實現(xiàn)功能;
(3)編輯計算模型,所述計算模型描述統(tǒng)計過程所需組成元素包含:數(shù)據(jù)源定義、模式定義、統(tǒng)計操作定義和動作定義;其中,所述數(shù)據(jù)源定義用于描述任務(wù)需要的數(shù)據(jù)集;所述模式定義用于描述數(shù)據(jù)集投影及投影產(chǎn)生的方式;所述統(tǒng)計操作定義用于描述統(tǒng)計過程;所述動作定義用于描述對計算結(jié)果的處理;所述模式定義、統(tǒng)計操作定義和動作定義均可省略,省略動作定義表示采取默認動作定義即本地文件存儲;所述數(shù)據(jù)源定義、模式定義、統(tǒng)計操作定義和動作定義在執(zhí)行過程中具備順序關(guān)系,即數(shù)據(jù)按如下順序流轉(zhuǎn):數(shù)據(jù)源定義處理、模型定義處理、統(tǒng)計操作定義處理、動作定義處理。
(4)驗證所述配置文件合法性:新創(chuàng)建或被修改過的流式統(tǒng)計配置文件,需要通過定義檢查工具來確定配置文件的合法性;
(5)配置文件生效管理,所有流式統(tǒng)計配置文件由單獨的任務(wù)配置文件統(tǒng)一管理,只有增加到任務(wù)配置文件中的合法的流式統(tǒng)計配置文件才能生效;所述流式統(tǒng)計配置文件與統(tǒng)計服務(wù)一一對應(yīng);統(tǒng)計服務(wù)監(jiān)控進程監(jiān)視任務(wù)配置文件的更新,把緩存的任務(wù)配置文件內(nèi)容與新的任務(wù)配置文件進行比較生成任務(wù)差異,根據(jù)任務(wù)差異執(zhí)行任務(wù)啟動、任務(wù)終止、任務(wù)重啟操作;一個流式統(tǒng)計任務(wù)對應(yīng)一個配置文件;所有的流式統(tǒng)計配置文件由任務(wù)配置文件統(tǒng)一管理,由于表明該流式統(tǒng)配置文件生效。
(6)運行流式統(tǒng)計任務(wù),統(tǒng)計服務(wù)啟動時帶啟動參數(shù):任務(wù)編號;統(tǒng)計服務(wù)首先根據(jù)任務(wù)編號獲取流式統(tǒng)計配置文件,根據(jù)配置文件解析任務(wù)信息和計算模型,最終生成相應(yīng)的處理邏輯;統(tǒng)計任務(wù)執(zhí)行過程中,所有數(shù)據(jù)均是JSON格式,通過屬性名訪問。
步驟(1)中,所述配置文件分段定義,所述配置文件以KeyName=Value格式定義段內(nèi)的各種屬性。
步驟(2)中,支持兩種任務(wù)執(zhí)行方式:普通任務(wù)和周期定時任務(wù);所述普通任務(wù)在進程啟動后即開始計算;所述周期定時任務(wù)在設(shè)定時間段內(nèi)或者設(shè)定時刻執(zhí)行計算,可周期執(zhí)行,可執(zhí)行一次或者多次。與普通任務(wù)相比,周期定時任務(wù)具有額外的屬性值,包含時段定義、周期定義、次數(shù)定義。時段定義描述任務(wù)執(zhí)行的時間,周期定義描述任務(wù)執(zhí)行的周期,次數(shù)定義限制任務(wù)執(zhí)行次數(shù)。
步驟(3)中,所述計算模型通過數(shù)據(jù)源定義、模式定義、統(tǒng)計操作定義、動作定義4個組成元素,描述了一種鏈式數(shù)據(jù)處理過程:
統(tǒng)計服務(wù)以消息總線為數(shù)據(jù)源,消息總線以通道來劃分數(shù)據(jù)集;統(tǒng)計服務(wù)向消息總線訂閱數(shù)據(jù)源定義中配置的通道即完成源數(shù)據(jù)接入;數(shù)據(jù)源可配置過濾屬性,接收到的數(shù)據(jù)如果不滿足過濾屬性條件,數(shù)據(jù)將被丟棄;數(shù)據(jù)源過濾屬性條件,從數(shù)據(jù)源接收到的數(shù)據(jù)。
源數(shù)據(jù)接入后,根據(jù)模式定義描述的數(shù)據(jù)投影及投影生成方式,對數(shù)據(jù)進行抽取、轉(zhuǎn)換形成中間數(shù)據(jù)集;模式定義可配置過濾屬性,如果中間數(shù)據(jù)集數(shù)據(jù)不滿足過濾屬性條件,數(shù)據(jù)將被丟棄;模式定義過濾屬性,講過模式定義計算的中間結(jié)果集數(shù)據(jù)。
統(tǒng)計操作定義包含屬性:時間窗口、統(tǒng)計函數(shù)、分組、結(jié)果屬性名以及過濾屬性;統(tǒng)計窗口描述統(tǒng)計周期,統(tǒng)計結(jié)果按統(tǒng)計周期導(dǎo)出;統(tǒng)計函數(shù)支持最大值、最小值、平均值、總加值、排名和計數(shù);分組描述了對中間結(jié)果數(shù)據(jù)的分組條件;結(jié)果屬性名定義統(tǒng)計結(jié)果屬性名,用于方便后續(xù)通過屬性名訪問數(shù)據(jù);中間數(shù)據(jù)集按照統(tǒng)計操作定義完成數(shù)據(jù)計算,執(zhí)行一個統(tǒng)計周期后,根據(jù)過濾屬性配置確定統(tǒng)計結(jié)果是否導(dǎo)出,只有滿足過濾屬性條件的結(jié)果才是最終的統(tǒng)計結(jié)果;
最終統(tǒng)計結(jié)果根據(jù)動作定義配置確定處理方式,處理方式包含:本地保存、實時告警、數(shù)據(jù)庫存儲;一個統(tǒng)計任務(wù)中可配置多組處理方式,每種處理方式可以設(shè)置過濾屬性,根據(jù)過濾屬性配置,滿足過濾屬性條件的數(shù)據(jù)執(zhí)行對應(yīng)處理。
步驟(3)中,在數(shù)據(jù)源定義、模式定義、統(tǒng)計操作定義、動作定義中均可配置過濾屬性;所述過濾屬性的值為操作表達式;所述操作表達式由操作組成,并由符號||或者&&鏈接,符號||和&&表示操作間的關(guān)系(“或者”和“并且”),表達式按從左到右的順序執(zhí)行;操作是定義表達式的最小單元,不同的數(shù)據(jù)類型支持不同的操作,具體內(nèi)容如下表所示:
步驟(4)中,所述配置文件需要經(jīng)過檢查工具檢查,通過檢查的文件會被打上合法性標簽,只有具有合法標簽的文件才會被統(tǒng)計服務(wù)監(jiān)控程序調(diào)度;合法性檢查采用靜態(tài)驗證方式即逐一匹配預(yù)定義的規(guī)則,只要有一條規(guī)則不滿足則認為定義文件非法。
步驟(5)中,統(tǒng)計任務(wù)由統(tǒng)計服務(wù)監(jiān)控進程統(tǒng)一調(diào)度,統(tǒng)計服務(wù)監(jiān)控進程定期讀取任務(wù)配置文件,根據(jù)前后兩次任務(wù)配置文件差異,使統(tǒng)計任務(wù)自動生效;統(tǒng)計服務(wù)監(jiān)控進程接收統(tǒng)計任務(wù)心跳報文,對于超過心跳周期的統(tǒng)計任務(wù),統(tǒng)計服務(wù)監(jiān)控進程嘗試重新啟動。
步驟(6)中,配置文件被解析成一個處理過程,該處理過程對接入的數(shù)據(jù)逐條處理,每條數(shù)據(jù)按鏈式處理方式逐一通過數(shù)據(jù)源定義處理、模式定義處理、統(tǒng)計操作定義處理和動作定義處理;在每一個處理環(huán)節(jié)中,數(shù)據(jù)均以JSON格式封裝,均按屬性名訪問。
本發(fā)明所達到的有益效果如下:
(1)本發(fā)明以自定義的配置文件描述一個統(tǒng)計過程,通過分段定義和屬性定義兩級定義實現(xiàn)流式統(tǒng)計定義,保障了配置的靈活性;
(2)本發(fā)明具備把流式統(tǒng)計定義文件解析為流式統(tǒng)計任務(wù)的能力,實現(xiàn)新增統(tǒng)計任務(wù)免代碼維護;
(3)本發(fā)明采用統(tǒng)一任務(wù)調(diào)度的方式自動生效統(tǒng)計任務(wù),支持任務(wù)全生命周期監(jiān)控;統(tǒng)計任務(wù)與統(tǒng)計配置文件一一對應(yīng),避免了任務(wù)間的相互影響;
(4)本發(fā)明以數(shù)據(jù)記錄為單位,按照數(shù)據(jù)源定義處理、模式定義處理、統(tǒng)計操作定義處理、動作定義處理的順序?qū)崿F(xiàn)對單條數(shù)據(jù)記錄的鏈式處理;
(5)本發(fā)明采用JSON格式封裝數(shù)據(jù),統(tǒng)一通過屬性名訪問數(shù)據(jù),使得數(shù)據(jù)處理可支持結(jié)構(gòu)化和半結(jié)構(gòu)化數(shù)據(jù);
(6)本發(fā)明基于配置文件的流式統(tǒng)計定義及運行方法以最小的侵入代價實現(xiàn)免代碼維護的、可靈活定義的、適用于調(diào)度自動化系統(tǒng)。
附圖說明
圖1為本發(fā)明的一種基于配置文件的流式統(tǒng)計定義及運行方法工作流程圖;
圖2為本發(fā)明的基于數(shù)據(jù)記錄的鏈式數(shù)據(jù)處理示意圖。
具體實施方式
為使本發(fā)明實現(xiàn)的技術(shù)手段、創(chuàng)作特征、達成目的與功效易于明白了解,下面結(jié)合具體實施方式,進一步闡述本發(fā)明。
參見圖1,本實施例是一種基于配置文件的流式統(tǒng)計定義及運行方法,包含下列步驟:
(1)創(chuàng)建流式統(tǒng)計配置文件;配置文件名稱格式為“測試_1.conf”。
在本實施例中,在相同節(jié)點上的配置文件名稱中的任務(wù)編號不能重復(fù),任務(wù)編號按自然順序遞增。
(2)編輯任務(wù)信息;定義任務(wù)名稱、任務(wù)類型、任務(wù)描述。
在本實施例中,任務(wù)名稱、任務(wù)類型是關(guān)鍵屬性;任務(wù)描述是可選屬性。
(3)編輯計算模型;計算模型包含數(shù)據(jù)源定義、模式定義、統(tǒng)計操作定義和動作定義。其中數(shù)據(jù)源定義包含通道定義,過濾屬性定義;模式定義包含數(shù)據(jù)投影定義、數(shù)據(jù)投影處理過程定義、過濾屬性定義;統(tǒng)計操作定義包含時間窗口定義、統(tǒng)計函數(shù)定義、分組定義、結(jié)果屬性名定義、過濾屬性定義;動作定義包含行為定義、過濾屬性定義。
在本實施例中,除數(shù)據(jù)源定義外,模式定義、統(tǒng)計操作定義和動作定義都是可選配置定義項。統(tǒng)計操作中的實際窗口定義以秒為單位,支持最小的統(tǒng)計時間窗為60秒。
(4)合法性檢查;以配置文件文件名為參數(shù),運行合法性檢查工具,確定配置文件的合法性。
在本實施例中,配置文件合法性檢查工具采用靜態(tài)檢查方法,對配置在規(guī)則庫的規(guī)則逐條檢查。
(5)配置文件生效;在任務(wù)配置文件中增加一行記錄,該記錄描述流式統(tǒng)計配置文件名稱、心跳報文周期。
(6)統(tǒng)計任務(wù)啟動;統(tǒng)計服務(wù)監(jiān)控進程根據(jù)前后任務(wù)配置文件的差異,啟動統(tǒng)計進程。統(tǒng)計進程根據(jù)入?yún)ⅰ叭蝿?wù)編號”讀取對應(yīng)的流式統(tǒng)計配置文件,對配置文件解析后生成對應(yīng)的處理邏輯。統(tǒng)計進程按照任務(wù)類型執(zhí)行數(shù)據(jù)統(tǒng)計。
參見圖2,計算模型通過數(shù)據(jù)源定義、模式定義、統(tǒng)計操作定義、動作定義4個組成元素,描述了一種鏈式數(shù)據(jù)處理過程:
統(tǒng)計服務(wù)以消息總線為數(shù)據(jù)源,消息總線以通道來劃分數(shù)據(jù)集;統(tǒng)計服務(wù)向消息總線訂閱數(shù)據(jù)源定義中配置的通道即完成源數(shù)據(jù)接入;數(shù)據(jù)源可配置過濾屬性,接收到的數(shù)據(jù)如果不滿足過濾屬性條件,數(shù)據(jù)將被丟棄。
源數(shù)據(jù)接入后,根據(jù)模式定義描述的數(shù)據(jù)投影及投影生成方式,對數(shù)據(jù)進行抽取、轉(zhuǎn)換形成中間數(shù)據(jù)集;模式定義可配置過濾屬性,如果中間數(shù)據(jù)集數(shù)據(jù)不滿足過濾屬性條件,數(shù)據(jù)將被丟棄。
統(tǒng)計操作定義包含屬性:時間窗口、統(tǒng)計函數(shù)、分組、結(jié)果屬性名以及過濾屬性;統(tǒng)計窗口描述統(tǒng)計周期,統(tǒng)計結(jié)果按統(tǒng)計周期導(dǎo)出;統(tǒng)計函數(shù)支持最大值、最小值、平均值、總加值、排名和計數(shù);分組描述了對中間結(jié)果數(shù)據(jù)的分組條件;結(jié)果屬性名定義統(tǒng)計結(jié)果屬性名,用于方便后續(xù)通過屬性名訪問數(shù)據(jù);中間數(shù)據(jù)集按照統(tǒng)計操作定義完成數(shù)據(jù)計算,執(zhí)行一個統(tǒng)計周期后,根據(jù)過濾屬性配置確定統(tǒng)計結(jié)果是否導(dǎo)出,只有滿足過濾屬性條件的結(jié)果才是最終的統(tǒng)計結(jié)果。
最終統(tǒng)計結(jié)果根據(jù)動作定義配置確定處理方式,處理方式包含:本地保存、實時告警、數(shù)據(jù)庫存儲;一個統(tǒng)計任務(wù)中可配置多組處理方式,每種處理方式可以設(shè)置過濾屬性,根據(jù)過濾屬性配置,滿足過濾屬性條件的數(shù)據(jù)執(zhí)行對應(yīng)處理。
以上顯示和描述了本發(fā)明的基本原理和主要特征和本發(fā)明的優(yōu)點。本行業(yè)的技術(shù)人員應(yīng)該了解,本發(fā)明不受上述實施例的限制,上述實施例和說明書中描述的只是說明本發(fā)明的原理,在不脫離本發(fā)明精神和范圍的前提下,本發(fā)明還會有各種變化和改進,這些變化和改進都落入要求保護的本發(fā)明范圍內(nèi)。本發(fā)明要求保護范圍由所附的權(quán)利要求書及其等效物界定。