1、prometheus簡介node
1.1 什麼是prometheus?mysql
Prometheus是一個開源監控系統,它前身是SoundCloud的警告工具包。從2012年開始,許多公司和組織開始使用Prometheus。該項目的開發人員和用戶社區很是活躍,愈來愈多的開發人員和用戶參與到該項目中。目前它是一個獨立的開源項目,且不依賴與任何公司。爲了強調這點和明確該項目治理結構,Prometheus在2016年繼Kurberntes以後,加入了Cloud Native Computing Foundation。主要具備以下功能:web
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 時序數據分爲 Counter, Gauge, Histogram, Summary 四種類型。
http_requests_total
, 表示 Prometheus 處理的 http 請求總數,咱們可使用data, 很容易獲得任意區間數據的增量。<basename>_bucket{le="<upper inclusive bound>"}
,<basename>_bucket{le="+Inf"}
, <basename>_sum
,<basename>_count
組成,主要用於表示一段時間範圍內對數據進行採樣,(一般是請求持續時間或響應大小),並可以對其指定區間以及總數進行統計,一般咱們用它計算分位數的直方圖。<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硬盤來提升性能。