prometheus簡介


一、prometheus簡介

1.1 什么是prometheus?

Prometheus是一個開源監控系統,它前身是SoundCloud的警告工具包。從2012年開始,許多公司和組織開始使用Prometheus。該項目的開發人員和用戶社區非常活躍,越來越多的開發人員和用戶參與到該項目中。目前它是一個獨立的開源項目,且不依賴與任何公司。為了強調這點和明確該項目治理結構,Prometheus在2016年繼Kurberntes之后,加入了Cloud Native Computing Foundation。主要具有如下功能:

  • 多維 數據模型(時序由 metric 名字和 k/v 的 labels 構成)。
  • 靈活的查詢語句(PromQL)。
  • 無依賴存儲,支持 local 和 remote 不同模型。
  • 采用 http 協議,使用 pull 模式,拉取數據,簡單易懂。
  • 監控目標,可以采用服務發現或靜態配置的方式。
  • 支持多種統計數據模型,圖形化友好。

1.2 核心架構

我們將通過prometheus的基礎結構來詳細了解,他的功能以及如何實現監控、告警的。如下如所示:

 

 從這個架構圖,也可以看出 Prometheus 的主要模塊包含, prometheus server, exporters, pushgateway, PromQL, Alertmanager, WebUI 等。下面我就簡單介紹各個組件實現的功能:

  1. prometheus server: 定期從靜態配置的 targets 或者服務發現(主要是DNS、consul、k8s、mesos等)的 targets 拉取數據。

  2. exporters:負責向prometheus server做數據匯報的程序統。而不同的數據匯報由不同的exporters實現,比如監控主機有node-exporters,mysql有MySQL server exporter,更多請參考鏈接

  3. pushgateway:主要使用場景為:

       Prometheus 采用 pull 模式,可能由於不在一個子網或者防火牆原因,導致 Prometheus 無法直接拉取各個 target 數據。在監控業務數據的時候,需要將不同數據匯總, 由 Prometheus 統一收集。

    總結:實現類似於zabbix-proxy功能;

  4. Alertmanager:實現prometheus的告警功能。

  5. webui:主要通過grafana來實現webui展示。

1.3 適用場景

Prometheus在記錄純數字時間序列方面表現非常好。它既適用於面向服務器等硬件指標的監控,也適用於高動態的面向服務架構的監控。對於現在流行的微服務,Prometheus的多維度數據收集和數據篩選查詢語言也是非常的強大。Prometheus是為服務的可靠性而設計的,當服務出現故障時,它可以使你快速定位和診斷問題。它的搭建過程對硬件和服務沒有很強的依賴關系。

Prometheus,它的價值在於可靠性,甚至在很惡劣的環境下,你都可以隨時訪問它和查看系統服務各種指標的統計信息。 如果你對統計數據需要100%的精確,它並不適用,例如:它不適用於實時計費系統

二、基礎概念

2.1 數據模型

Prometheus 存儲的是時序數據, 即按照相同時序(相同的名字和標簽),以時間維度存儲連續的數據的集合。時序(time series) 是由名字(Metric),以及一組 key/value 標簽定義的,具有相同的名字以及標簽屬於相同時序。時序的名字由 ASCII 字符,數字,下划線,以及冒號組成,它必須滿足正則表達式 [a-zA-Z_:][a-zA-Z0-9_:]*, 其名字應該具有語義化,一般表示一個可以度量的指標,例如 http_requests_total, 可以表示 http 請求的總數。

時序的標簽可以使 Prometheus 的數據更加豐富,能夠區分具體不同的實例,例如 http_requests_total{method="POST"} 可以表示所有 http 中的 POST 請求。標簽名稱由 ASCII 字符,數字,以及下划線組成, 其中 __ 開頭屬於 Prometheus 保留,標簽的值可以是任何 Unicode 字符,支持中文。

2.2 時序4種類型

Prometheus 時序數據分為 CounterGaugeHistogramSummary 四種類型。

  1. Counter:表示收集的數據是按照某個趨勢(增加/減少)一直變化的,我們往往用它記錄服務請求總量,錯誤總數等。例如 Prometheus server 中 http_requests_total, 表示 Prometheus 處理的 http 請求總數,我們可以使用data, 很容易得到任意區間數據的增量。
  2. Gauge:表示搜集的數據是一個瞬時的,與時間沒有關系,可以任意變高變低,往往可以用來記錄內存使用率、磁盤使用率等。
  3. Histogram:Histogram 由 <basename>_bucket{le="<upper inclusive bound>"}<basename>_bucket{le="+Inf"}<basename>_sum<basename>_count 組成,主要用於表示一段時間范圍內對數據進行采樣,(通常是請求持續時間或響應大小),並能夠對其指定區間以及總數進行統計,通常我們用它計算分位數的直方圖。
  4. Summary:Summary 和 Histogram 類似,由 <basename>{quantile="<φ>"}<basename>_sum<basename>_count組成,主要用於表示一段時間內數據采樣結果,(通常是請求持續時間或響應大小),它直接存儲了 quantile 數據,而不是根據統計區間計算出來的。區別在於:

      a. 都包含 <basename>_sum<basename>_count。

                b. Histogram 需要通過 <basename>_bucket 計算 quantile, 而 Summary 直接存儲了 quantile 的值。

2.3 總結

prometheus是屬於下一代監控,現在企業中大部分通過使用zabbix來實現主機、服務、設備的監控。與zabbix相比,zabbix還是存在一定的優勢,比如豐富的插件、webui能完成大部分工作,而prometheus更多的配置是通過配置文件還實現,並且prometheus相當消耗資源。建議在使用的過程中,認真對比慎重選擇,如果使用prometheus,就要配置更好的服務器資源,因為它的監控粒度更細,需要計算相關數值,最好使用SSD硬盤來提高性能。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM