智慧運維基礎-運維知識庫之ETL
作者簡介
H++ 百度雲高階研發工程師
負責百度雲Noah智慧運維產品後設資料建設、時序資料儲存相關研發工作,在分散式系統架構、高效能資料服務、資料清洗等方向有著較為廣泛的實踐經驗。
乾貨概覽
在百度智慧化運維的持續演進過程中,我們在逐步建設以智慧運維機器人為核心的運維能力,將其應用於故障自愈、根因定位、智慧變更等運維場景中。而建設以智慧運維機器人為核心的運維能力,最基礎的工作是要先建立運維的世界觀(環境模型),以機器人的視角來理解運維世界、感知系統狀態、獲取環境變化等。
在傳統運維模式中,運維資料分散在不同的系統中,這些運維資料存在幾個問題:訪問方式不一致;資料術語、概念、模型不一致;系統間沒有資料關聯。
這些問題使得我們日常的運維工作,經常需要理解、處理各種不同的資料,導致運維成本高,效率難以提升。因此希望建立運維知識庫統一運維工作中的語言,對運維工作中的物件進行統一建模,收集並轉錄日常運維工作的資源與操作,為日常運維工作提供一種『書同文,車同軌,行同倫』的基礎。(PS:借鑑自秦始皇)
本文主要介紹百度雲Noah智慧運維產品,在構建運維知識庫過程中的思考。
運維知識庫中的資料
運維知識庫中包含了後設資料(Meta)、狀態資料(Status)、事件資料(Event):
-
運維後設資料(Meta)對運維實體世界進行建模,包括運維實體的屬性、組成以及關聯關係等;
-
狀態資料(Status)反應系統的狀態,表徵服務的存活性、資源消耗或能力等;
-
事件資料(Event)描述對系統做的變更、服務狀態的異常等事件。
ETL系統架構
運維後設資料、狀態資料、事件資料分佈在幾十個不同的系統中,隨著業務的增長和相關係統的不斷增加暴露出了以下幾個問題:
-
資料分散,訪問方式不一致:同一型別的資料分散在多個不同的系統,各系統提供不同的訪問入口;
-
資料術語、概念、模型不一致:各系統使用的術語、概念、模型各不相同,例如“應用”這個概念,每個系統或工具對於Application的理解都不盡相同;
-
系統間資料沒有建立關聯:例如部署、監控和路由服務等核心場景在運維資料上沒有打通,表現為部署平臺、路由服務、監控系統所使用的服務管理機制各不相同,三個系統間的資料難以關聯,且無聯動性。
因此,依託『書同文』的理念建立運維知識庫,提供一個統一的運維資料管理系統,來管理運維工作中的公共基礎資料,打通系統間的資料關聯,使這些資料能夠遵循統一的模型被共享和使用。
為了使這些資料能夠遵循統一模型,我們制定了各類資料的模型(Schema),採用ETL機制從各系統獲取(Extract)資料、轉換(Transform)成統一的模型、並儲存(Load)在知識庫中,其架構如圖所示。
這些運維資料在建設時根據業務對資料時效性要求的不同,分為以下三種:
-
離線資料建設,例如用於運維變更效率指標統計等相關的資料;
-
近線資料建設,例如故障診斷過程中依賴的資料;
-
實時資料建設,例如智慧故障自愈、智慧流量排程相關的路由資料等。
對於上述不同的資料我們採用不同的ETL方式,分別是:
-
拉 (Pull ETL),週期性從資料來源拉取資料,適用於離線資料的建設;
-
推 (Push ETL),資料來源主動推送變更的資料,適用於時效性較高的近線資料建設;
-
Federation (Lazy ETL),在查詢時從資料來源獲取資料、按照Schema轉換後並返回,適用於實時資料建設。
1Pull ETL
Pull ETL提供了兩種資料接入方式:自適應ETL、基於SDK的自定義ETL。
自適應ETL,是我們針對適用範圍較廣的資料來源(如百度名字服務BNS、Noah監控平臺、Noah部署平臺等)開發的,使用者僅需配置好ETL規則,自適應排程器會自動解析規則,並將資料按規則接入運維知識庫。
基於SDK的自定義ETL,是我們為其他資料來源提供的ETL方式,使用者基於我們提供的SDK可以開發各種資料來源的ETL指令碼,配置好排程策略,通用排程器根據排程策略執行ETL指令碼,即可將資料接入運維知識庫。
2Push ETL
Push ETL採用訊息佇列(MQ),來支援時效性高的資料建設。資料來源發生變更時,需要將變更訊息推送至MQ,運維知識庫訂閱、消費這些訊息,並轉換、儲存資料。
如下圖所示,使用者基於SDK開發Push ETL指令碼,排程器執行指令碼並保證其一直處於執行狀態。資料來源推送變更訊息至MQ,Push ETL指令碼訂閱MQ中的變更訊息,將變更的資料轉換成統一的模型並儲存在知識庫中。
3Lazy ETL
Lazy ETL是為實時資料查詢而提供的ETL模式。在運維領域我們需要看到系統的某些後設資料/狀態的實時變化,比如實時路由資料、監控系統的時序資料等。Pull ETL由於是週期性的執行,因此在時效性上無法滿足需求;Push ETL需要資料來源進行改造,有一定的成本,且變更訊息傳輸存在一定的延遲,無法實時查詢到最新資料。
因此,如下圖所示,我們採用另一種經典方法Federation(Lazy ETL)來實現資料整合:即運維知識庫處理使用者查詢時,直接呼叫介面去訪問原始資料來源,按schema轉換後,返回給使用者。
總結
本文主要介紹了百度雲Noah智慧運維產品中的運維知識庫之ETL。針對不同業務場景使用的資料,提供不同的ETL方式。針對離線資料建設,採用Pull ETL週期性從資料來源獲取資料,此外綜合考慮資料接入收益和成本,提供了自適應ETL以及基於SDK的自定義ETL;針對時效性高的資料建設,採用Push ETL,資料來源主動推送變更到運維知識庫中;針對實時資料建設,採用Lazy ETL,在查詢時回源獲取資料並進行轉換。有對運維知識庫和ETL感興趣的同學,歡迎留言探討。
↓↓↓ 點選"閱讀原文" 【瞭解更多精彩內容】
相關文章
- 50%運維都迷糊的Socket基礎知識!運維
- 全面的MySQL基礎運維知識點(一)MySql運維
- 全面的MySQL基礎運維知識點(三)MySql運維
- 全面的MySQL基礎運維知識點(二)MySql運維
- Redis日常運維-基礎認識Redis運維
- Linux下Apache(HTTP)基礎知識梳理-運維筆記LinuxApacheHTTP運維筆記
- MySQL基礎運維——percona-toolkit運維工具MySql運維
- Linux運維就業前景如何?linux基礎知識學習Linux運維就業
- linux運維基礎2Linux運維
- 0基礎入門Linux 運維,應該先掌握哪些知識?Linux運維
- IT運維之自動化運維運維
- Glance基礎服務運維運維
- linux運維需要掌握什麼知識?linux運維學習路線Linux運維
- linux運維學習路線,linux運維需要掌握什麼知識?Linux運維
- 如何高效學習linux運維知識?linux運維有發展嗎Linux運維
- Elasticsearch叢集運維相關知識Elasticsearch運維
- cd命令有哪些相關知識?學linux運維命令基礎入門Linux運維
- 運維之shell指令碼初識運維指令碼
- mongodb基礎運維能力定義MongoDB運維
- Jumpserver基礎運維-01介紹Server運維
- 零基礎怎麼學Linux運維?學習Linux運維有Linux運維
- Linux運維都需要做什麼?0基礎Linux運維學習Linux運維
- 學習Linux運維技術的都有哪些人?運維基礎Linux運維
- 《前端運維》一、Linux基礎--基礎命令(1)前端運維Linux
- 自動化運維工具之Puppet基礎入門運維
- 《前端運維》一、Linux基礎--05Shell運算子前端運維Linux
- 高效運維_AIRIOT智慧電力運維解決方案運維AI
- 如何落地資料庫智慧化運維?資料庫運維
- Python基礎知識思維導圖Python
- passwd修改使用者密碼注意什麼?linux運維基礎命令知識密碼Linux運維
- Devops 開發運維基礎篇之Jenkins部署與使用dev運維Jenkins
- HTTP請求報文有哪些組成部分?linux運維運維知識怎麼樣HTTPLinux運維
- 老凡的運維筆記 | 智慧化運維知多少?運維筆記
- 運維知識是怎麼構建起來的運維
- 運維需要掌握的12個路由知識點運維路由
- [Linux]Ansible自動化運維① - 入門知識Linux運維
- 【IT運維小知識】安全組是什麼意思?運維
- 【知識分享】什麼是IT運維管理服務運維