2019/12/12

【系統監控】Prometheus 普羅米修斯系統監控基本概念介紹


【系統監控】Prometheus 普羅米修斯系統監控基本概念介紹

Prometheus 是一套開放式原始碼的系統監控警報框架與TSDB(Time Series Database),該專案是由 SoundCloud 的工程師( Google 工程師)建立,Prometheus 啟發於 Google Borgmon 監控系統。


在眾多的 monitor 工具中,Prometheus 是一個很方便且整合完善的監控預警框架 TSDBTime Series Database)時間序列資料庫,可以很容易建立不同維度的 metrics 和整合不同的 alert tool 以及資訊視覺化圖表的監控工具並提供自帶的 PromQL (Prometheus Query Language) 進行 query 查詢。此外,源自於 SoundCloud Prometheus 目前是獨立於任何公司外的 open source project 並和 Kubernetes 一樣是 Cloud Native Computing FoundationCNCF) 下的一員(目前已經孵化成熟畢業了),也有許多知名公司如:UberDigitalOcean 等導入企業專案,所以在使用上相對有保障。

Prometheus 具備了以下特性:

l   多維度資料模型
 時間序列資料透過 Metric 名稱與鍵值(Key-value)來區分。
所有 Metrics 可以設定任意的多維標籤。
資料模型彈性度高,不需要刻意設定為以特定符號(ex: ,)分割。 
可對資料模型進行聚合、切割與切片操作。
支援雙精度浮點數類型,標籤可以設定成 Unicode
l   靈活的查詢語言(PromQL),如可進行加減乘除等。
l   不依賴分散式儲存,因為 Prometheus Server 是一個二進制檔,可在單個服務節點自主運行。
l   基於 HTTP Pull 方式收集時序資料。
l   可以透過 Push Gateway 進行資料推送。
l   支援多種視覺化儀表板呈現,如 Grafana
l   能透過服務發現(Service discovery)或靜態組態去獲取監控的 Targets


Prometheus 架構
Prometheus 生態圈中是由多個元件組成,其中有些是選擇性的元件:
l   Prometheus Server:收集與儲存時間序列資料,並提供 PromQL 查詢語言支援。
l   Client Library:客戶端函式庫,提供語言開發來開發產生 Metrics 並曝露 Prometheus Server。當 Prometheus Server Pull 時,直接返回即時狀態的 Metrics
l   Pushgateway:主要用於臨時性 Job 推送。這類 Job 存在期間較短,有可能 Prometheus Pull 時就消失,因此透過一個閘道來推送。適合用於服務層面的 Metrics
l   Exporter:用來曝露已有第三方服務的 Metrics Prometheus Server,即以 Client Library 開發的 HTTP server。一個簡單範例 OpenStack Exporter,或是參考官方 Exporters and integrations
l   AlertManager:接收來至 Prometheus Server Alert event,並依據定義的 Notification 組態發送警報,ex: E-mailPagerdutyOpenGenie Webhook 等等。



Prometheus 運作流程:

1.         Prometheus Server 定期從組態好的 Jobs 或者 Exporters 中拉取 Metrics,或者接收來自 Pushgateway 發送的 Metrics,又或者從其他的 Prometheus Server 中拉取 Metrics
2.         Prometheus Server Local 儲存收集到的 Metrics,並運行已定義好的 alert.rules,然後紀錄新時間序列或者像 AlertManager 發送警報。
3.         AlertManager 根據組態檔案來對接受到的 Alert event 進行處理,然後發送警報。
4.         在視覺化介面呈現採集資料。

Prometheus Server 拉取 Exporter 資料,然後透過 PromQL 語法進行查詢,再將資料給 Web UI or Dashboard



Prometheus Server 觸發 Alert Definition 定義的事件,並發送給 AelertManager


AlertManager 依據設定發送警報給 E-mailSlack 等等。

 



Prometheus 資料模型與 Metric 類型:

資料模型
Prometheus 儲存的資料為時間序列,主要以 Metrics name 以及一系列的唯一標籤(key-value)組成,不同標籤表示不同時間序列。模型資訊如下:
l   Metrics Name:該名稱通常用來表示 Metric 功能,例如 http_requests_total,即表示 HTTP 請求的總數。而 Metrics Name 是以 ASCII 字元、數字、英文、底線與冒號組成,並且要滿足[a-zA-Z_:][a-zA-Z0-9_:]* 正規表示法。
l   標籤:用來識別同一個時間序列不同維度。如 http_request_total{method="Get"}表示所有 HTTP Get Request 數量,因此當 method="Post" 時又是另一個新的 Metric。標籤也需要滿足[a-zA-Z_:][a-zA-Z0-9_:]* 正規表示法。
l   樣本:實際的時間序列,每個序列包含一個 float64 值與一個毫秒的時間戳。
l   格式:一般為<metric name>{<label name>=<label value>,...},例如:http_requests_total{method="POST",endpoint="/api/tracks"}

Metrics 類型
Prometheus Client 函式庫支援了四種主要 Metric 類型:
l   Counter: 可被累加的 Metric,該 Metrics 不是累加就是重設為 0。比如一個 HTTP Get 錯誤的出現次數。
l   Gauge: 屬於瞬時、與時間無關的任意更動 Metric,如記憶體使用率。
l   Histogram: 主要使用在表示一段時間範圍內的資料採樣,可想像是柱狀圖。
l   Summary: 類似 Histogram,用來表示一端時間範圍內的資料採樣總結。

沒有留言:

張貼留言