原文地址:https://xeblog.cn/articles/7
Prometheus簡介
簡史
Prometheus受啟發於Google的Brogmon監控系統(相似的Kubernetes是從Google的Brog系統演變而來),從2012年開始由前Google工程師在Soundcloud以開源軟體的形式進行研發,並且於2015年早期對外發布早期版本。2016年5月繼Kubernetes之後成為第二個正式加入CNCF基金會的專案,同年6月正式釋出1.0版本。2017年底釋出了基於全新儲存層的2.0版本,能更好地與容器平臺、雲平臺配合。
架構
特點
- 多維的資料模型(基於時間序列的k/v鍵值對)。
- 靈活的查詢及聚合語句(PromQL)。
- 不依賴分散式儲存,節點自治。
- 基於HTTP的pull模式採集時間序列資料。
- 可以使用pushgateway(prometheus的可選中介軟體)實現push模式。
- 可以使用動態服務發現或靜態配置採集的目標機器。
- 支援多種圖形及儀表盤。
相關概念
資料模型
Prometheus 儲存的是時序資料, 即按照相同時序(相同的名字和標籤),以時間維度儲存連續的資料的集合。
監控樣本
# HELP system_cpu_usage The "recent cpu usage" for the whole system
# TYPE system_cpu_usage gauge
system_cpu_usage 0.23587264544090683
# HELP logback_events_total Number of error level events that made it to the logs
# TYPE logback_events_total counter
logback_events_total{level="error",} 0.0
logback_events_total{level=“info”,} 557.0
複製程式碼
- HELP用於解釋當前指標的含義,TYPE則說明當前指標的資料型別
- system_cpu_usage、 logback_events_total表示當前指標的名稱
- {}中的標籤反映了當前樣本的一些特徵和維度
- 0.23587264544090683、0.0、557.0表示該監控樣本的具體值
時序型別
Prometheus 時序資料分為 Counter, Gauge, Histogram, Summary 四種型別。
Prometheus的使用
安裝
配置
Pom依賴
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>io.micrometer</groupId>
<artifactId>micrometer-registry-prometheus</artifactId>
</dependency>
複製程式碼
專案開啟監控
management.endpoint.metrics.enabled=true
management.endpoints.web.exposure.include=*
management.endpoint.prometheus.enabled=true
management.metrics.export.prometheus.enabled=true
複製程式碼
新增Job
進入Prometheus安裝根目錄 vim prometheus.yml
新增節點
- job_name: xeblog-api
metrics_path: /actuator/prometheus
static_configs:
- targets: ['127.0.0.1:8080’]
複製程式碼
job_name:任務名稱 metrics_path: 指標路徑 targets:例項地址/專案地址,可配置多個
執行Prometheus
進入Prometheus安裝根目錄 ./prometheus 執行成功日誌
訪問地址:localhost:9090
PromQL
匹配過濾
操作符:= != =~ !~
匹配監控任務為xeblog-api的非GET請求方法的請求數
http_server_requests_seconds_count{job="xeblog-api", method!="GET"}
複製程式碼
匹配監控任務為xeblog-api的非GET請求方法的請求數,且請求路徑不為/api/message和/api/version
http_server_requests_seconds_count{job="xeblog-api", method!="GET", uri !~ "/api/message|/api/version"}
複製程式碼
它門的區別主要是,“=~ !~”支援正則匹配
範圍查詢
查詢最近5分鐘內的所有樣本資料: http_request_total{}[5m] 可選單位:
- s - 秒
- m - 分鐘
- h - 小時
- d - 天
- w - 周
- y - 年
時間位移操作(offset)
查詢5分鐘前的樣本資料: http_request_total{} offset 5m
查詢昨天1天內的樣本資料: http_request_total{}[1d] offset 1d
聚合操作
- sum (求和)
- min (最小值)
- max (最大值)
- avg (平均值)
- stddev (標準差)
- stdvar (標準差異)
- count (計數)
- count_values (對value進行計數)
- bottomk (後n條時序)
- topk (前n條時序)
- quantile (分佈統計) ...
內建函式
- increase(v range-vector):獲取區間向量中的第一個和最後一個樣本並返回其增長量
- rate(v range-vector):計算區間向量v在時間視窗內平均增長速率
- irate(v range-vector):計算區間向量v在時間視窗內平均增長速率(瞬時增長率,基於最後兩個資料)
- predict_linear(v range-vector, t scalar):預測時間序列v在t秒後的值
- abs(v instant-vector): 返回輸入向量的絕對值
- sort(v instant-vector): 按升序排列
- sort_desc(v instant-vector): 按降序排列 ...
Grafana視覺化
安裝
Mac下安裝啟動示例
// 安裝
brew install grafana
// 啟動
brew services start grafana
複製程式碼
啟動後訪問地址:localhost:3000
登陸: 初始使用者名稱和密碼都是admin
新增Prometheus資料來源
新增Dashboard
可以選擇自己手動新增或者匯入一個已配置好的Json檔案 Dashboard分享社群:grafana.com/dashboards 這裡可以下載別人分享的Dashboard Json配置檔案
推薦下載:Spring Boot Statistics 下載完後 匯入檔案就可以看見類似一個這樣的監控介面 最上面這一行是模板變數,可以動態選擇 點選設定按鈕,選擇Variables,點選New可以新增變數 點選title選擇Edit可以進行編輯 這裡編寫PromQL語句監控報警
配置發件郵箱
vim grafana.ini 我的檔案路徑是/usr/local/etc/grafana/grafana.ini 配置如下:
[smtp]
enabled = true
host = smtp.qq.com:25
user = 你的QQ@qq.com
# If the password contains # or ; you have to wrap it with trippel quotes. Ex """#password;"""
password = 郵箱口令(不是QQ密碼)
;cert_file =
;key_file =
;skip_verify = false
from_address = 你的QQ@qq.com
from_name = Grafana
# EHLO identity in SMTP dialog (defaults to instance_name)
;ehlo_identity = dashboard.example.com
複製程式碼
這裡配置的是QQ郵箱,其他郵箱同理
配置完後,重啟Grafana
brew services restart grafana
複製程式碼
配置收件人
可以新增多個收件人,以“;”分隔 最後點選Send Test 可以收到一封測試郵件,配置成功監控指標
需要注意的是,Prometheus不支援帶有模版變數的監控設定報警,否則會提示“Template variables are not supported in alert queries”
監控示例: 監控CPU使用率 PromQL:
system_cpu_usage{instance="例項地址", job="任務名稱"}
複製程式碼
建立報警
這裡配置的是當CPU使用率超過1%則發出報警
新增報警通知郵箱以及報警的描述資訊
儲存之後,沒過多久就收到了報警通知
感謝閱讀,如有錯誤,望指正!
參考資料