簡介
Prometheus是一個開源的監控、告警整體解決方案,最初由SoundCloud構建。從2012年開始,大量的公司開始適配Prometheus,擁有大量的開發者和非常活躍的用戶社區。目前已作為獨立的項目在運營,並與2016年加入CNCF,是繼Kubernetes之后第二個被CNCF托管的項目。
特性
- 通過指標名稱和標簽(key/value對)區分的多維度、時間序列數據模型
- 靈活的查詢語法 PromQL
- 不需要依賴額外的存儲,一個服務節點就可以工作
- 利用http協議,通過pull模式來收集時間序列數據
- 需要push模式的應用可以通過中間件gateway來實現
- 監控目標支持服務發現和靜態配置
- 支持各種各樣的圖表和監控面板組件
核心組件
整個Prometheus生態包含多個組件,除了Prometheus server組件其余都是可選的
- Prometheus server:主要的核心組件,用來收集和存儲時間序列數據
- client libraries:提供個客戶端,主要是用來幫助應用程序更容易生成滿足Prometheus格式的監控數據,支持各種各樣的開發語言
- push gateway:對於那些生存時間很短的job工作,采用Prometheus的pull模式可能來不及收集,可以部署這個組件,讓job主動把監控指標push到getway,Prometheus再從getway中拉取
- 各種各樣的exports
- alertmanager 一個告警組件
架構圖
下面這張圖,清晰的描繪出了Prometheus各個組件如何相互協作完成系統監控
- Prometheus server利用各種各樣的服務發現機制獲取需要監控的target
- Prometheus server通過pull從各種各樣的target處拉取指標數據
- 數據可視化組件(Grfana)通過PromQl從Prometheus server查詢數據,進行展示
- Prometheus server根據自己定義的rule,可以提前對指標數據再次進行計算,觸發報警的發送到alertmanager組件
- alertmanager組件根據配置的告警方式發送相應的通知
適用范圍
Prometheus非常適合用來獲取和存儲純粹數值型時間序列數據,如cpu使用率、系統訪問量、數據更新頻率等,所以多被用來對宿主機和微服務架構中的指標監控。
Prometheus非常的可靠,每個Prometheus server可以作為一個獨立體進行部署,不用依賴其他服務或者是網絡。所以在底層基礎設施出現問題時,你還可以從Prometheus server中取出歷史指標來分析問題出現的原因,並且Prometheus server運行時也不會占用很多的資源
不適用場景
因為Prometheus server是周期性pull指標信息的,所以收集的數據可能是不完整的(比如拉取間隔期間,目標服務出現故障,則這個間隔期間中的數據就獲取不到),所以對於要求數據100%准確的場景如交易額統計等,Prometheus就不太適合了。對於Prometheus最好的用法就是來做監控,通過Prometheus收集的指標數據對系統的健康狀態進行評判和報警處理。