prometheus簡介

1、prometheus簡介node

1.1 什麼是prometheus?mysql

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

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

1.2 核心架構正則表達式

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

 

 從這個架構圖,也能夠看出 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、基礎概念

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硬盤來提升性能。

相關文章
相關標籤/搜索