智能運維基礎:運維知識庫之 ETL

智能运维基础:运维知识库之 ETL

H++
百度雲高級研發工程師負責百度雲Noah智能運維產品元數據建設、時序數據存儲相關研發工作,在分佈式系統架構、高性能數據服務、數據清洗等方向有著較為廣泛的實踐經驗。

乾貨概覽

在百度智能化運維的持續演進過程中,我們在逐步建設以智能運維機器人為核心的運維能力,將其應用於故障自愈、根因定位、智能變更等運維場景中。而建設以智能運維機器人為核心的運維能力,最基礎的工作是要先建立運維的世界觀(環境模型),以機器人的視角來理解運維世界、感知系統狀態、獲取環境變化等。

在傳統運維模式中,運維數據分散在不同的系統中,這些運維數據存在幾個問題:訪問方式不一致;數據術語、概念、模型不一致;系統間沒有數據關聯。

這些問題使得我們日常的運維工作,經常需要理解、處理各種不同的數據,導致運維成本高,效率難以提升。因此希望建立運維知識庫統一運維工作中的語言,對運維工作中的對象進行統一建模,收集並轉錄日常運維工作的資源與操作,為日常運維工作提供一種『書同文,車同軌,行同倫』的基礎。(PS:借鑑自秦始皇)

本文主要介紹百度雲Noah智能運維產品,在構建運維知識庫過程中的思考。

運維知識庫中的數據

運維知識庫中包含了元數據(Meta)、狀態數據(Status)、事件數據(Event):
  • 運維元數據(Meta)對運維實體世界進行建模,包括運維實體的屬性、組成以及關聯關係等;
  • 狀態數據(Status)反應系統的狀態,表徵服務的存活性、資源消耗或能力等;
  • 事件數據(Event)描述對系統做的變更、服務狀態的異常等事件。
智能运维基础:运维知识库之 ETL

ETL系統架構

運維元數據、狀態數據、事件數據分佈在幾十個不同的系統中,隨著業務的增長和相關係統的不斷增加暴露出了以下幾個問題:

  • 數據分散,訪問方式不一致:同一類型的數據分散在多個不同的系統,各系統提供不同的訪問入口;

  • 數據術語、概念、模型不一致:各系統使用的術語、概念、模型各不相同,例如“應用”這個概念,每個系統或工具對於Application的理解都不盡相同;

  • 系統間數據沒有建立關聯:例如部署、監控和路由服務等核心場景在運維數據上沒有打通,表現為部署平臺、路由服務、監控系統所使用的服務管理機制各不相同,三個系統間的數據難以關聯,且無聯動性。

因此,依託『書同文』的理念建立運維知識庫,提供一個統一的運維數據管理系統,來管理運維工作中的公共基礎數據,打通系統間的數據關聯,使這些數據能夠遵循統一的模型被共享和使用。

為了使這些數據能夠遵循統一模型,我們制定了各類數據的模型(Schema),採用ETL機制從各系統獲取(Extract)數據、轉換(Transform)成統一的模型、並存儲(Load)在知識庫中,其架構如圖所示。

智能运维基础:运维知识库之 ETL

這些運維數據在建設時根據業務對數據時效性要求的不同,分為以下三種:

離線數據建設,例如用於運維變更效率指標統計等相關的數據;

  • 近線數據建設,例如故障診斷過程中依賴的數據;

  • 實時數據建設,例如智能故障自愈、智能流量調度相關的路由數據等。

對於上述不同的數據我們採用不同的ETL方式,分別是:

  • 拉 (Pull ETL),週期性從數據源拉取數據,適用於離線數據的建設;

  • 推 (Push ETL),數據源主動推送變更的數據,適用於時效性較高的近線數據建設;

  • Federation (Lazy ETL),在查詢時從數據源獲取數據、按照Schema轉換後並返回,適用於實時數據建設。

Pull ETL

Pull ETL提供了兩種數據接入方式:自適應ETL、基於SDK的自定義ETL。

自適應ETL,是我們針對適用範圍較廣的數據源(如百度名字服務BNS、Noah監控平臺、Noah部署平臺等)開發的,用戶僅需配置好ETL規則,自適應調度器會自動解析規則,並將數據按規則接入運維知識庫。

基於SDK的自定義ETL,是我們為其他數據源提供的ETL方式,用戶基於我們提供的SDK可以開發各種數據源的ETL腳本,配置好調度策略,通用調度器根據調度策略執行ETL腳本,即可將數據接入運維知識庫。

智能运维基础:运维知识库之 ETL

Push ETL

Push ETL採用消息隊列(MQ),來支持時效性高的數據建設。數據源發生變更時,需要將變更消息推送至MQ,運維知識庫訂閱、消費這些消息,並轉換、存儲數據。

如下圖所示,用戶基於SDK開發Push ETL腳本,調度器執行腳本並保證其一直處於執行狀態。數據源推送變更消息至MQ,Push ETL腳本訂閱MQ中的變更消息,將變更的數據轉換成統一的模型並存儲在知識庫中。

智能运维基础:运维知识库之 ETL

Lazy ETL

Lazy ETL是為實時數據查詢而提供的ETL模式。在運維領域我們需要看到系統的某些元數據/狀態的實時變化,比如實時路由數據、監控系統的時序數據等。Pull ETL由於是週期性的執行,因此在時效性上無法滿足需求;Push ETL需要數據源進行改造,有一定的成本,且變更消息傳輸存在一定的延遲,無法實時查詢到最新數據。

因此,如下圖所示,我們採用另一種經典方法Federation(Lazy ETL)來實現數據集成:即運維知識庫處理用戶查詢時,直接調用接口去訪問原始數據源,按schema轉換後,返回給用戶。

智能运维基础:运维知识库之 ETL

總結

本文主要介紹了百度雲Noah智能運維產品中的運維知識庫之ETL。針對不同業務場景使用的數據,提供不同的ETL方式。針對離線數據建設,採用Pull ETL週期性從數據源獲取數據,此外綜合考慮數據接入收益和成本,提供了自適應ETL以及基於SDK的自定義ETL;針對時效性高的數據建設,採用Push ETL,數據源主動推送變更到運維知識庫中;針對實時數據建設,採用Lazy ETL,在查詢時回源獲取數據並進行轉換。有對運維知識庫和ETL感興趣的同學,歡迎留言探討。

近期精彩文章推薦:

智能运维基础:运维知识库之 ETL

2018 年即將遠去

2019 年即將到來~

新的一年

運維行業怎麼能不搞事情呢?

GOPS 2019 · 深圳站

早鳥票限時搶購

智能运维基础:运维知识库之 ETL

點擊閱讀原文,立即搶購 GOPS 2019 · 深圳站早鳥票


分享到:


相關文章: