由於舊有的監控系統已經不敷使用,現存的解決方案又沒有適用的,因此Uber只好自己打造整合Prometheus的大規模指標平臺M3,而現在開源給大家使用。M3能每秒聚合5億個指標,並且以每秒2,000萬筆的速度持續永久保存這些結果。

M3是Uber從2015年才開始發展的專案,而在這之前,Uber所使用的是基於監控工具Graphite的系統,所有服務、基礎設施和伺服器都會將指標發送至這個系統中,而Graphite系統會將這些資料以Whisper檔案格式,儲存到分片Carbon叢集。在其他功能上,儀表板功能使用Grafana,而警示功能採用Nagios,並透過來源控制腳本發出Graphitee閾值檢查。

這個系統已經使用了一段時間,但是在擴充上卻遇到了瓶頸,Uber提到,擴充Carbon叢集需要經過手動再分片的程序,而且由於缺乏複本,因此任何一個單一的節點硬碟損壞,都會造成相關指標資料永久性的遺失。最終,這個系統已經無法滿足Uber的需求。

採用新的監控系統勢在必行,但是Uber評估完現有的開源替代方案後,無論是在資源的效率和規模目標上,或是作為自助服務平臺運作,沒有任何現存專案能夠符合需求,所以Uber只好自己量身訂做一個適合自家應用的系統。

最一開始的M3,皆採用開源專案元件組合而成,像是用於聚合指標的Statsite,或是用於時間序列儲存具備Date Tiered Compaction Strategy的Cassandra,以及用於索引的ElasticSearch。但隨著系統發展,基於營運負擔和成本效率,加上不斷增加的功能集,現在M3裡這些部分的功能都超越原本使用的專案。

Uber從2015年釋出M3至今,目前擁有超過66億個時間序列,每秒聚合5億個量測指標,並以每秒2,000萬筆資料的速度將結果儲存到全球各地,接著在區域使用分散式Quorum機制,將資料分成三份永久儲存。M3給予工程師極大的靈活度,可以設定量測指標的儲存政策,以不同長度的時間保存不同粒度的資料,這項設計能讓工程師或資料科學家,能以不同留存規則智慧地儲存時間序列,像是工程師可以指定應用程式標籤為mobile_api與終端標籤為已註冊的所有指標,以每10秒粒度指標資料儲存30天,同時一小時粒度指標儲存5年。

對於M3的使用者來說,能和監控系統Prometheus搭配使用是一件很重要的事,無論是將Prometheus的指標輸出,供其他應用程式讀取使用,或是使用node_exporter與其他第三方Prometheus指標輸出器進行系統監控。而且有鑒於Uber多個團隊早已經大量的使用Prometheus,因此開發團隊也積極將M3與Prometheus整合,允許這些團隊能全球查詢M3中永久指標資料。

而且根據過往的系統使用經驗,Uber賦予M3一些特性,M3能夠最佳化指標供作管線的每一個部分,最大化儲存空間,同時也會高度壓縮資料,減少硬體支出成本。由於多數的資料為一次寫入不再讀取,M3系統會盡量管理這些資料使用記憶體,維持精簡的記憶體占用,以避免記憶體成為系統瓶頸。

隨著M3平臺釋出,Uber也同時釋出了M3的可擴展儲存後端M3DB,這是分散式時間序列儲存,並具備可配置無序寫入的反向索引。另外,也發布了周邊應用M3 Coordinator,可在M3DB叢集上提供全域查詢和儲存介面。


Advertisement

更多 iThome相關內容