熱門搜索 Zabbix技術資料 Zabbix常見問、答討論 成功案例 Zabbix交流區 Prometheus交流區
Prometheus是一個最初在SoundCloud上構建的開源系統監視和警報工具包 。自2012年成立以來,許多公司和組織都采用了Prometheus,該項目擁有一個非常活躍的開發人員和用戶社區。它現在是一個獨立的開源項目,可以獨立于任何公司進行維護。它啟發于 Google 的 borgmon 監控系統,由工作在 SoundCloud 的 google 前員工在 2012 年創建,作為社區開源項目進行開發,并于 2015 年正式發布。2016 年,Prometheus 正式加入 Cloud Native Computing Foundation,成為受歡迎度僅次于 Kubernetes 的項目。
作為新一代的監控框架,Prometheus 具有以下特點:
強大的多維度數據模型: 時間序列數據通過 metric 名和鍵值對來區分。 所有的 metrics 都可以設置任意的多維標簽。
數據模型更隨意,不需要刻意設置為以點分隔的字符串。 可以對數據模型進行聚合,切割和切片操作。
支持雙精度浮點類型,標簽可以設為全unicode。 靈活而強大的查詢語句(PromQL):在同一個查詢語句,可以對多個 metrics進行乘法、加法、連接、取分數位等操作。
易于管理: Prometheus server是一個單獨的二進制文件,可直接在本地工作,不依賴于分布式存儲。 高效:平均每個采樣點僅占 3.5 bytes,且一個 Prometheus server 可以處理數百萬的 metrics。 使用 pull模式采集時間序列數據,這樣不僅有利于本機測試而且可以避免有問題的服務器推送壞的 metrics。 可以采用 push gateway 的方式把時間序列數據推送至 Prometheus server 端。 可以通過服務發現或者靜態配置去獲取監控的 targets。
有多種可視化圖形界面。 易于伸縮。 需要指出的是,由于數據采集可能會有丟失,所以 Prometheus 不適用對采集數據要 100%
準確的情形。但如果用于記錄時間序列數據,Prometheus 具有很大的查詢優勢,此外,Prometheus 適用于微服務的體系架構。
Prometheus生態系統由多個組件組成,其中許多組件是可選的:
主要的Prometheus服務器,用于存儲時間序列數據 ;
用于檢測應用程序代碼的客戶端庫;
用于支持短期工作的推送網關 針對HAProxy,StatsD,Graphite等服務的專用出口商 ;
一個alertmanager處理警報 各種支持工具 ;
大多數Prometheus組件都是用Go編寫的,因此很容易構建和部署為靜態二進制文件。
此圖說明了Prometheus的體系結構及其一些生態系統組件:
在選擇Prometheus作為監控工具前,要明確它的適用范圍,以及不適用的場景。
Prometheus在記錄純數值時間序列方面表現非常好。它既適用于以服務器為中心的監控,也適用于高動態的面向服務架構的監控。
在微服務的監控上,Prometheus對多維度數據采集及查詢的支持也是特殊的優勢。
Prometheus更強調可靠性,即使在故障的情況下也能查看系統的統計信息。權衡利弊,以可能丟失少量數據為代價確保整個系統的可用性。因此,它不適用于對數據準確率要求100%的系統,比如實時計費系統(涉及到錢)。
普羅米修斯重視可靠性。即使在故障情況下,您也可以隨時查看有關系統的可用統計信息。如果您需要100%的準確度,例如按請求計費,Prometheus不是一個好的選擇,因為收集的數據可能不夠詳細和完整。在這種情況下,您最好使用其他系統來收集和分析數據以進行計費,并使用Prometheus進行其余監控。
Prometheus Server:
Prometheus Server是Prometheus組件中的核心部分,負責實現對監控數據的獲取,存儲以及查詢。 Prometheus Server可以通過靜態配置管理監控目標,也可以配合使用Service Discovery的方式動態管理監控目標,并從這些監控目標中獲取數據。其次Prometheus Server需要對采集到的監控數據進行存儲,Prometheus Server本身就是一個時序數據庫,將采集到的監控數據按照時間序列的方式存儲在本地磁盤當中。最后Prometheus Server對外提供了自定義的PromQL語言,實現對數據的查詢以及分析。 Prometheus Server內置的Express Browser UI,通過這個UI可以直接通過PromQL實現數據的查詢以及可視化。 Prometheus Server的聯邦集群能力可以使其從其他的Prometheus Server實例中獲取數據,因此在大規模監控的情況下,可以通過聯邦集群以及功能分區的方式對Prometheus Server進行擴展。
Exporters:
Exporter將監控數據采集的端點通過HTTP服務的形式暴露給Prometheus Server,Prometheus Server通過訪問該Exporter提供的Endpoint端點,即可獲取到需要采集的監控數據。 一般來說可以將Exporter分為2類: 直接采集:這一類Exporter直接內置了對Prometheus監控的支持,比如cAdvisor,Kubernetes,Etcd,Gokit等,都直接內置了用于向Prometheus暴露監控數據的端點。 間接采集:間接采集,原有監控目標并不直接支持Prometheus,因此我們需要通過Prometheus提供的Client Library編寫該監控目標的監控采集程序。例如: Mysql Exporter,JMX Exporter,Consul Exporter等。
PushGateway:
在Prometheus Server中支持基于PromQL創建告警規則,如果滿足PromQL定義的規則,則會產生一條告警,而告警的后續處理流程則由AlertManager進行管理。在AlertManager中我們可以與郵件,Slack等等內置的通知方式進行集成,也可以通過Webhook自定義告警處理方式。
Service Discovery:
服務發現在Prometheus中是特別重要的一個部分,基于Pull模型的抓取方式,需要在Prometheus中配置大量的抓取節點信息才可以進行數據收集。有了服務發現后,用戶通過服務發現和注冊的工具對成百上千的節點進行服務注冊,并最終將注冊中心的地址配置在Prometheus的配置文件中,大大簡化了配置文件的復雜程度, 也可以更好的管理各種服務。 在眾多云平臺中(AWS,OpenStack),Prometheus可以 通過平臺自身的API直接自動發現運行于平臺上的各種服務,并抓取他們的信息Kubernetes掌握并管理著所有的容器以及服務信息,那此時Prometheus只需要與Kubernetes打交道就可以找到所有需要監控的容器以及服務對象. Consul(官方推薦)等服務發現注冊軟件 通過DNS進行服務發現 通過靜態配置文件(在服務節點規模不大的情況下)
這一期的Prometheus的技術分享到這就結束了,更多Prometheus相關信息請持續關注Prometheus技術分享專欄。
高校運維解決方案以基礎架構監控平臺為依托,結合可視化大屏、集中告警、報表系統、權限管理、業務系統管理等模塊,實現對IT基礎架構和教學系統等統一集中監...
View details