0x00 前言
本篇分享一些和數(shù)據(jù)質(zhì)量監(jiān)控相關(guān)的內(nèi)容。數(shù)據(jù)質(zhì)量監(jiān)控是一個(gè)在快速發(fā)展的業(yè)務(wù)中最容易被犧牲和忽略的功能,但是它確實(shí)至關(guān)重要的。 假設(shè)你做了100個(gè)業(yè)務(wù),一旦有其中一個(gè)業(yè)務(wù)在某個(gè)時(shí)間段出現(xiàn)了數(shù)據(jù)異常,這個(gè)異常還是由業(yè)務(wù)方發(fā)現(xiàn)的而不是你,根據(jù)我的經(jīng)驗(yàn)是,它帶來(lái)的負(fù)面影響會(huì)超過(guò)你之前做的100個(gè)業(yè)務(wù)帶來(lái)的正面影響。 文章結(jié)構(gòu)數(shù)據(jù)質(zhì)量監(jiān)控的意義和價(jià)值就不再談了,本文主要討論下面兩個(gè)主題:
文中會(huì)涉及到數(shù)據(jù)倉(cāng)庫(kù)其它的一些知識(shí)點(diǎn),請(qǐng)參考:http:/// 0x01 什么值得你監(jiān)控我把數(shù)據(jù)質(zhì)量分成三部分來(lái)理解:
重點(diǎn)在監(jiān)控,這點(diǎn)會(huì)展開(kāi)來(lái)講,多數(shù)據(jù)源這一塊是因?yàn)樵诖髷?shù)據(jù)場(chǎng)景下,我們有太多的開(kāi)源組件來(lái)選擇,很多組件的數(shù)據(jù)都需要監(jiān)控,而且每個(gè)都不一樣,如果統(tǒng)一地來(lái)監(jiān)控是個(gè)重要的話(huà)題。 如下圖,我先列一個(gè)大致的思維導(dǎo)圖,然后詳細(xì)講每一部分。 一、 監(jiān)控監(jiān)控這一塊比較大。整體來(lái)講,我會(huì)把它分為這幾塊:日常監(jiān)控、數(shù)據(jù)對(duì)賬、性能監(jiān)控。下面分開(kāi)來(lái)講。 1. 日常監(jiān)控日常監(jiān)控中最重要的一個(gè)就是數(shù)據(jù)落地檢查,這應(yīng)該是所有監(jiān)控的一個(gè)基礎(chǔ),不然沒(méi)數(shù)據(jù)你玩?zhèn)€毛啊。 下面是我認(rèn)為一些比較常用的監(jiān)控內(nèi)容:
這是一些常用的監(jiān)控,在后面會(huì)提到,我們可以做一個(gè)規(guī)則引擎,上面提到的都坐到規(guī)則里面,哪個(gè)表需要了就陪一下就行了。 2. 數(shù)據(jù)對(duì)賬這點(diǎn)主要會(huì)體現(xiàn)到實(shí)時(shí)數(shù)據(jù)上,特別是Kafka數(shù)據(jù)落地,必須要有一個(gè)監(jiān)控機(jī)制來(lái)知道我們的數(shù)據(jù)落地情況。 當(dāng)然離線(xiàn)數(shù)據(jù)同樣需要數(shù)據(jù)對(duì)賬,對(duì)賬方法有很多,比如可以和業(yè)務(wù)庫(kù)來(lái)對(duì)比。 3. 性能監(jiān)控我把這點(diǎn)理解為數(shù)據(jù)可用性監(jiān)控,我認(rèn)為這是一個(gè)很重要的點(diǎn)。 如果你做的數(shù)據(jù)別人用起來(lái)十分不爽,或者慢得要死根本沒(méi)法用,那做了和沒(méi)做有什么區(qū)別? 感覺(jué)在性能監(jiān)控上就是有幾個(gè)點(diǎn)要注意:
二、告警告警就不用說(shuō)了,微信、短信和電話(huà)都很有必要。 定期的郵件匯總告警也很有必要。 然后有很多的告警可以考慮一個(gè)告警報(bào)表系統(tǒng)來(lái)展示,特別像是數(shù)據(jù)量趨勢(shì)這種監(jiān)控內(nèi)容,可視化的對(duì)比比較有效。 三、 多數(shù)據(jù)源在目前的大數(shù)據(jù)場(chǎng)景下,各種開(kāi)源組件引入的十分多,而且會(huì)有新的組件不停地引入,因此要考慮到對(duì)不同組件的數(shù)據(jù)監(jiān)控。 目前筆者接觸比較多的會(huì)有Hive(presto、spark sql)、Mysql、ES、Redis、Kylin(主要是構(gòu)建的cube)這些常用的,但是不能排除圖數(shù)據(jù)庫(kù)(neo4j、orientdb)和druid這些組件引入的可能性。 0x02 怎樣監(jiān)控數(shù)據(jù)監(jiān)控相對(duì)來(lái)講是屬于后臺(tái)系統(tǒng),不能算是對(duì)外的業(yè)務(wù)系統(tǒng),一般重要性可能會(huì)被挑戰(zhàn),雖說(shuō)如此,它還是值得一做的。 不過(guò)可能要換一些思路來(lái)做,如何快速地實(shí)現(xiàn)、并抓住核心的功能點(diǎn)是值得深思的一件事。
如圖是一個(gè)整體的構(gòu)思,我先分析幾個(gè)個(gè)人認(rèn)識(shí)比較重要的點(diǎn)。后面會(huì)詳細(xì)地來(lái)分析。
下面會(huì)分開(kāi)來(lái)分析一下這幾個(gè)組件。 一、 規(guī)則引擎舉幾個(gè)典型例子:數(shù)據(jù)延遲到達(dá)、數(shù)據(jù)同比環(huán)比、數(shù)據(jù)趨勢(shì)、一些定制化算法。 這塊的設(shè)計(jì)可以很靈活,也可以臨時(shí)開(kāi)發(fā)一個(gè)簡(jiǎn)單的。這里提幾個(gè)點(diǎn)。 1. Sql模板在大多數(shù)存儲(chǔ)引擎中,通過(guò)Sql使用的數(shù)據(jù)(比如Hive、Mysql)會(huì)是比較重要的一種數(shù)據(jù),這種數(shù)據(jù)我們可以考慮用Sql模板。 我們會(huì)有一張表或者一些配置文件來(lái)定義我們的規(guī)則。簡(jiǎn)單來(lái)講,比如說(shuō)數(shù)據(jù)同比環(huán)比,我們可以寫(xiě)一個(gè)presto的sql模板,來(lái)和歷史數(shù)據(jù)進(jìn)行對(duì)比,這種sql很簡(jiǎn)單,自己寫(xiě)好模板就行。 這種模板最簡(jiǎn)單,也最快,我相信能解決大部分問(wèn)題。 2. 元數(shù)據(jù)很多數(shù)據(jù)庫(kù)都是有元數(shù)據(jù)管理的,比如Hive,它的表的行數(shù)都是在元數(shù)據(jù)庫(kù)中有存放的,我們可以直接通過(guò)Hive的元數(shù)據(jù)來(lái)抓取表的每天的數(shù)據(jù)量的。 **注意:**這點(diǎn)十分重要,它能節(jié)省我們大部分的工作,而且比較穩(wěn)定,但是能滿(mǎn)足的功能比較少。需要結(jié)合其它來(lái)使用。 3. 自定義模板有很多算法不是簡(jiǎn)單的sql就能搞定的,而且很多存儲(chǔ)系統(tǒng)也不是所有都支持sql。比如es這種。因此就需要一些定制化的算法來(lái)實(shí)現(xiàn)。 這方面的主要工作量應(yīng)該是在執(zhí)行引擎上,但是在規(guī)則引擎應(yīng)該有設(shè)計(jì)到。 二、執(zhí)行引擎這塊應(yīng)該是比較重要的。 實(shí)現(xiàn)起來(lái)可以很簡(jiǎn)單,也可以很復(fù)雜。下面大概聊一下。 1. Sql執(zhí)行很多規(guī)則都可以通過(guò)sql來(lái)執(zhí)行的,這點(diǎn)在規(guī)則引擎里面提到了。 其實(shí)我很推薦,剛開(kāi)始的比較粗糙的監(jiān)控都可以這樣來(lái)做。 我們提前配置好大部分的sql模板,然后需要監(jiān)控哪張表了就在這張表配置一下就行。 具體的執(zhí)行引擎的話(huà)可以考慮presto或者spark sql,特別大的任務(wù)可以考慮hive。 優(yōu)點(diǎn):
缺點(diǎn):
那么如何解決? 嗯,解決的話(huà),我只有下面幾個(gè)思路:
2. 直接獲取數(shù)據(jù)量前面提到了Sql執(zhí)行的一個(gè)執(zhí)行效率問(wèn)題,我們這節(jié)提供一個(gè)優(yōu)化的方法。因?yàn)镠ive目前來(lái)講是十分重要的一種引擎了,所以單說(shuō)Hive。 Hive是有元數(shù)據(jù)管理的,它的元數(shù)據(jù)庫(kù)中是記錄Hive的所有表的記錄數(shù)的,這些記錄數(shù)可以直接用作數(shù)據(jù)量相關(guān)的監(jiān)控,比如數(shù)據(jù)掉零、數(shù)據(jù)量環(huán)比同比、數(shù)據(jù)量趨勢(shì)等。 3. 算法執(zhí)行引擎很多算法可以通過(guò)自定義地方式實(shí)現(xiàn),這一點(diǎn)實(shí)現(xiàn)起來(lái)就會(huì)比較復(fù)雜一些。 因?yàn)槎ㄖ苹容^強(qiáng),在設(shè)計(jì)這一塊的話(huà)需要一個(gè)比較靈活的架構(gòu),這里不再展開(kāi)來(lái)講,因?yàn)樵诔R?jiàn)的數(shù)據(jù)領(lǐng)域里面,前兩點(diǎn)已經(jīng)能滿(mǎn)足很多需求了。 4. 多數(shù)據(jù)源多數(shù)據(jù)源這一塊,在規(guī)則引擎里面需要加一些區(qū)分,因?yàn)檫@畢竟和元數(shù)據(jù)系統(tǒng)關(guān)聯(lián),區(qū)分還是比較簡(jiǎn)單。 在執(zhí)行的時(shí)候,可能要稍微分開(kāi)來(lái)實(shí)現(xiàn)。不過(guò)相對(duì)來(lái)講不是很復(fù)雜。 0xFF 總結(jié)本篇主要分享了一些和數(shù)據(jù)質(zhì)量監(jiān)控相關(guān)的內(nèi)容,有一些泛泛而談的感覺(jué),但是理清思路后很多實(shí)現(xiàn)起來(lái)也是很簡(jiǎn)單的, 想做個(gè)簡(jiǎn)單能用的出來(lái),用python半天就能搞定。 這里主要是思路,具體的實(shí)現(xiàn)就不再寫(xiě)了。畢竟根據(jù)業(yè)務(wù)需求,實(shí)現(xiàn)的程度也會(huì)不一樣。 |
|
|
來(lái)自: rating123 > 《待分類(lèi)》