概述
什麼是 Prometheus?
Prometheus 是一個開源系統監控和告警工具包,最初由 SoundCloud 構建。自 2012 年成立以來,許多公司和組織都採用了 Prometheus,該專案擁有非常活躍的開發者和使用者社群。它現在是一個獨立的開源專案,不依賴於任何公司進行維護。為了強調這一點,並澄清該專案的治理結構,Prometheus 於 2016 年加入了 雲原生計算基金會 ,作為繼 Kubernetes 之後的第二個託管專案。
Prometheus 採集並將其指標儲存為時間序列資料,即指標資訊與記錄時的時間戳一同儲存,此外還可以伴隨被稱為標籤(Label)的可選鍵值對。
有關 Prometheus 更詳細的概述,請參閱媒體部分連結的資源。
特性
Prometheus 的主要特性包括
- 多維 資料模型,其時間序列資料由指標名稱和鍵/值對標識
- PromQL,一種 靈活的查詢語言,用以發揮這種多維度的優勢
- 不依賴分散式儲存;單個伺服器節點是自治的
- 時間序列資料採集透過基於 HTTP 的拉取(Pull)模型進行
- 透過中間閘道器支援 推送時間序列資料
- 透過服務發現或靜態配置來發現目標
- 支援多種圖形和儀表板展示模式
什麼是指標?
通俗地講,指標就是數值測量。時間序列這一術語指的是隨著時間推移對變化進行的記錄。使用者想要測量什麼取決於具體的應用程式。對於 Web 伺服器,它可能是請求耗時;對於資料庫,它可能是活動連線數或活動查詢數,等等。
指標在理解您的應用程式為何以某種方式執行方面起著重要作用。假設您執行著一個 Web 應用程式,並發現它變慢了。為了瞭解您的應用程式發生了什麼,您需要一些資訊。例如,當請求數很高時,應用程式可能會變慢。如果您擁有請求計數指標,就可以查明原因並增加伺服器數量來處理負載。
元件
Prometheus 生態系統由多個元件組成,其中許多是可選的
- 主要的 Prometheus 伺服器 ,用於抓取和儲存時間序列資料
- 用於為應用程式程式碼進行插樁的 客戶端庫
- 用於支援短期任務的 Pushgateway
- 針對 HAProxy、StatsD、Graphite 等服務的專用 匯出器
- 用於處理告警的 Alertmanager
- 各種支援工具
大多數 Prometheus 元件都是用 Go 語言 編寫的,這使得它們易於構建和部署為靜態二進位制檔案。
架構
此圖展示了 Prometheus 的架構及其部分生態系統元件
Prometheus 直接或透過中間 Pushgateway(用於短期任務)從已插樁的任務中抓取指標。它在本地儲存所有抓取的樣本,並對這些資料執行規則,以從現有資料中聚合和記錄新的時間序列,或者生成告警。可以使用 Grafana 或其他 API 消費者來將收集到的資料視覺化。
什麼時候適用?
Prometheus 非常適合記錄任何純數字的時間序列。它既適用於以機器為中心的監控,也適用於高度動態的面向服務架構的監控。在微服務時代,它對多維資料收集和查詢的支援是一大特色優勢。
Prometheus 專為可靠性而設計,旨在成為您在發生故障時所求助的系統,以便快速診斷問題。每個 Prometheus 伺服器都是獨立的,不依賴網路儲存或其他遠端服務。當您基礎設施的其他部分損壞時,您可以信賴它,並且您無需構建龐大的基礎設施即可開始使用。
什麼時候不適用?
Prometheus 注重可靠性。即使在故障條件下,您也可以隨時檢視關於系統的可用統計資料。如果您需要 100% 的準確率(例如按請求計費),Prometheus 並不是一個好選擇,因為收集的資料可能不夠詳細和完整。在這種情況下,您最好使用其他系統來收集和分析用於計費的資料,並將 Prometheus 用於其餘的監控。