八、數據倉庫數據質量監控


一、監控

1.日常監控

  • 數據落地監控
  • 數據掉0監控:實際擴展一下就是數據量閾值監控,少於某個量就告警
  • 重復數據監控:很多表一定要監控重復數據的,這點至關重要。
  • 關鍵指標監控
  • 數據同比環比監控

2. 數據對賬

這點主要會體現到實時數據上,特別是Kafka數據落地,必須要有一個監控機制來知道我們的數據落地情況。

當然離線數據同樣需要數據對賬,對賬方法有很多,比如可以和業務庫來對比。

3. 性能監控

我把這點理解為數據可用性監控,我認為這是一個很重要的點。 如果你做的數據別人用起來十分不爽,或者慢得要死根本沒法用,那做了和沒做有什么區別?

感覺在性能監控上就是有幾個點要注意:

  1. 查詢性能,比如es的某個索引,在不同時間段的查詢響應速度,同理presto、hive、kylin這些的查詢都需要注意一下,這點可以通過任務監控來觀察。

  2. 數據讀寫影響,機器故障影響,這點平常不太關注,不過像es這種,在寫入數據的時候其實會影響讀數據的,需要監控一下,並做相應調整。

二、告警

告警就不用說了,微信、短信和電話都很有必要。

定期的郵件匯總告警也很有必要。

然后有很多的告警可以考慮一個告警報表系統來展示,特別像是數據量趨勢這種監控內容,可視化的對比比較有效。

三、 多數據源

在目前的大數據場景下,各種開源組件引入的十分多,而且會有新的組件不停地引入,因此要考慮到對不同組件的數據監控。

目前筆者接觸比較多的會有Hive(presto、spark sql)、Mysql、ES、Redis、Kylin(主要是構建的cube)這些常用的,但是不能排除圖數據庫(neo4j、orientdb)和druid這些組件引入的可能性。

 

怎樣監控

數據監控相對來講是屬於后台系統,不能算是對外的業務系統,一般重要性可能會被挑戰,雖說如此,它還是值得一做的。 不過可能要換一些思路來做,如何快速地實現、並抓住核心的功能點是值得深思的一件事。

  1. 規則引擎:來定義各種告警規則,可能是一條sql模板,也可能是一些具體的算法。

  2. 執行引擎:要來執行各種規則,同時要考慮各種數據源的差異。

  3. 元數據系統:數據質量監控本來也算是元數據系統的一部分,我們這分開來講,但是無論如何,在配置表的告警信息時,還是要和元數據系統結合的。

 

下面會分開來分析一下這幾個組件。

一、 規則引擎

舉幾個典型例子:數據延遲到達、數據同比環比、數據趨勢、一些定制化算法。

這塊的設計可以很靈活,也可以臨時開發一個簡單的。這里提幾個點。

1.Sql模板

在大多數存儲引擎中,通過Sql使用的數據(比如Hive、Mysql)會是比較重要的一種數據,這種數據我們可以考慮用Sql模板。

我們會有一張表或者一些配置文件來定義我們的規則。簡單來講,比如說數據同比環比,我們可以寫一個presto的sql模板,來和歷史數據進行對比,這種sql很簡單,自己寫好模板就行。

這種模板最簡單,也最快,我相信能解決大部分問題。

2. 元數據

很多數據庫都是有元數據管理的,比如Hive,它的表的行數都是在元數據庫中有存放的,我們可以直接通過Hive的元數據來抓取表的每天的數據量的。

注意:這點十分重要,它能節省我們大部分的工作,而且比較穩定,但是能滿足的功能比較少。需要結合其它來使用。

3. 自定義模板

有很多算法不是簡單的sql就能搞定的,而且很多存儲系統也不是所有都支持sql。比如es這種。因此就需要一些定制化的算法來實現。

這方面的主要工作量應該是在執行引擎上,但是在規則引擎應該有設計到。

二、執行引擎

這塊應該是比較重要的。 實現起來可以很簡單,也可以很復雜。下面大概聊一下。

1. Sql執行

很多規則都可以通過sql來執行的,這點在規則引擎里面提到了。

其實我很推薦,剛開始的比較粗糙的監控都可以這樣來做。 我們提前配置好大部分的sql模板,然后需要監控哪張表了就在這張表配置一下就行。

具體的執行引擎的話可以考慮presto或者spark sql,特別大的任務可以考慮hive。

優點:

  1. 簡單,方便實現

  2. 能滿足大部分的需求

缺點:

  1. 靈活度不夠,比如es,對sql支持太差

  2. 速度慢:很多sql執行起來會比較慢,特別是使用hive引擎的時候,會巨慢。

  3. 不穩定:一些監控會不太穩定,比如重復數據監控,對一些大的表來講,用presto這種,是很難出結果的,經常會掛掉,但是換成hive的話又會很慢。

那么如何解決?

嗯,解決的話,我只有下面幾個思路:

  1. 合理的任務調度,一般集群都是能容納很多任務的,合適地調度監控任務比較重要。

  2. 合理地替換執行引擎,這個下一節會提供一種方案。

  3. 合理的任務依賴,比如說是重復數據監控,這點必然會依賴於數據是否到達,如果數據沒達到就沒必要執行重復數據監控的程序。

2. 直接獲取數據量

前面提到了Sql執行的一個執行效率問題,我們這節提供一個優化的方法。因為Hive目前來講是十分重要的一種引擎了,所以單說Hive。

Hive是有元數據管理的,它的元數據庫中是記錄Hive的所有表的記錄數的,這些記錄數可以直接用作數據量相關的監控,比如數據掉零、數據量環比同比、數據量趨勢等。

3. 算法執行引擎

很多算法可以通過自定義地方式實現,這一點實現起來就會比較復雜一些。

因為定制化比較強,在設計這一塊的話需要一個比較靈活的架構,這里不再展開來講,因為在常見的數據領域里面,前兩點已經能滿足很多需求了。

4. 多數據源

多數據源這一塊,在規則引擎里面需要加一些區分,因為這畢竟和元數據系統關聯,區分還是比較簡單。

在執行的時候,可能要稍微分開來實現。不過相對來講不是很復雜。

數據校驗

數據校驗之前是沒在意的,現在把這一塊補進來。比較偏個人理解,暫時還沒形成完整的知識體系。主要就是說如何判斷自己的數據是正常的、可以被信任的,這一塊在數據質量中應該是十分重要的。

方法的話可以有交叉驗證、異常波動監控等。

 

 

轉載


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM