自研實(shí)時計(jì)算模塊介紹及運(yùn)維數(shù)據(jù)應(yīng)用場景實(shí)施
點(diǎn)擊上方“IT那活兒”公眾號,關(guān)注后了解更多內(nèi)容,不管IT什么活兒,干就完了?。?!
隨著現(xiàn)場生產(chǎn)業(yè)務(wù)的不斷壯大和發(fā)展,信息化系統(tǒng)建設(shè)的不斷推進(jìn),業(yè)務(wù)鏈條越來越長,所涉及到的業(yè)務(wù)處理環(huán)節(jié)也越來越多。各類運(yùn)營數(shù)據(jù)、運(yùn)維數(shù)據(jù)都呈爆炸式增長。對于我們運(yùn)維團(tuán)隊(duì)來說,以往通過將各類運(yùn)維狀態(tài)數(shù)據(jù)或性能數(shù)據(jù)通過各種自動化運(yùn)維工具采集并存放到數(shù)據(jù)庫,然后通過定時任務(wù)跑存儲過程,或者通過程序撈取一定周期的數(shù)據(jù)來進(jìn)行統(tǒng)計(jì)分析的方式,在當(dāng)前環(huán)境下已是捉襟見肘。再加上現(xiàn)場構(gòu)建運(yùn)維分析場景的需要,為了更好的分析系統(tǒng)運(yùn)行狀態(tài)和更深入的多維運(yùn)維分析,又納管了云環(huán)境指標(biāo)數(shù)據(jù)、業(yè)務(wù)數(shù)據(jù)、各類日志數(shù)據(jù)、業(yè)務(wù)鏈路數(shù)據(jù)等等都接入并進(jìn)行關(guān)聯(lián)分析,原有的離線(批量)計(jì)算模式已經(jīng)完全不再適用了。為了解決上述運(yùn)維分析的困境,我們自研了一套實(shí)時計(jì)算模塊,在各類運(yùn)維數(shù)據(jù)采集后、入庫前實(shí)現(xiàn)對數(shù)據(jù)的加工、關(guān)聯(lián)、統(tǒng)計(jì)、告警等計(jì)算操作。一方面避免在數(shù)據(jù)入庫之后再撈出,減少對數(shù)據(jù)存儲組件的依賴和壓力,另一方面也大大增加運(yùn)維數(shù)據(jù)分析的時效性,提升運(yùn)維團(tuán)隊(duì)對系統(tǒng)異常狀況的感知能力。值得一提的是,該自研實(shí)時計(jì)算模塊的功能,并未與數(shù)據(jù)的業(yè)務(wù)場景做任何綁定,也并不是只能用于運(yùn)維數(shù)據(jù)的加工和分析場景。通過對接任何格式的流式數(shù)據(jù),均可實(shí)現(xiàn)各類數(shù)據(jù)的加工、統(tǒng)計(jì)、規(guī)則判斷、關(guān)聯(lián)、復(fù)合統(tǒng)計(jì)等等處理邏輯,滿足不同的使用場景需求。
功能說明及對應(yīng)需求場景的實(shí)現(xiàn)案例
自研實(shí)時計(jì)算模塊(以下簡稱DOMP模塊)基于FLINK開源框架構(gòu)建。與市面上多數(shù)的基于FLINK的通用實(shí)時計(jì)算有所不同,DOMP模塊在單個計(jì)算任務(wù)中可配置對多個指標(biāo)的計(jì)算。這種架構(gòu)模式的建立,來源于現(xiàn)場運(yùn)維資源分配一般是偏小的。由于運(yùn)維的價值輸出不像業(yè)務(wù)系統(tǒng)或經(jīng)營分析系統(tǒng)這樣明顯和受到領(lǐng)導(dǎo)重視(雖然發(fā)生異?;蚬收蠒r帶來的損失巨大……),所以我們需要考慮在有限的資源下支撐盡可能多的運(yùn)維數(shù)據(jù)加工(分析),減少數(shù)據(jù)入庫后的再處理量。基于上述的背景及需求考慮,我們主要構(gòu)建了以下功能模塊:
該子模塊用于管理平臺所使用到的各類PAAS層組件,包括FLINK、Kafka、Redis、mysql、ES、Oracle等。
這個功能模塊實(shí)現(xiàn)對FLINK集群的界面話管理功能,支持對后臺FLINK集群的新增、參數(shù)配置維護(hù)、刪除等白屏化操作管理。(本期建設(shè)中尚未實(shí)現(xiàn)對后臺FLINK集群的自動創(chuàng)建,需要在后臺建好集群后,在前臺配置將集群的屬性進(jìn)行維護(hù),用于在集群中操作創(chuàng)建任務(wù),后續(xù)會考慮支持自動化方式實(shí)現(xiàn)集群的創(chuàng)建場景,并通過前臺管理對接)創(chuàng)建或修改FLINK集群屬性時,可以設(shè)定部署路徑、日志路徑、節(jié)點(diǎn)地址、checkpoint等信息。這些信息用于創(chuàng)建或啟動任務(wù)時的通用配置讀取。1.2 Kafka集群管理
Kafka集群管理實(shí)現(xiàn)將后臺搭建好的kafka集群及topic主題納入到平臺管理,記錄集群及通道的版本、zookeeper連接、broker連接、分區(qū)、副本等信息。Kafka信息用于在flink任務(wù)配置時指定接入數(shù)據(jù)源及輸出數(shù)據(jù)源配置。1.3 數(shù)據(jù)組件管理
與kafka集群管理的功能一樣,將flink任務(wù)配置時需要指定的入庫或入redis等數(shù)據(jù)組件的參數(shù)配置進(jìn)行統(tǒng)一管理,方便任務(wù)配置時使用,一方面方便管理,另一方面也有利于在任務(wù)配置時根據(jù)數(shù)據(jù)組件配置的邏輯語義來選擇。目前平臺支持mysql、oracle、redis、es等數(shù)據(jù)組件的配置及使用。2. 數(shù)據(jù)類型及計(jì)算規(guī)則管理
2.1 數(shù)據(jù)類型管理
正如前述所說,運(yùn)維使用的資源偏小,所以很多場景下都會存在資源復(fù)用,不同類型的數(shù)據(jù)時常會使用同一個數(shù)據(jù)管道來進(jìn)行傳輸。并且數(shù)據(jù)打標(biāo)的工作,上游也不一定會配合實(shí)現(xiàn)。由此,對于平臺來說,如果在同一個接入源(kafka-topic)中包含有多類不同的數(shù)據(jù),如何讓不同的數(shù)據(jù)支持不同的計(jì)算規(guī)則就成為一個難題。數(shù)據(jù)類型的作用是為了在后續(xù)的數(shù)據(jù)加工、指標(biāo)計(jì)算等場景中區(qū)分標(biāo)識不同的數(shù)據(jù),通過設(shè)定數(shù)據(jù)中的識別關(guān)鍵字的方式來實(shí)現(xiàn)。需要說明的是,對于平臺自己通過采集獲取到的數(shù)據(jù),會在采集或分詞時設(shè)定好數(shù)據(jù)類型標(biāo)識,只需要通過“導(dǎo)入日志模板”方式即可自動生成數(shù)據(jù)類型定義。而對于第三方平臺推送來的數(shù)據(jù),需要配置兩次數(shù)據(jù)類型,第一次用于標(biāo)識源數(shù)據(jù)中的識別關(guān)鍵字,第二次定義一個數(shù)據(jù)類型標(biāo)識,然后通過“數(shù)據(jù)加工”計(jì)算的方式來完成由源數(shù)據(jù)類型到帶標(biāo)識的數(shù)據(jù)類型的轉(zhuǎn)換輸出,這樣在后續(xù)的指標(biāo)計(jì)算中即可使用帶數(shù)據(jù)類型標(biāo)識的數(shù)據(jù)了,可以更好的提升指標(biāo)計(jì)算的效率。數(shù)據(jù)類型配置時,支持從日志模板導(dǎo)入,也支持從kafka-topic中撈取樣例數(shù)據(jù)來提取關(guān)鍵字及屬性字段進(jìn)行快速配置。2.2 計(jì)算規(guī)則管理
DOMP模塊包含加工規(guī)則、指標(biāo)規(guī)則、告警規(guī)則這三類實(shí)時計(jì)算規(guī)則。2.2.1 加工規(guī)則
加工規(guī)則是指針對原始數(shù)據(jù)的基于原始的字符串狀態(tài)的加工處理,因此所有的字符串類型數(shù)據(jù)都可做加工規(guī)則配置。包含分詞規(guī)則和數(shù)據(jù)加工兩種。1)分詞規(guī)則
分詞規(guī)則在日志采集時需要配置分詞,所以將計(jì)算規(guī)則的配置合并到日志采集模板配置流程中了,使其更符合場景使用流程。需要說明的是,由于分詞規(guī)則是在FLINK平臺上實(shí)現(xiàn)的,與數(shù)據(jù)的采集無關(guān)。因此是可以在不中斷采集的情況下修改分詞配置并生效的。另外,通過jdbc方式采集的數(shù)據(jù),默認(rèn)會自動在采集時按sql語句輸出的字段做分詞處理,不需要通過FLINK平臺來做分詞計(jì)算。但是,基于一些場景的需求,需要將數(shù)據(jù)庫中某一些字段提取其中的關(guān)鍵信息生成新的分詞信息用于后續(xù)的統(tǒng)計(jì)分析,則需要配置二次分詞規(guī)則。而二次分詞是需要通過FLINK實(shí)時計(jì)算的,在具體的場景實(shí)施時要根據(jù)需求來靈活應(yīng)用。分詞計(jì)算模塊支持對原始數(shù)據(jù)及分詞出來的數(shù)據(jù)做脫敏處理。對于需要脫敏的原始數(shù)據(jù),必須配置分詞,并在分詞配置中勾選脫敏動作。分詞計(jì)算后輸出的結(jié)果數(shù)據(jù)中,不論是原始的日志數(shù)據(jù)還是分離出的關(guān)鍵字段數(shù)據(jù),都會脫敏,且轉(zhuǎn)換值規(guī)則具有統(tǒng)一性,以保障數(shù)據(jù)的可關(guān)聯(lián)查詢。2)數(shù)據(jù)加工
數(shù)據(jù)加工是對于原始數(shù)據(jù)所做的加工處理,使其滿足后續(xù)的指標(biāo)計(jì)算規(guī)則的格式需求或業(yè)務(wù)表達(dá)需求。數(shù)據(jù)加工功能實(shí)現(xiàn)的是兩種數(shù)據(jù)類型之間的轉(zhuǎn)換。即從數(shù)據(jù)類型A轉(zhuǎn)換到數(shù)據(jù)類型B,所以轉(zhuǎn)換前后的數(shù)據(jù)類型均需在數(shù)據(jù)類型管理中先行配置。數(shù)據(jù)加工的配置及處理過程中支持對原始數(shù)據(jù)(分詞后)中的字段做過濾,即滿足條件才做加工。基于數(shù)據(jù)集加工規(guī)則
數(shù)據(jù)加工處理過程中,往往會碰到一種場景,即需要根據(jù)數(shù)據(jù)中的某個信息擴(kuò)展關(guān)聯(lián)其他的信息并添加到數(shù)據(jù)中,以方便后續(xù)的統(tǒng)計(jì)分析。例如原始數(shù)據(jù)中存在ip地址信息,需要根據(jù)這個ip地址信息關(guān)聯(lián)到其所屬的業(yè)務(wù)系統(tǒng)名稱或管理部門、管理人等信息,用于相應(yīng)的業(yè)務(wù)邏輯統(tǒng)計(jì)。
基于上述的業(yè)務(wù)場景需求,模塊實(shí)現(xiàn)了這種基于數(shù)據(jù)集的加工規(guī)則。通過配置一條sql語句從數(shù)據(jù)庫中查詢維表數(shù)據(jù)并加載到緩存中,當(dāng)源數(shù)據(jù)類型的數(shù)據(jù)流匹配到該加工規(guī)則時,根據(jù)維表所建立的字段映射關(guān)系,將目標(biāo)字段值生成添加到目標(biāo)數(shù)據(jù)類型的數(shù)據(jù)中。
維表的映射關(guān)系支持兩種過濾關(guān)系:
一種是維表字段與源數(shù)據(jù)類型中字段的“等于”關(guān)系,即當(dāng)A(維表).x(字段)=B(源數(shù)據(jù)).y(字段)時,滿足條件。
另一種是維表字段與源數(shù)據(jù)類型中字段的“包含于”關(guān)系,即維表中的字段是包含多個字符串的,判斷A(維表).x(字段)in B(源數(shù)據(jù)).y(字段)時,滿足條件。其中A(維表).x(字段)中是可以包含多個字符串的,以豎線分隔,該規(guī)則用于判斷在源數(shù)據(jù)中是否同時滿足包含多個字符串。
在現(xiàn)場使用該功能的過程中,還添加了一類特定的場景規(guī)則,即需要判斷某個sql語句中是否包含某些特定字符串(如特定的業(yè)務(wù)表或特定的操作關(guān)鍵字),由于sql語句中某些表名或字段名存在相似性,導(dǎo)致使用“包含于”規(guī)則無法正確匹配,所以我們增加了一類 “包含于(SQL專用)”規(guī)則,在匹配字段時需要額外判斷前后的空格字符,以此來區(qū)分該字符串是一個表名(或字段名、關(guān)鍵字),而不是某個其他相似字符串的一部分。
需要特別注意的是,在一個數(shù)據(jù)集加工規(guī)則中如果包含多個判斷(過濾)條件,需要先配置“等于”規(guī)則,再配置“包含于”規(guī)則。多個“等于”規(guī)則的情況下,也優(yōu)先配置能過濾掉更多數(shù)據(jù)的判斷條件。這與數(shù)據(jù)庫的查詢相同,盡量減輕后面判斷邏輯的壓力。
基于源數(shù)據(jù)的轉(zhuǎn)換規(guī)則
在對源數(shù)據(jù)類型的轉(zhuǎn)化需求里,我們總結(jié)了一些特定但具備共性的轉(zhuǎn)換需求,如時間格式化轉(zhuǎn)換、ip地址歸屬地域等,并將這些規(guī)則的實(shí)現(xiàn)固化到數(shù)據(jù)加工模塊里。“時間規(guī)整到分鐘”是由于原始數(shù)據(jù)在上游采集時出現(xiàn)數(shù)秒的延遲,而統(tǒng)計(jì)需要按分鐘整點(diǎn)進(jìn)行規(guī)整。
日志里的時間格式不統(tǒng)一,有些有毫秒、有些只到秒,有些是linux的基于毫秒的時間戳,有些是基于秒的時間戳,需要統(tǒng)一按yyyy-MM-dd HH24:mm:ss來規(guī)整。
而對于ip地址,在一些安全相關(guān)的場景中,需要識別該公網(wǎng)ip地址歸屬的國家或地區(qū),并在后續(xù)的統(tǒng)計(jì)分析中基于其歸屬地進(jìn)行分類統(tǒng)計(jì),因此模塊中增加了一個“ip轉(zhuǎn)歸屬”的特定規(guī)則,實(shí)現(xiàn)對公網(wǎng)ip地址的自動關(guān)聯(lián)生成其歸屬國家或地區(qū)。
數(shù)據(jù)轉(zhuǎn)換的規(guī)則是在現(xiàn)場使用過程中,基于業(yè)務(wù)場景逐漸添加的,后續(xù)也將不斷擴(kuò)展。添加時間字段的加工規(guī)則
某些從其他平臺傳入的源數(shù)據(jù)類型,可能并不包含時間信息,而指標(biāo)計(jì)算往往是需要依據(jù)時間來進(jìn)行統(tǒng)計(jì)的,所以需要一個數(shù)據(jù)加工規(guī)則,將數(shù)據(jù)中增加一個時間字段,目前是以實(shí)時計(jì)算程序接收到數(shù)據(jù)的時間作為其數(shù)據(jù)時間。
自動復(fù)制未配置規(guī)則的同名字段
在數(shù)據(jù)加工配置過程中,從數(shù)據(jù)類型A到數(shù)據(jù)類型B的配置轉(zhuǎn)換,除了少數(shù)字段會需要使用 “基于數(shù)據(jù)集加工規(guī)則”、“基于源數(shù)據(jù)的轉(zhuǎn)換規(guī)則”、“添加時間字段的加工規(guī)則”方式來配置數(shù)據(jù)字段的加工處理,其他字段都需要沿用源數(shù)據(jù)類型的同名字段,因此增加了這個配置功能,自動完成同名字段的配置。在實(shí)際的使用過程中,應(yīng)該先執(zhí)行“自動復(fù)制未配置規(guī)則的同名字段”的配置動作,將可以復(fù)制的字段全部生成出來,再根據(jù)需要將其中的某些字段配置進(jìn)行修改。(后續(xù)會將此配置功能實(shí)現(xiàn)自動化,當(dāng)新增A數(shù)據(jù)類型到B數(shù)據(jù)類型的數(shù)據(jù)加工規(guī)則項(xiàng)時,自動復(fù)制同名字段的配置規(guī)則)
2.2.2 指標(biāo)規(guī)則
指標(biāo)計(jì)算是指根據(jù)業(yè)務(wù)需求,對帶有數(shù)據(jù)標(biāo)識的數(shù)據(jù)進(jìn)行統(tǒng)計(jì)分析,并輸出結(jié)果的計(jì)算過程。而指標(biāo)規(guī)則配置即是統(tǒng)計(jì)分析業(yè)務(wù)邏輯的具體體現(xiàn)。在該模塊在現(xiàn)場的磨合過程中迭代出了以下類型的指標(biāo)計(jì)算規(guī)則:1)簡單指標(biāo)計(jì)算
簡單指標(biāo)是面向原始數(shù)據(jù)類型的統(tǒng)計(jì)計(jì)算,這個模塊的設(shè)計(jì)思路是以數(shù)據(jù)類型為表,以數(shù)據(jù)類型中的屬性字段為表字段,選擇數(shù)據(jù)類型中的屬性字段作為指標(biāo)key字段,實(shí)現(xiàn)類似sql語句的group by的分組統(tǒng)計(jì)邏輯。簡單指標(biāo)計(jì)算在配置時需要指定統(tǒng)計(jì)周期,目前能支持到1,2,3,4,5,10,15,30(分鐘)的統(tǒng)計(jì)周期,統(tǒng)計(jì)是按規(guī)整時間輸出的,而不是任務(wù)的啟動時間開始計(jì)時,這樣是為了方便數(shù)據(jù)使用時的時間具有一致性。例如3分鐘的統(tǒng)計(jì)周期,其輸出的時間點(diǎn)就是按每個小時的0分,3分,6分,9分……51分,54分,57分,如此反復(fù)。另外,基于不同需求的統(tǒng)計(jì)口徑要求不同,還將統(tǒng)計(jì)輸出規(guī)整時間分為后向(默認(rèn))和前向(非默認(rèn))兩種,支持對統(tǒng)計(jì)輸出的時間歸屬向前或向后規(guī)整。例如按1分鐘周期做指標(biāo)統(tǒng)計(jì)時,如果是后向(默認(rèn))統(tǒng)計(jì)規(guī)則,則被統(tǒng)計(jì)數(shù)據(jù)中08:00:03這個時間點(diǎn)的歸屬統(tǒng)計(jì)時間是08:01:00,但如果是前向統(tǒng)計(jì)規(guī)則,那歸屬時間點(diǎn)則是08:00:00,需要現(xiàn)場按照各自的業(yè)務(wù)規(guī)則來進(jìn)行選擇。目前模塊中實(shí)現(xiàn)的簡單指標(biāo)計(jì)算的分組統(tǒng)計(jì)規(guī)則包括以下幾種:
等于value值
等于value值準(zhǔn)確來說不是一種統(tǒng)計(jì)邏輯,其作用的場景是針對每一條數(shù)據(jù)生成一個指標(biāo),用于實(shí)現(xiàn)對原始數(shù)據(jù)的指標(biāo)化(格式化)。在運(yùn)維場景中,從后臺主機(jī)采集到的性能數(shù)據(jù),或從第三方平臺傳輸過來的性能數(shù)據(jù),格式各不相同,通過“等于value值”的計(jì)算邏輯,根據(jù)業(yè)務(wù)場景的需要提取原始數(shù)據(jù)中的關(guān)鍵字段作為指標(biāo)key值,以及獲取原始數(shù)據(jù)中的性能數(shù)據(jù)值作為value值,生成統(tǒng)一格式的指標(biāo),用于下游的應(yīng)用場景。需要特別注意的是,如果數(shù)據(jù)中根據(jù)分組邏輯存在一個分組中多條數(shù)據(jù)的情況,是不適用于這種規(guī)則的。因此必須根據(jù)原始數(shù)據(jù)中各屬性字段的邏輯,在選擇分組字段時必須控制保證每個分組只會包含一條數(shù)據(jù)。舉例來說,對于一臺主機(jī)上的磁盤空間使用率的采集數(shù)據(jù),如果分組字段只選擇了ip地址的話,使用該統(tǒng)計(jì)規(guī)則是無法正確生成每個磁盤的使用率的(只會獲取到第一條數(shù)據(jù)生成指標(biāo)),必須在分組時選擇ip(主機(jī)ip)和dataspace_name(磁盤分區(qū)名)兩個字段,才能正確生成每一個磁盤空間的使用率指標(biāo)。另一種適配使用的場景,是配合數(shù)據(jù)的過濾條件規(guī)則,獲取到某個最值數(shù)據(jù)所對應(yīng)的數(shù)據(jù)的指定屬性信息。同樣舉個例子,對于獲取到的一個時間周期內(nèi)某個應(yīng)用集群下的所有主機(jī)的cpu使用率,如果需求是要獲取到其中cpu使用率最高的ip地址信息,則可以通過此規(guī)則配置key的分組字段是時間字段(默認(rèn)自動會按時間分組,無需配置)及應(yīng)用集群名(app_name),配置value字段是ip地址字段(ip),統(tǒng)計(jì)規(guī)則是“等于value值”,同時在數(shù)據(jù)過濾規(guī)則中,配置為cpu使用率字段(cpu_use)的操作符為“等于最大值”。
等于最大(最?。﹙alue值
最值統(tǒng)計(jì)是一類常用的統(tǒng)計(jì)規(guī)則,即按分組規(guī)則統(tǒng)計(jì)組內(nèi)的數(shù)據(jù)某個字段的最大(最?。┲?/span>。例如統(tǒng)計(jì)一定時間周期內(nèi)各個接口調(diào)用的最大耗時,就是一個典型的最值統(tǒng)計(jì)場景。根據(jù)業(yè)務(wù)統(tǒng)計(jì)的需要配置指標(biāo)的key字段為應(yīng)用集群名(app_name)和接口名(intf_name),指標(biāo)value字段配置為獲取耗時字段(cost),統(tǒng)計(jì)規(guī)則是“等于最大value值”。
等于value平均值
均值統(tǒng)計(jì)是一類常用的統(tǒng)計(jì)規(guī)則,即按分組規(guī)則統(tǒng)計(jì)組內(nèi)的數(shù)據(jù)某個字段的均值。例如統(tǒng)計(jì)一定時間周期內(nèi)接口調(diào)用的平均耗時,就是一個典型的均值統(tǒng)計(jì)場景。根據(jù)業(yè)務(wù)統(tǒng)計(jì)的需要配置指標(biāo)的key字段為應(yīng)用集群名(app_name)和接口名(intf_name),指標(biāo)value字段配置為獲取耗時字段(cost),統(tǒng)計(jì)規(guī)則是“等于value平均值”。
累加value值
累加value值是對原始數(shù)據(jù)某個字段數(shù)據(jù)的累加統(tǒng)計(jì)。例如某個應(yīng)用集群包含多個應(yīng)用實(shí)例,每個實(shí)例在每分鐘都會輸出服務(wù)調(diào)用請求量數(shù)據(jù),而我們所需要展示的是這個應(yīng)用集群的總服務(wù)調(diào)用請求量時,就可以使用這種規(guī)則。配置統(tǒng)計(jì)分組key字段是應(yīng)用集群名(app_name),value字段是調(diào)用請求量(call_count),統(tǒng)計(jì)規(guī)則為“累加value值”。
去重獲取所有value值
去重獲取所有value值是對原始數(shù)據(jù)某個字段中的字符串信息的整合獲取。例如在運(yùn)維分析場景中,要獲取實(shí)時(1分鐘內(nèi))接口調(diào)用耗時超過15秒的所有接口名稱,可以使用該規(guī)則。配置統(tǒng)計(jì)分組key字段是應(yīng)用集群名(app_name),配置數(shù)據(jù)過濾條件是接口調(diào)用耗時(cost)大于15000(毫秒),value字段是接口名(intf_name),規(guī)則是“去重獲取所有的value值”。該規(guī)則會將所有調(diào)用超過15秒的接口名稱去重后形成逗號分隔的清單作為指標(biāo)值輸出。
去重獲取value值數(shù)量
與去重獲取所有value值類似,去重獲取所有value值同樣是對原始數(shù)據(jù)某個字段中的字符串信息的整合獲取。源于需求中需要統(tǒng)計(jì)的是數(shù)量,而不是明細(xì)清單。在運(yùn)維分析中時長會存在同一個對象在周期時間(1分鐘內(nèi))多次輸出信息的場景。例如基于接口調(diào)用日志的數(shù)據(jù)統(tǒng)計(jì)分析,高頻的接口往往高達(dá)成百上千甚至上萬次,當(dāng)我們需要知道一個應(yīng)用集群中到底有多少個接口存在調(diào)用失敗時,需要對接口名稱去重來統(tǒng)計(jì)數(shù)量。上述的場景可以配置統(tǒng)計(jì)分組key字段是應(yīng)用集群名(app_name),配置數(shù)據(jù)過濾條件是接口調(diào)用結(jié)果(result)為-1,value字段是接口名(intf_name),規(guī)則是“去重獲取value值數(shù)量”。該規(guī)則會將所有調(diào)用失敗的接口名稱去重后統(tǒng)計(jì)數(shù)量作為指標(biāo)值輸出。
統(tǒng)計(jì)數(shù)量
統(tǒng)計(jì)數(shù)量是最常用的一類統(tǒng)計(jì)規(guī)則。根據(jù)業(yè)務(wù)需要調(diào)整指標(biāo)key的分組字段,可以按不同的分組邏輯來對原始數(shù)據(jù)做各種維度的統(tǒng)計(jì)分析,結(jié)合原始數(shù)據(jù)的過濾條件,達(dá)到絕大多數(shù)統(tǒng)計(jì)目的。
統(tǒng)計(jì)比率
統(tǒng)計(jì)比率也是常見的數(shù)據(jù)統(tǒng)計(jì)需求,模塊支持按原始數(shù)據(jù)的某個字段的枚舉值,自動生成各值所占比率的指標(biāo)。例如接口調(diào)用成功率的計(jì)算指標(biāo)就是個很典型的例子。配置原始數(shù)據(jù)中接口名(intf_name),調(diào)用結(jié)果(result)為key的分組字段,value字段是調(diào)用結(jié)果(result),統(tǒng)計(jì)規(guī)則是“統(tǒng)計(jì)比率”。按照這個配置,會自動根據(jù)調(diào)用結(jié)果(result)的成功(0)和失?。?1)自動生成分別的占比情況。根據(jù)上述的場景描述,相信很多人會發(fā)現(xiàn),這個指標(biāo)的配置實(shí)際上是會根據(jù)枚舉值的不同生成兩條指標(biāo)的,而不是只生成了“成功率”這一條指標(biāo),“失敗率”這個指標(biāo)就成了一個副產(chǎn)品輸出了。優(yōu)點(diǎn)是在場景需求有需要時可以同時滿足,但其實(shí)缺點(diǎn)更明顯,會占用更多的存儲資源……需要注意的是,在使用“統(tǒng)計(jì)比率”規(guī)則時,不要(也無需)通過數(shù)據(jù)過濾來去除不想統(tǒng)計(jì)的枚舉值。例如只想統(tǒng)計(jì)成功率,于是想通過數(shù)據(jù)過濾的方式將調(diào)用結(jié)果(result)為失?。?1)的數(shù)據(jù)給過濾掉,那其實(shí)是把總數(shù)減去了失敗數(shù),統(tǒng)計(jì)成功比率就成100%了,失去了統(tǒng)計(jì)的意義。另一個需要提前考慮的點(diǎn)是,這種統(tǒng)計(jì)比率在字段枚舉值相對固定時是可控的,但如果字段可能的值會非常多的情況下,每個統(tǒng)計(jì)生成的指標(biāo)數(shù)量是與枚舉值的數(shù)量一樣多的,也就是可能會產(chǎn)生海量指標(biāo)數(shù)據(jù),對實(shí)時計(jì)算和下游的傳輸、最后的存儲都帶來巨大壓力。所以在使用時需要特別慎重考慮,提前規(guī)劃。舉個例子,統(tǒng)計(jì)一個應(yīng)用集群中的服務(wù)調(diào)用的分別占比的指標(biāo),如果這個應(yīng)用集群中有1000個服務(wù),那么理論上在一個統(tǒng)計(jì)周期最多就會生成1000條記錄每個服務(wù)調(diào)用次數(shù)占比的指標(biāo)數(shù)據(jù),如果再加上調(diào)用成功率的占比的話,按調(diào)用結(jié)果為成功或不成功兩類,就會有2000條指標(biāo)生成。其他如統(tǒng)計(jì)數(shù)量等指標(biāo)也類似,一定要提前預(yù)估好可能生成的指標(biāo)數(shù),避免出現(xiàn)不可控的“指標(biāo)風(fēng)暴”。
TopN
在發(fā)現(xiàn)上述統(tǒng)計(jì)比率或統(tǒng)計(jì)數(shù)量的方式可能存在海量指標(biāo)生成的風(fēng)險后,以前直接按所有枚舉值統(tǒng)計(jì)數(shù)量或比率,再從表中撈取前10這樣的實(shí)現(xiàn)方式就不太好用了。例如統(tǒng)計(jì)并展示調(diào)用失敗率最高的10個接口這樣的需求,如果接口數(shù)量高達(dá)數(shù)千個,那生成的指標(biāo)的數(shù)量也必然是海量的,于是我們新增了TopN這樣的統(tǒng)計(jì)規(guī)則。這個規(guī)則在配置key分組字段和過濾條件時與其他指標(biāo)規(guī)則是類似的,但在配置value字段時有較大區(qū)別。TopN的計(jì)算對象屬性字段(value)需要配置3段內(nèi)容,分別是“統(tǒng)計(jì)對象字段”、“展示字段”、“TopN條數(shù)”,用#分隔。舉個例子,假設(shè)要統(tǒng)計(jì)一個應(yīng)用集群的服務(wù)調(diào)用耗時top10數(shù)據(jù)指標(biāo),可以配置key的分組字段是應(yīng)用集群名稱(app_name),統(tǒng)計(jì)規(guī)則是TopN,計(jì)算對象屬性字段即value字段是“耗時字段”#“服務(wù)名字段”#10(cost#servie_name#10),這樣配置會輸出10條指標(biāo)數(shù)據(jù),分別對應(yīng)調(diào)用耗時top10的服務(wù)名。需要說明的是,TopN的指標(biāo)規(guī)則并不適用于對周期時間內(nèi)的先統(tǒng)計(jì)再排序的場景。例如一分鐘內(nèi)按接口名統(tǒng)計(jì)調(diào)用次數(shù)(或調(diào)用成功率),再根據(jù)調(diào)用次數(shù)(或調(diào)用成功率)進(jìn)行TopN排序的需求,無法用該規(guī)則來實(shí)現(xiàn)。目前的實(shí)現(xiàn)這種場景的方式暫時只能是先按調(diào)用次數(shù)(或調(diào)用成功率)來對接口做分組統(tǒng)計(jì),然后再利用入庫后的數(shù)據(jù),使用sql語句撈取,用order by進(jìn)行排序。相對來說,上述的場景實(shí)現(xiàn)會比較難保證實(shí)時性和效率,入庫數(shù)據(jù)量也會大很多。這也是我們?yōu)槭裁丛诖罅ν苿佑?jì)算分析過程實(shí)時化的主要原因。對于上述的這個場景,后續(xù)我們也將實(shí)現(xiàn)相應(yīng)的通用規(guī)則來滿足實(shí)時化計(jì)算的支撐。
指標(biāo)數(shù)據(jù)過濾規(guī)則
在上述指標(biāo)計(jì)算的計(jì)算規(guī)則中有提到對數(shù)據(jù)的過濾規(guī)則。數(shù)據(jù)過濾規(guī)則是指在同一種數(shù)據(jù)類型中,只針對某一類數(shù)據(jù)按指標(biāo)規(guī)則進(jìn)行計(jì)算,其他同類型的數(shù)據(jù)并不參與統(tǒng)計(jì)。這個過濾規(guī)則類似于sql語句的where條件,通過對各個字段的條件判斷將數(shù)據(jù)過濾到業(yè)務(wù)邏輯所需要的范圍。需要注意的是,應(yīng)優(yōu)先配置能過濾掉更多數(shù)據(jù)的判斷條件。這與數(shù)據(jù)庫的查詢相同,盡量減輕后面判斷邏輯的壓力。數(shù)據(jù)過濾的規(guī)則項(xiàng),與指標(biāo)告警計(jì)算的規(guī)則項(xiàng)基本相同,放到指標(biāo)告警計(jì)算中一并介紹,如需要了解的請?zhí)D(zhuǎn)到對應(yīng)章節(jié)即可。
2)復(fù)合指標(biāo)計(jì)算
復(fù)合指標(biāo)計(jì)算是區(qū)別于簡單指標(biāo)計(jì)算而言的,是指對同模板源指標(biāo)數(shù)據(jù)(告警數(shù)據(jù))基于同一時間戳的二次統(tǒng)計(jì),或?qū)Ξ悩?gòu)源指標(biāo)數(shù)據(jù)(告警數(shù)據(jù))基于同一時間戳的二次統(tǒng)計(jì)。計(jì)算的源數(shù)據(jù)是經(jīng)由DOMP實(shí)時計(jì)算所產(chǎn)生的指標(biāo)數(shù)據(jù)(滿足平臺制訂的指標(biāo)數(shù)據(jù)格式,可以是簡單指標(biāo)計(jì)算的輸出結(jié)果,也可以是復(fù)合指標(biāo)計(jì)算的結(jié)果),或基于指標(biāo)的告警規(guī)則所生成的告警數(shù)據(jù)(符合平臺制訂的告警數(shù)據(jù)格式)。復(fù)合指標(biāo)計(jì)算適配的場景包括以下幾種:
基于打分規(guī)則的轉(zhuǎn)換
原始采集到的源數(shù)據(jù)中的性能值或簡單指標(biāo)計(jì)算輸出的指標(biāo)值,是貼近原始狀態(tài)的。例如cpu使用率的百分比值,接口調(diào)用成功率的百分比值,服務(wù)調(diào)用總量的值等,都是相對真實(shí)信息的記錄。但在很多分析場景中,需要對這些值進(jìn)行轉(zhuǎn)換處理。例如cpu使用率低于50%記為10分,使用率每提高10%則降2分,如果使用率大于95%則記為0分,這就需要對源指標(biāo)的值做轉(zhuǎn)換操作了。上述的這個邏輯我們可以通過一個打分規(guī)則配置來實(shí)現(xiàn):平臺支持配置多種打分規(guī)則,同一個打分規(guī)則可以用在不同的復(fù)合指標(biāo)計(jì)算中。例如在上圖的配置中,0<值<40的會被轉(zhuǎn)換為10分,40<值<80的會被轉(zhuǎn)換為20分。操作符可以有大于,大于等于、小于、小于等于等判斷規(guī)則,對值的上下區(qū)間門限進(jìn)行判斷。需要注意的是,打分規(guī)則有執(zhí)行順序的判斷,對于一個指標(biāo)的值,會將所有規(guī)則按順序執(zhí)行一遍,最后輸出分值轉(zhuǎn)換結(jié)果。如果打分規(guī)則存在對值區(qū)間的重疊,則會以最后一條符合條件的規(guī)則來輸出轉(zhuǎn)換結(jié)果。配置好的打分規(guī)則在復(fù)合指標(biāo)添加源指標(biāo)時選用:這樣在進(jìn)行指標(biāo)復(fù)合計(jì)算時,該指標(biāo)的值會被按打分規(guī)則轉(zhuǎn)換后再進(jìn)入復(fù)合計(jì)算邏輯。
對異構(gòu)源指標(biāo)的組合統(tǒng)計(jì)
在一些分析場景中,我們需要對多種不同的指標(biāo)組合來完成統(tǒng)計(jì)分析。計(jì)算某個對象的健康度是一個典型場景。健康度的計(jì)算往往是基于多個黃金(核心)指標(biāo)項(xiàng),通過加權(quán)計(jì)算的方式來實(shí)現(xiàn)的(雖然加權(quán)計(jì)算這種方式存在太多主觀思維,有拍腦袋的嫌疑,但在實(shí)際的場景構(gòu)建中仍難以避免)。常見的健康度計(jì)算方式,是基于一個總分,按不同指標(biāo)對目標(biāo)業(yè)務(wù)影響程度的比重不同來設(shè)定權(quán)重值,然后對這些指標(biāo)加權(quán)累加得到一個分值,用來代表當(dāng)前評分對象的健康度。其中在設(shè)定各個指標(biāo)的分值時會用到上面所說的“基于打分規(guī)則的轉(zhuǎn)換”邏輯,實(shí)現(xiàn)從指標(biāo)值到分?jǐn)?shù)值的轉(zhuǎn)換,不再贅述。針對每個復(fù)合計(jì)算用到的指標(biāo),可以設(shè)定一個別名,別名的定義包含字母和數(shù)字(如A1,A2,B3,C4等),在選擇自定義規(guī)則后可以使用例如A1*0.2+B1*0.3+C1*0.5這樣的四則運(yùn)算公式來實(shí)現(xiàn)按權(quán)重的指標(biāo)復(fù)合計(jì)算規(guī)則。復(fù)合指標(biāo)的計(jì)算周期必須大于或等于源指標(biāo)周期。例如需要對兩個源指標(biāo)配置復(fù)合,一個源指標(biāo)的生成周期是5分鐘,另一個是10分鐘,那么復(fù)合指標(biāo)周期必須大于等于10分鐘,否則會出現(xiàn)在一個計(jì)算周期中源指標(biāo)不滿足條件的情況。在選擇計(jì)算復(fù)合所需要使用的指標(biāo)模板后,除了對指標(biāo)值做分值轉(zhuǎn)換,也可以對各源指標(biāo)的字段取值做固定值限制。比如根據(jù)源指標(biāo)模板(主機(jī)cpu使用率)生成了所有分析對象指標(biāo),但在復(fù)合計(jì)算時只需要對其中的某一個對象(某一臺主機(jī)或某一個集群)進(jìn)行復(fù)合計(jì)算,則可以在變量取值規(guī)則處限定需要過濾的字段取值。另外,由于一個源指標(biāo)模板在不同的維度上存在多個指標(biāo)值的情況,例如一個應(yīng)用集群中包含多個主機(jī)對象,又或者復(fù)合計(jì)算的統(tǒng)計(jì)周期包含多個源指標(biāo)的統(tǒng)計(jì)周期(例如:源指標(biāo)統(tǒng)計(jì)1分鐘一次,復(fù)合指標(biāo)統(tǒng)計(jì)30分鐘一次),那么對于這個集群(或更大事件周期)的統(tǒng)計(jì)分析來說是會包含有多個同源指標(biāo)值的,根據(jù)需要可以使用使用指標(biāo)規(guī)則獲取“最大值”、“最小值”、“平均值”、“求和”、“求數(shù)量”等邏輯計(jì)算,將計(jì)算的結(jié)果代入復(fù)合計(jì)算邏輯。
對指標(biāo)告警數(shù)據(jù)的統(tǒng)計(jì)
在實(shí)際運(yùn)維數(shù)據(jù)分析場景中,我們會用到對于告警數(shù)量的統(tǒng)計(jì),并基于這個統(tǒng)計(jì)生成一個指標(biāo)。舉個例子,我們會需要獲取一個應(yīng)用集群中接口調(diào)用成功率低于85%的接口的數(shù)量,這里面就涉及到兩次的統(tǒng)計(jì)規(guī)則。一次是計(jì)算得到每個接口的調(diào)用成功率,另一個是統(tǒng)計(jì)調(diào)用成功率低于85%的接口數(shù)量。實(shí)現(xiàn)這個需求場景,需要先配置一個簡單指標(biāo),使用統(tǒng)計(jì)比率規(guī)則,就可以得到各個接口的調(diào)用成功率。對于接口成功率低于85%的指標(biāo),可以配置生成一條閾值告警規(guī)則,這樣我們就可以得到了“某接口1分鐘調(diào)用成功率低于85%”的告警數(shù)據(jù)。通過將告警數(shù)據(jù)輸出到復(fù)合計(jì)算的前置kafka-topic中,配置一個基于告警的復(fù)合指標(biāo),規(guī)則是統(tǒng)計(jì)某個集群中這類告警的數(shù)量,則可以得到該應(yīng)用集群里接口成功率低于85%的接口數(shù)量。當(dāng)然,我們也可以在此對該指標(biāo)配置一個告警,例如當(dāng)符合條件的接口的數(shù)量大于10個時,應(yīng)該才產(chǎn)生一條升級的告警(無限套娃,哈哈)。還有一種場景是基于不同維度的復(fù)合指標(biāo)統(tǒng)計(jì)。例如在一個應(yīng)用集群中包含很多的主機(jī),一臺主機(jī)有多個黃金(核心)指標(biāo)項(xiàng),例如cpu使用率、內(nèi)存使用率、磁盤空間使用率等等。一臺主機(jī)可能同時會觸發(fā)多個告警(例如cpu和內(nèi)存同時告警,又或者多個磁盤空間產(chǎn)生告警),而對于應(yīng)用集群維度的管理需求,是需要知道這個應(yīng)用集群里有多少臺主機(jī)在當(dāng)前正在告警。所以在統(tǒng)計(jì)應(yīng)用集群維度的告警主機(jī)數(shù)量時,要按主機(jī)維度做告警信息的去重統(tǒng)計(jì)數(shù)量。而在統(tǒng)計(jì)應(yīng)用集群維度的告警總數(shù)時,是不應(yīng)該去重統(tǒng)計(jì)的。上述的不同需求場景,都能在復(fù)合指標(biāo)計(jì)算模塊的配置中找到對應(yīng)的規(guī)則選項(xiàng)進(jìn)行支撐。
兩種指標(biāo)數(shù)據(jù)的關(guān)聯(lián)合并
在使用關(guān)系型數(shù)據(jù)庫時,常見的一個數(shù)據(jù)使用場景是根據(jù)兩張表中的某些字段相等關(guān)系,對于兩張表做關(guān)聯(lián)查詢,這樣能輸出一個包含兩張表中字段的數(shù)據(jù)視圖。在實(shí)時數(shù)據(jù)計(jì)算的場景中,我們同樣會面臨這樣的需求。例如一個用戶行為分析的場景,當(dāng)某個連接使用VPN登錄企業(yè)內(nèi)網(wǎng)獲得一個內(nèi)網(wǎng)地址,再通過內(nèi)網(wǎng)的防火墻訪問某個DCN的設(shè)備時,我們能分別從VPN設(shè)備日志、DCN網(wǎng)的防火墻日志中分別獲取到兩段數(shù)據(jù),即數(shù)據(jù)A(外網(wǎng)IP、外網(wǎng)端口、內(nèi)網(wǎng)IP、內(nèi)網(wǎng)端口),以及數(shù)據(jù)B(內(nèi)網(wǎng)IP、內(nèi)網(wǎng)端口,DCN設(shè)備IP,DCN設(shè)備端口),原始日志數(shù)據(jù)如下(已脫敏):在安全防護(hù)運(yùn)維工作中,經(jīng)常面臨的一個分析場景,是需要根據(jù)異常的DCN設(shè)備的訪問行為,去反向查找這個訪問的來源,再判斷是否要將該外網(wǎng)地址在VPN設(shè)備端進(jìn)行封堵。以前的做法是把兩個日志數(shù)據(jù)關(guān)鍵字段提取后分別入庫到兩張表,再按表關(guān)聯(lián)查詢的方式來獲取到訪問來源外網(wǎng)地址。但這兩個日志的數(shù)據(jù)量都是海量的,表關(guān)聯(lián)查詢的效率難以保證,因此我們在實(shí)時計(jì)算中實(shí)現(xiàn)了一類復(fù)合關(guān)聯(lián)計(jì)算的邏輯。通過源數(shù)據(jù)中內(nèi)網(wǎng)ip和內(nèi)網(wǎng)端口這兩個關(guān)鍵字段的一致性,將外網(wǎng)地址與DCN網(wǎng)設(shè)備直接建立關(guān)聯(lián)輸出為一條指標(biāo)數(shù)據(jù),這樣在后續(xù)分析查詢時可以更高效地完成檢索工作。
3)加工指標(biāo)計(jì)算
加工指標(biāo)的場景和數(shù)據(jù)加工的場景是類似的,但數(shù)據(jù)加工的對象是數(shù)據(jù)類型,而加工指標(biāo)的對象是指標(biāo)類型。在指標(biāo)已經(jīng)生成后,再根據(jù)指標(biāo)所包含的關(guān)鍵信息字段進(jìn)行轉(zhuǎn)換或增加key規(guī)則中的關(guān)鍵信息字段。例如通過部署在主機(jī)上的agent采集到的cpu、內(nèi)存等性能數(shù)據(jù),通過簡單指標(biāo)計(jì)算生成了相應(yīng)的性能指標(biāo),但如果要輸出告警,還需要將指標(biāo)里加入其歸屬的業(yè)務(wù)系統(tǒng)或責(zé)任人信息,這就需要與CMDB的配置數(shù)據(jù)庫進(jìn)行關(guān)聯(lián),為指標(biāo)數(shù)據(jù)做信息擴(kuò)展。另一個常見的場景是根據(jù)維表中定義的關(guān)系,將指標(biāo)值進(jìn)行轉(zhuǎn)換,例如“-1”轉(zhuǎn)換為“失敗”,“1”轉(zhuǎn)換為“成功”等加工,使輸出的信息具有更好的可讀性。加工指標(biāo)計(jì)算的配置邏輯和數(shù)據(jù)加工是類似的,在此不再贅述。為什么我們有了數(shù)據(jù)加工,還需要做加工指標(biāo)呢?這里有對計(jì)算資源消耗的考慮有關(guān)。相對來說,原始數(shù)據(jù)做加工要處理的數(shù)據(jù)量是巨大的。而指標(biāo)是基于原始數(shù)據(jù)按某規(guī)則的統(tǒng)計(jì)輸出,數(shù)據(jù)量只有原始數(shù)據(jù)的幾分之一甚至幾百分之一。所以在指標(biāo)數(shù)據(jù)的基礎(chǔ)上去做加工,計(jì)算量會小很多,需要分配的計(jì)算資源也可以小很多。在實(shí)際的數(shù)據(jù)加工分析場景中,也應(yīng)盡量遵循少數(shù)據(jù)加工而多指標(biāo)加工的方式來實(shí)現(xiàn)需求。2.2.3 告警規(guī)則
指標(biāo)告警計(jì)算是針對前述簡單指標(biāo)、復(fù)合指標(biāo)、加工指標(biāo)等模塊所生成的指標(biāo)的告警規(guī)則配置及后臺實(shí)現(xiàn)。在告警配置時,需要指定該規(guī)則所作用的對象指標(biāo),如果配置界面是由指標(biāo)配置界面進(jìn)入時,會自動填入對應(yīng)的指標(biāo)信息。告警信息以指標(biāo)key和value中包含的各關(guān)鍵字段信息作為變量來配置告警的內(nèi)容,具備靈活配置告警輸出信息的能力。告警規(guī)則配置是以指標(biāo)key和value中包含的各關(guān)鍵字段信息作為規(guī)則判斷對象,告警規(guī)則支持配置多個條件,各條件的滿足是與的關(guān)系,即必須所有條件都滿足,才會產(chǎn)生告警。1)等于value值
判斷指標(biāo)對象字段的值與判斷條件值是否相等,是常見的判斷場景。例如判斷某個接口調(diào)用的結(jié)果是否成功,通過條件判斷result_code是否等于1即可。2)包含value值(多個值以逗號分隔)
判斷指標(biāo)對象字段的值在判斷條件值的列表中是否存在。此類判斷規(guī)則多用于指標(biāo)的某個字段值存在多個的情形。例如某個告警需要針對3類業(yè)務(wù)編碼進(jìn)行設(shè)置,判斷busi_code為10,11,12三種,如果每種配置一條告警規(guī)則,對于后臺來說是會增加相應(yīng)的計(jì)算量的。如果使用該包含value值配置,則可通過一條規(guī)則來實(shí)現(xiàn)配置邏輯。在這個示例中,如果指標(biāo)字段busi_code的值是10,則滿足條件要求,如果是13則不滿足條件要求。包含value值規(guī)則是或的關(guān)系,即指標(biāo)字段的值滿足該配置的多個value值中的一個即滿足該條件。3)不包含value值(多個值以逗號分隔)
判斷指標(biāo)對象字段的值在判斷條件值的列表中是否不存在。該規(guī)則與上面的包含value值規(guī)則應(yīng)用場景類似,用于判斷指標(biāo)字段的值不在規(guī)則配置的value值列表范圍內(nèi)。不包含value值規(guī)則中的多個值是與的關(guān)系,即指標(biāo)字段的值與value值列表中的任一個都不相等。4)大于等于value值
判斷指標(biāo)對象字段的值是否大于等于判斷條件值,是常見的判斷場景。例如判斷某個主機(jī)的cpu使用率大于95%時需要告警,通過條件判斷該指標(biāo)的value值是否大于等于95%即可。5)小于等于value值
判斷指標(biāo)對象字段的值是否小于等于判斷條件值,是常見的判斷場景。例如判斷某個主機(jī)目錄的磁盤空閑容量小于等于30MB時需要告警,通過條件判斷該指標(biāo)的value值是否小于等于30MB即可。6)不等于value值
判斷指標(biāo)對象字段的值是否不等于判斷條件值,是常見的判斷場景。例如判斷某個應(yīng)用的接口調(diào)用結(jié)果存在1,-1,-2,-3等不同的值,只有為1時才代表接口正常,如果要在該接口調(diào)用結(jié)果不正常時告警,則可選擇該規(guī)則,判斷該指標(biāo)的value值是否不等于1即可。7)時間范圍內(nèi)
判斷指標(biāo)對象字段(必須是時間格式)的值是否在某幾個時間范圍內(nèi)。該規(guī)則常用于對業(yè)務(wù)上的高峰時段、工作時段、非工作時段之類的限制。例如在非工作時間和工作時間需要設(shè)置不同閾值的告警類型,則可通過該規(guī)則將時段進(jìn)行劃分,按時間段做不同的告警條件判斷。需要說明的是,時間范圍內(nèi)的判斷是可能存在多個時段的,例如非工作時間的判斷,可能是晚上20點(diǎn)到早上8點(diǎn),但實(shí)際配置時是需要配置為20:00:00-23:59:59,0:00:00-08:00:00這兩段的。另外也可根據(jù)提示以小時范圍或只到分鐘范圍的精度來進(jìn)行配置。當(dāng)存在多段時間時是或的關(guān)系,即指標(biāo)中的時間字段符合其中一個時間段條件即代表該規(guī)則項(xiàng)條件成立。8)時間范圍外
判斷指標(biāo)對象字段(必須是時間格式)的值是否不在某幾個時間范圍內(nèi)。該規(guī)則常用于對業(yè)務(wù)上的高峰時段、工作時段、非工作時段之類的限制。該判斷使用的場景與時間范圍內(nèi)類似,在此不做贅述。需要注意的是,當(dāng)規(guī)則中存在多個時間段時,各段時間是與的關(guān)系,即指標(biāo)的時間字段必須全都不滿足這些時間范圍,該規(guī)則項(xiàng)才條件成立。9)以…字符串開始
判斷指標(biāo)對象字段(必須是字符串)的值是否以某個字符串開始的。該判斷條件場景比較少見,是對日志類數(shù)據(jù)進(jìn)行指標(biāo)化后,對其中某段信息進(jìn)行判斷的一種邏輯,屬于偏項(xiàng)目化的場景。例如日志中的oracle數(shù)據(jù)庫報錯(或某個應(yīng)用的業(yè)務(wù)報錯),同一個大類的報錯類型往往是以相同的字符串開頭的,但后面的內(nèi)容不一樣,在日志分段分詞時會把該報錯類型作為一個字段,如果要對所有相同類型的報錯都進(jìn)行告警(或用于指標(biāo)計(jì)算統(tǒng)計(jì)中的過濾條件規(guī)則),則可使用這種規(guī)則邏輯。10)非以…字符串開始
判斷指標(biāo)對象字段(必須是字符串)的值是否不是以某個字符串開始的。使用場景與上述的“以…字符串開始”類似,不再贅述。11)以…字符串結(jié)束
判斷指標(biāo)對象字段(必須是字符串)的值是否是以某個字符串結(jié)束的。使用場景與上述的“以…字符串開始”類似,不再贅述。12)非以…字符串結(jié)束
判斷指標(biāo)對象字段(必須是字符串)的值是否不是以某個字符串結(jié)束的。使用場景與上述的“以…字符串開始”類似,不再贅述。2.3 計(jì)算任務(wù)管理
對于已納管的FLINK集群,支持在平臺上創(chuàng)建計(jì)算任務(wù)、選擇任務(wù)類型(主函數(shù)入口)、設(shè)定任務(wù)參數(shù)、輸入輸出流配置、數(shù)據(jù)存儲組件配置等。FLINK的任務(wù)配置中有允許延時時間的配置,即當(dāng)前任務(wù)在時間窗口統(tǒng)計(jì)時,允許延后多長時間來關(guān)閉窗口來等待延遲的數(shù)據(jù),這個配置一般在指標(biāo)計(jì)算中使用,減少因前端數(shù)據(jù)延遲對統(tǒng)計(jì)準(zhǔn)確性帶來的影響。但配置延遲時間又會造成指標(biāo)延時輸出,影響指標(biāo)應(yīng)用的實(shí)時性,因此延時是把雙刃劍,需要根據(jù)不同場景的需要以及資源的情況來酌情調(diào)整。FLINK的任務(wù)支持在前臺界面控制任務(wù)的啟停,以及對任務(wù)所加載的計(jì)算規(guī)則的加載或下線等操作,保障在不中斷任務(wù)運(yùn)行的前提下上線或下線規(guī)則,或變更計(jì)算規(guī)則。在任務(wù)執(zhí)行過程中,可以進(jìn)入組件規(guī)則詳情頁查看當(dāng)前任務(wù)所加載的規(guī)則列表,并可通過是否加載、規(guī)則刷新時間、指標(biāo)最后生成時間(針對指標(biāo)計(jì)算任務(wù))等信息來了解規(guī)則的運(yùn)行狀態(tài)。點(diǎn)擊規(guī)則列表操作欄中的“加載(下線)”按鈕可控制任務(wù)是否執(zhí)行該規(guī)則計(jì)算。對于指標(biāo)計(jì)算類的任務(wù)規(guī)則,點(diǎn)擊規(guī)則列表操作欄中的“詳情”按鈕,可查看當(dāng)前規(guī)則計(jì)算所生成的最近指標(biāo)數(shù)據(jù),并可通過規(guī)則的關(guān)鍵屬性信息進(jìn)行檢索。2.3.1 實(shí)時計(jì)算任務(wù)類型
目前DOMP支持的主要數(shù)據(jù)加工(分析)處理任務(wù)類型包括:1)日志數(shù)據(jù)分割分詞任務(wù)
日志數(shù)據(jù)分割分詞任務(wù)是針對現(xiàn)場自有的日志管理平臺所配置采集(文件、syslog等方式)的日志數(shù)據(jù)的分詞處理。一個任務(wù)中可以加載多個分詞模板的的處理,對于一個企業(yè)中所含的成百上千種類型的日志,可以按照重要程度或流量大小拆分到不同的分詞任務(wù)中執(zhí)行,使運(yùn)維管理更加有方便。下圖為一個分詞模板的示例:2)第三方數(shù)據(jù)分割分詞任務(wù)
第三方數(shù)據(jù)分割分詞任務(wù)的功能與日志數(shù)據(jù)分割分詞任務(wù)基本相同,是對其他平臺通過kafka-topic傳遞的第三方平臺吐出的數(shù)據(jù)做分割分詞處理。與自有平臺采集日志數(shù)據(jù)的處理邏輯不同的是,自采集的日志數(shù)據(jù)會帶有基于flume采集終端附加的日志屬性信息,而第三方平臺是沒有這些信息的。所以在任務(wù)處理環(huán)節(jié)前部會有一個預(yù)處理環(huán)節(jié),對數(shù)據(jù)做格式化轉(zhuǎn)換,使其適配后續(xù)的分詞加工流程。3)數(shù)據(jù)加工計(jì)算任務(wù)
數(shù)據(jù)加工計(jì)算功能針對需要對源數(shù)據(jù)做加工處理的場景,實(shí)現(xiàn)數(shù)據(jù)的實(shí)時加工,并輸出加工后的數(shù)據(jù)。數(shù)據(jù)加工支持的規(guī)則已在“計(jì)算規(guī)則管理”一節(jié)中介紹,這里不做贅述。與分詞任務(wù)相同,數(shù)據(jù)加工計(jì)算同樣支持多任務(wù)執(zhí)行,每個任務(wù)可以按分組管理的需要加載不同的加工規(guī)則。以下其它任務(wù)也具備相同的多任務(wù)管理和任務(wù)中多規(guī)則加載處理的能力,不再逐一說明。4)簡單指標(biāo)計(jì)算任務(wù)
數(shù)據(jù)加工計(jì)算功能針對需要對某一數(shù)據(jù)類型的源數(shù)據(jù)做分組統(tǒng)計(jì)的場景,實(shí)現(xiàn)數(shù)據(jù)的過濾及分組統(tǒng)計(jì)。簡單指標(biāo)計(jì)算支持的規(guī)則已在“計(jì)算規(guī)則管理”一節(jié)中介紹。5)復(fù)合指標(biāo)計(jì)算任務(wù)
數(shù)據(jù)加工計(jì)算功能適用于需要對一種源數(shù)據(jù)指標(biāo)或多種源數(shù)據(jù)指標(biāo),或基于指標(biāo)的告警數(shù)據(jù)做復(fù)合統(tǒng)計(jì)的場景,實(shí)現(xiàn)數(shù)據(jù)的過濾、統(tǒng)計(jì)、四則運(yùn)算等處理。復(fù)合指標(biāo)計(jì)算支持的規(guī)則已在“計(jì)算規(guī)則管理”一節(jié)中介紹。6)指標(biāo)加工計(jì)算任務(wù)
數(shù)據(jù)加工計(jì)算功能適用于需要源數(shù)據(jù)指標(biāo)進(jìn)行加工處理的場景,實(shí)現(xiàn)指標(biāo)中關(guān)鍵字段信息、值信息的轉(zhuǎn)換處理。指標(biāo)加工計(jì)算支持的規(guī)則已在“計(jì)算規(guī)則管理”一節(jié)中介紹。7)復(fù)合指標(biāo)關(guān)聯(lián)計(jì)算任務(wù)
復(fù)合指標(biāo)關(guān)聯(lián)計(jì)算功能是多指標(biāo)計(jì)算中的一類特定場景,基于兩類不同的指標(biāo)數(shù)據(jù)中的某一個屬性字段相同的特性,實(shí)現(xiàn)對兩條指標(biāo)數(shù)據(jù)的組合生成一條新指標(biāo)數(shù)據(jù)。復(fù)合指標(biāo)關(guān)聯(lián)計(jì)算支持的規(guī)則已在“計(jì)算規(guī)則管理”一節(jié)中介紹。8)告警計(jì)算任務(wù)
告警計(jì)算功能針對指標(biāo)數(shù)據(jù)的值做閾值判斷、動態(tài)基線判斷、同環(huán)比判斷等規(guī)則計(jì)算,并輸出判斷結(jié)果告警信息。告警計(jì)算支持的規(guī)則已在“計(jì)算規(guī)則配置”一節(jié)中介紹。2.3.2 實(shí)時計(jì)算任務(wù)運(yùn)維支撐
在任務(wù)執(zhí)行過程中,平臺提供了一些方便運(yùn)維的細(xì)節(jié)功能,在此說明其使用場景。1)上下游kafka主題
在任務(wù)管理界面中,各記錄中會展示該任務(wù)的上游kafka和下游kafka的topic名稱,通過該名稱可以清晰的看出數(shù)據(jù)的流向。當(dāng)運(yùn)維需要檢查任務(wù)是否正常運(yùn)行時,可以通過對下游kafka數(shù)據(jù)的檢查或監(jiān)控來實(shí)現(xiàn)。如果某個實(shí)時計(jì)算任務(wù)沒有按預(yù)期在下游的kafka獲取到相應(yīng)的輸出時,除了檢查任務(wù)是否正在運(yùn)行,也可以通過到上游的kafka-topic按關(guān)鍵字撈取源數(shù)據(jù)來確認(rèn)是否有符合條件的數(shù)據(jù)流入。2)規(guī)則更新
在任務(wù)管理界面中,每條記錄的操作欄中有“規(guī)則更新”按鈕,這個的作用是在任務(wù)不中斷的狀態(tài)下動態(tài)重新加載規(guī)則內(nèi)容。由于一個任務(wù)中往往加載了多個計(jì)算規(guī)則(例如多個指標(biāo)的計(jì)算、多個日志分詞等等)。如果任意一個規(guī)則需要修改都要啟停任務(wù)的話,會影響其他跑在同一個任務(wù)中的規(guī)則執(zhí)行。所以,通過這個規(guī)則更新按鈕,可以將規(guī)則重新加載到緩存中,使更新上線的規(guī)則或新增的規(guī)則生效,也可使下線規(guī)則失效,不再起作用。3)規(guī)則刷新時間
從任務(wù)管理界面,選擇一條記錄,點(diǎn)擊“組件規(guī)則”按鈕進(jìn)入規(guī)則列表頁時,可以看到每條規(guī)則都有個規(guī)則刷新時間。這個時間是指該規(guī)則重新被加載到緩存的時間。由于實(shí)時計(jì)算的后臺程序是定時到緩存中獲取規(guī)則的更新(5分鐘一次),所以根據(jù)該刷新時間可以推導(dǎo)出該規(guī)則是否已在后臺生效,并結(jié)合下游kafka-topic的數(shù)據(jù)輸出、指標(biāo)最后生成時間等信息來判斷該規(guī)則是否已正常執(zhí)行。4)指標(biāo)上下線
在指標(biāo)規(guī)則列表頁中,每條規(guī)則都有“是否加載”的字段,以及在操作列中有“上線”、“下線”的按鈕。這個功能用于實(shí)現(xiàn)將同一個任務(wù)中的部分規(guī)則暫時下線或重新上線的操作。運(yùn)維過程中,如果需要對某個指標(biāo)的配置規(guī)則進(jìn)行修改,則需要先將該規(guī)則下線,修改后再重新上線生效。另外,在任務(wù)執(zhí)行壓力大的時候,也可以將部分規(guī)則先暫時下線,以保障更重要的規(guī)則執(zhí)行的,降低時延。5)指標(biāo)最后生成時間
與規(guī)則刷新時間一樣,指標(biāo)最后生成時間也在規(guī)則列表頁中的每一條規(guī)則記錄中展示。與規(guī)則刷新時間不同的是,只有指標(biāo)計(jì)算類的任務(wù)(簡單指標(biāo)計(jì)算、復(fù)合指標(biāo)計(jì)算、加工指標(biāo)計(jì)算)才有該字段展示,用于標(biāo)識該規(guī)則的最后一條生成指標(biāo)數(shù)據(jù)的時間戳。結(jié)合這個字段中的時間,與本地時間的偏差,即可快速發(fā)現(xiàn)該指標(biāo)計(jì)算規(guī)則是否存在延時現(xiàn)象。特別是對于配置為1分鐘統(tǒng)計(jì)周期的指標(biāo),由于對實(shí)時性要求很高,所以一旦出現(xiàn)該字段與當(dāng)前時間偏差稍大,就要快速介入運(yùn)維。此處需要注意的是,不同的指標(biāo)有統(tǒng)計(jì)周期的區(qū)別,例如30分鐘統(tǒng)計(jì)周期的指標(biāo),在每個半小時的整點(diǎn)進(jìn)行統(tǒng)計(jì),如果時間偏差在30分鐘內(nèi)都是正常的。6)指標(biāo)數(shù)據(jù)詳情查詢
如果是指標(biāo)類的任務(wù)(簡單指標(biāo)計(jì)算、復(fù)合指標(biāo)計(jì)算、指標(biāo)加工計(jì)算),在規(guī)則列表頁中,點(diǎn)擊規(guī)則記錄后面的“詳情”按鈕,會在下方展示該規(guī)則最近生成的指標(biāo)數(shù)據(jù)。由于指標(biāo)規(guī)則模板在一個統(tǒng)計(jì)周期中可能生成的實(shí)際指標(biāo)數(shù)據(jù)量會非常龐大,所以展示所有數(shù)據(jù)是不現(xiàn)實(shí)的,也不應(yīng)該展示所有數(shù)據(jù),所以前臺限制了只會查詢展示200個指標(biāo)實(shí)例的數(shù)據(jù)??梢酝ㄟ^對指標(biāo)中不同關(guān)鍵字段的條件限制來對指標(biāo)實(shí)例進(jìn)行過濾,只展示運(yùn)維需要檢查的數(shù)據(jù)即可。通過查看指標(biāo)生成的數(shù)據(jù)詳情,可以對指標(biāo)規(guī)則中特定目標(biāo)數(shù)據(jù)的運(yùn)行結(jié)果進(jìn)行檢查和監(jiān)測。由于實(shí)時指標(biāo)數(shù)據(jù)往往用于實(shí)時大屏的展示,當(dāng)大屏中相應(yīng)的指標(biāo)數(shù)據(jù)未正常展示時,可以通過該功能檢查相應(yīng)的指標(biāo)數(shù)據(jù)是否正常生成。當(dāng)然,這個功能不是檢查指標(biāo)數(shù)據(jù)的唯一方法。如果指標(biāo)規(guī)則在定義時選擇了入庫的配置,則可以通過在相應(yīng)的指標(biāo)數(shù)據(jù)表中進(jìn)行查找并確認(rèn)(但該方法只能在事后檢查出是否生成了指標(biāo)數(shù)據(jù),無法在盡可能實(shí)時的時間里進(jìn)行檢測)。2.3.3 計(jì)算任務(wù)實(shí)施注意事項(xiàng)
在項(xiàng)目實(shí)施過程中,無論是日志分詞任務(wù),還是指標(biāo)計(jì)算任務(wù),最開始由于沒考慮任務(wù)的劃分問題,所有的規(guī)則都混在一起。這就導(dǎo)致出現(xiàn)高數(shù)據(jù)流量的規(guī)則拖累其他規(guī)則一起延時的狀況。后來通過將開發(fā)任務(wù)分組功能,按不同的管理需要劃分開,才較好的解決該問題。經(jīng)過前期多個項(xiàng)目實(shí)施,我們積累了一些使用DOMP模塊來滿足現(xiàn)場運(yùn)維數(shù)據(jù)應(yīng)用場景的經(jīng)驗(yàn),供其他項(xiàng)目團(tuán)隊(duì)或后續(xù)使用該模塊的同學(xué)參考。在做規(guī)則分組時,可以按同類歸并原則,重點(diǎn)保障原則、數(shù)據(jù)分流原則來處理劃分邏輯,盡量減少后期的調(diào)整。1)同類歸并原則
運(yùn)維場景所包含的數(shù)據(jù)加工需求是可能由不同的發(fā)起方(科室、項(xiàng)目、對口客戶)提出的。建議能將規(guī)則做一定原則的劃分,將同類(相同項(xiàng)目、相同客戶、相同科室等)規(guī)則合并到同一個任務(wù)或一組任務(wù)執(zhí)行。通過將場景規(guī)則分組后通過不同任務(wù)執(zhí)行,并且以任務(wù)為單位來分配計(jì)算資源,實(shí)現(xiàn)較好的管理。2)重點(diǎn)保障原則
運(yùn)維數(shù)據(jù)應(yīng)用場景中有部分指標(biāo)的需求對實(shí)時性要求非常高,例如用于實(shí)時大屏展示的需求,或用于實(shí)時監(jiān)控告警的需求。這類數(shù)據(jù)計(jì)算需求應(yīng)該盡量多帶帶任務(wù)通道執(zhí)行,或?qū)⒕哂型瑯佑?jì)算輸出場景的規(guī)則合并到一組任務(wù)來執(zhí)行,避免被其他計(jì)算規(guī)則的數(shù)據(jù)量影響造成延時。3)數(shù)據(jù)分流原則
劃分到同一組任務(wù)的源端數(shù)據(jù),可能存在數(shù)據(jù)量過大,在一個任務(wù)中仍會處理不及時的情況,這時候需要使用數(shù)據(jù)分流方式來處理。通過將源端數(shù)據(jù)在采集時就分配到不同的kafka-topic中,可以按不同源端數(shù)據(jù)源的流量規(guī)劃各個通道的數(shù)據(jù)流量大小,并以對應(yīng)的任務(wù)分配資源來處理數(shù)據(jù),以保證數(shù)據(jù)處理的及時性。DOMP自采集的日志數(shù)據(jù)可以通過采集客戶端、采集服務(wù)端的分組功能來實(shí)現(xiàn)數(shù)據(jù)分流場景,如果是對接外部系統(tǒng)的kafka-topic數(shù)據(jù),也可以使用DOMP的第三方數(shù)據(jù)采集功能,將同一個topic中的數(shù)據(jù)按不同的采集口徑做二次采集分流后,再對接到下游的指標(biāo)計(jì)算任務(wù)。本文作者:李秋霖(上海新炬中北團(tuán)隊(duì))
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/129096.html