监控工具—Prometheus—基础介绍
原文作者:IT有意思
原文地址:Prometheus(普羅米修斯)——適合k8s和docker的監控系統
目錄
1、介紹
2、監控原理
3、監控指標
4、系統架構
5、功能用途
6、面臨挑戰
1、介紹
Prometheus(普羅米修斯)是一套由SoundCloud公司開發的開源的監控、報警、時間序列數據庫的組合,近幾年隨著k8s的流行,prometheus成為了一個越來越流行的監控工具,是現在重要的云原生監控平臺之一,它允許企業從任何基礎設施或應用組件收集和處理指標數據,用于監控容器化工作負載。它以較低的系統資源要求實現了豐富的自定義和靈活的查詢。如果需要,它還可以通過一臺服務器同時從數千臺計算機中獲取大量數據。
2、監控原理
Prometheus基本原理是通過HTTP協議周期性抓取被監控組件的狀態,這樣做的好處是任意組件只要提供HTTP接口就可以接入監控系統,不需要任何SDK或者其他的集成過程。這樣做非常適合虛擬化環境比如VM或者Docker 。普羅米修斯由保存在單個服務器上的三個主要組件構成:時間序列數據庫、數據檢索worker、Web服務器。數據檢索worker用于發現Kubernetes中的目標,并從正在進行的作業或用于短期作業的推送網關中獲取指標,然后將這些指標推送到數據庫,從那里可以通過HTTP訪問指標以進行查詢和警報。
3、監控指標
它與Kubernetes和云原生生態系統中的其他組件集成,通過監控數據可以幫助企業收集和處理四種類型的指標:
- 計數器(counter):只能增加或重置為零的累積指標。對于完成任務,錯誤或請求數量之類的措施很有用。
- 量規(gauge):可以增加或減少的時間點指標。對于并發請求或當前內存使用情況等措施很有用。
- 直方圖(histogram):一種指標,用于對數據進行采樣并將觀察結果分類為自定義組。對于諸如請求持續時間,或響應大小之類的聚合指標很有用。它還可以顯示Apdex分數,用于評估應用程序的性能和用戶滿意度。
- 摘要(summary):一種指標標準,可對數據進行采樣并返回觀測值的總數,值的總和以及觀測值的四分位數。普羅米修斯摘要對于獲得具有統計意義的四分位數的指標概述非常有用。
4、系統架構
為了穩定運行,普羅米修斯必須將各種組件集成到其架構中。由于它的靈活性,這些組件會因我們的具體實現而異,但是應始終包含以下的元素。架構如下圖所示:
- 客戶端庫:客戶端庫可以將直接檢測添加到服務代碼中,然后它會根據普羅米修斯的指標類型返回指標數據,可以用于大多數流行語言包括Go,Java,Python和Ruby。
- 導出器(Exporter):導出器能夠從無法添加直接檢測的服務和組件中收集數據,例如:數據庫、操作系統內核、路由器、云資源。有眾多官方支持的導出器以及第三方導出器。導出器與服務同時運行,并充當普羅米修斯與服務之間的代理。這些Exporter接受普羅米修斯請求,從服務中收集數據,將數據轉換為正確的格式,然后將其返回給數據檢索worker。
- 服務發現:普羅米修斯既可以靜態配置指標目標,也可以通過服務發現機制動態定位目標。這樣可以確保在整個系統中收集指標,同時涵蓋業務流程創建者動態創建,以及停用的所有組件和資源。為了完成服務發現,普羅米修斯允許我們與許多現有方法集成,包括Kubernetes,HashiCorp Consul和所有主要云提供商所使用的方法。
- 抓取(Scraping):在普羅米修斯中,抓取是從端點收集指標的實際過程。當普羅米修斯的數據檢索worker通過HTTP發送抓取請求時,即可完成這項操作。當儀器庫(instrumentation)或導出器收到這些請求時,將發送包含適當數據的響應。通常,響應還附帶特定的抓取數據。該數據可以包括請求花費了多長時間,以及抓取是否成功。
- 存儲:普羅米修斯包括在本地磁盤時間序列數據庫上的持久存儲,還可以通過遠程讀/寫API將其與遠程存儲集成。在持久性存儲中,數據被分為兩個小時的塊,最終進行壓縮。收集數據時,會將其存儲在內存中并通過預寫日志(WAL)進行記錄,以防止由于服務器故障而造成的丟失。
- PromQL:PromQL是一種查詢功能的查詢語言,用于從普羅米修斯數據庫中選擇和匯總時間序列數據。
- 記錄規則和警報規則:普羅米修斯支持以下兩種類型的規則,每種規則基于針對兩個不同用例的PromQL查詢記錄規則會定期評估PromQL表達式,并將結果存儲為單獨的時間序列。這有助于分發匯總指標所需的工作,并加快計算復雜查詢的可視化呈現時間。警報規則再次定義構成警報的條件,就像PromQL查詢一樣。通過與外部警報工具集成來發出實際警報。普羅米修斯發送規則中定義的PromQL查詢的結果,并通過我們首選的通信路徑分發這些結果,或者以任何其他方式“處理”警報。用于通知管理員特定情況發生的最常見的警報工具有Slack,PagerDuty,OpsGenie和VictorOps等。
- 儀表板:普羅米修斯能夠以幾種不同的方式訪問所收集時間序列數據的可視化。如可以使用內置的表達式瀏覽器進行即時查詢和調試。但是,對于更廣泛的報告,應該使用Grafana,控制臺模板或其他能夠從普羅米修斯檢索數據的可視化工具。
?
5、功能用途
| 監控業務層 | Prometheus支持各個主流開發語言(Go、java、python、ruby官方提供客戶端,其他語言有第三方開源客戶端),可以通過客戶端對核心業務進行埋點 | Prometheu—監控Java應用 |
| 監控應用層 | 一些主流應用可以通過官方或第三方的導出器,來對這些應用做核心指標的收集,如監控redis、mysql | Prometheus應用—監控Redis |
| 監控系統層 | 除了常用軟件, prometheus也有相關系統層和網絡層exporter,用以監控服務器或網絡 | ? |
| 集成其他監控 | prometheus還可以通過各種exporte,集成其他的監控系統,收集監控數據,如AWS CloudWatch,JMX,Pingdom等等。 | ? |
| 不要用Prometheus做什么 | prometheus也提供了Grok exporter等工具可以用來讀取日志,但是prometheus是監控系統,不是日志系統。應用的日志還是應該走ELK等工具棧。 | ? |
6、面臨挑戰
普羅米修斯用于監控Kubernetes和其他環境的強大工具,但并非沒有挑戰。這里總結了一些,供大家參考。
- 存儲。Prometheus所需的存儲容量與要收集的指標標準和頻率有直接關系。根據Kubernetes部署的大小,所需的存儲量可能會迅速超過現有資源。解決這個問題沒有絕對的辦法。在預估資源時請注意這點。通過專用的普羅米修斯適配器使用第三方存儲時,可以應用各種數據維護和生命周期策略。
- 冗余。普羅米修斯使用單節點數據庫來確保數據完整性。但是,這不允許冗余,并且如果磁盤發生故障,則可能導致數據丟失。要解決此問題,可以通過異步方法在外部復制數據,也可以運行普羅米修斯服務器的鏡像。雖然都不是最佳的解決方案,但是兩者都可以提供冗余。此外,還存在更復雜的普羅米修斯服務器集成的技術。
- 沒有事件驅動的指標。由于指標是被抓取(而不是推送)的,因此我們無法輕松實現事件驅動的指標。但是,可以使用普羅米修斯的Push Gateway收集由短期作業或批次推送的指標。為了模擬事件驅動的指標,可以頻繁地scrape網關,盡管這可能會使服務器承壓,但可以產生有用的數據。
- 分段網絡訪問。根據我們的服務,可能會遇到訪問限制或缺少外部訪問的情況。對于指標范圍,這通常需要多個普羅米修斯實例。要查看這些指標,然后需要訪問不同的Grafana儀表板以使用聯邦(Federation)將指標從你的實例聚合到單個服務器。
- 長期存儲。普羅米修斯提供本地存儲,但不適用于長期存儲。如果選擇長期保留指標,則可能會嚴重降低查詢性能。為避免這種情況,需要使用記錄規則對指標數據進行細分,或者可以集成Thanos或Cortex等分布式數據庫。
同系列文章推薦閱讀:
監控工具—Prometheus—基礎介紹
監控工具—Prometheus—安裝部署
監控工具—Prometheus—監控Java程序
監控工具—Prometheus—監控Redis
總結
以上是生活随笔為你收集整理的监控工具—Prometheus—基础介绍的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 动态规划—编辑距离
- 下一篇: 监控工具—Prometheus—安装部署