利用Prometheus 打造企業分佈式監控平臺(1)--擴展性

Screen-Shot-2019-03-20-at-8.07.19-AM.png

Prometheus是CNCF基金會管理的一個開源監控項目,因爲其良好的架構設計和完善的生態,迅速成爲了監控領域事實上的標準,尤爲是在雲原生領域。數據庫

隨着深刻地瞭解Prometheus,你會發現一些很是好的功能:服務器

  • 服務發現使配置更加容易。Prometheus支持consul,etcd,kubernetes以及各家公有云廠商自動發現。對於監控目標動態發現,這點特別契合Cloud時代,應用動態擴縮的特色。咱們沒法想象,在Cloud時代,須要運維不斷更改配置。
  • 開源社區創建了數百個exporter。基本上涵蓋了全部基礎設施和主流中間件。
  • 工具庫可從您的應用程序獲取自定義指標。基本上主流開發語言都有對應的工具庫。
  • 它是CNCF旗下的OSS,是繼Kubernetes以後的第二個畢業項目。Kubernetes已經與Promethues深度結合,並在其全部服務中公開了Prometheus指標。
  • Pushgateway,Alermanager等組件,基本上涵蓋了一個完整的監控生命週期。

01_Initial_Prometheus_setup.png

對於一家小型單位,Prometheus足夠了。幾乎不須要任何的開發,就足以應對全部監控需求。架構

咱們都知道Prometheus,自身的時序數據庫TSDB是一個單機的數據庫,不支持分佈式是其天生的劣勢。當你的 metrics 數量足夠多的時候,單機Prometheus就顯得捉襟見肘。您的Prometheus服務器開始崩潰,大多時候是內存問題。Prometheus中的內存使用量與存儲的時間序列數量成正比,而且隨着時間序列數量的增長,Prometheus會OOM。具備數百萬個指標的Prometheus可使用超過100GB的RAM,不少時候咱們受限制於一些主機自己的大小,咱們沒法不斷的經過縱向調整機器大小來解決這個問題。併發

所以解決Prometheus的擴展性,是打造企業分佈式監控平臺的關鍵。運維

如何解決Prometheus的擴展性

聯邦

官方的解決方案是集羣聯邦,主要提供了分層聯邦和跨服務聯邦。分佈式

分層聯邦

分層聯邦容許 Prometheus 可以擴展到十幾個數據中心和上百萬的節點。在此場景下,聯邦拓撲相似一個樹形拓撲結構,上層的 Prometheus 服務器從大量的下層 Prometheus 服務器中收集和匯聚的時序數據。工具

dOinJCq.png

跨服務聯邦

在跨服務聯邦中,一個服務的 Prometheus 服務器被配置來提取來自其餘服務的 Prometheus 服務器的指定的數據,以便在一個 Prometheus 服務器中對兩個數據集啓用告警和查詢。spa

ism3t0M.png

這兩種聯邦,其實有很大的問題,本質上Prometheus的單機能力依舊沒有獲得解決。架構設計

拆分

拆分永遠是解決問題的一個好思路。尤爲是當你的場景是,不須要一個全局的監控視圖。設計

咱們能夠根據環境(test,uat, prod)或是業務類型(基礎設施,中間件,業務),甚至是根據部門類型來拆分。

02_Two_cluster_Prometheus_setup.png

固然能夠經過grafana配置不一樣的數據源,給使用方營造一種總體的假象。

04_Global_view_using_grafana.png

可是這種方案,會帶來不少問題:

  • 隨着你metrics量的增長,切分的維度會愈來愈細。
  • 缺少一個全局的視圖,咱們仍然沒法跨不一樣集羣查詢服務,而且沒法真正執行全局查詢。
  • 給統一報警增長了困難。
  • 若是羣集是動態的或變化的,則每次羣集中部署Prometheus時,您一般都須要實現一種自動向Grafana添加數據源的方法。

長期存儲

Prometheus社區也意識到了一樣的問題,因而提供了遠程讀寫兩個接口,讓你們可使用一些社區的時序數據庫方案,來擴展prometheus。

當前,有幾個提供長期存儲(LTS)的開源項目,而這些社區項目則領先於其餘項目:Cortex,Thanos或M3。

06_Using_LTS_for_Prometheus.png

固然這些項目實現的方式是不一樣的,均有不一樣的優點和劣勢,須要你們根據本身單位實際的場景需求來選擇。

諸如Thanos,最終的儲存是S3等對象存儲,總體架構比較複雜。

M3db社區活躍度不夠,文檔比較少,可是M3db相比其餘幾個,是典型的時序數據庫。

Influxdb集羣版本沒有開源。

Victoria 數據是沒有副本的。

我曾經在生產環境中,使用過Clickhouse做爲長期存儲。該解決方案存在的問題是,Clickhouse併發查詢能力比較低,致使查詢的時候慢。固然寫入卻是沒有什麼大的問題。

這種架構的好處是:

  • 全局視圖
  • 統一的報警
  • 藉助於第三方時序數據庫,實現Prometheus採集和查詢分離。總體監控系統更加穩定。

採集端hash mod

尤爲當Prometheus部署到kubernetes當中,而且咱們使用了Prometheus的kubernetes sd 服務發現時,當咱們集羣變得很是大的時候,單臺的Prometheus採集能力也成爲一個瓶頸。此時,咱們可使用hash mod, 對採集任務進行分片。

config01.jpg

總結

本文是利用Prometheus 打造企業分佈式監控平臺系列中的第一篇文章。主要講了Prometheus的可擴展性上的一些解決方案。其實沒有百分百完美的方案,你們須要根據本身metrics的數量來選擇最合適本身的方案。

相關文章
相關標籤/搜索