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