Prometheus+Grafana視覺化監控SpringBoot專案

xeblog發表於2019-03-04

原文地址: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版本,能更好地與容器平臺、雲平臺配合。

架構

image

特點

  • 多維的資料模型(基於時間序列的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 執行成功日誌

image

訪問地址: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資料來源

image

新增Dashboard

可以選擇自己手動新增或者匯入一個已配置好的Json檔案 Dashboard分享社群:grafana.com/dashboards 這裡可以下載別人分享的Dashboard Json配置檔案

image
推薦下載:Spring Boot Statistics 下載完後 匯入檔案就可以看見類似一個這樣的監控介面
image
最上面這一行是模板變數,可以動態選擇
image
點選設定按鈕,選擇Variables,點選New可以新增變數
image
點選title選擇Edit可以進行編輯
image
這裡編寫PromQL語句
image

監控報警

配置發件郵箱

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
複製程式碼

配置收件人

image
可以新增多個收件人,以“;”分隔
image
最後點選Send Test 可以收到一封測試郵件,配置成功
image

監控指標

需要注意的是,Prometheus不支援帶有模版變數的監控設定報警,否則會提示“Template variables are not supported in alert queries”

監控示例: 監控CPU使用率 PromQL:

system_cpu_usage{instance="例項地址", job="任務名稱"}
複製程式碼

image
建立報警
image
這裡配置的是當CPU使用率超過1%則發出報警
image
新增報警通知郵箱以及報警的描述資訊
image
儲存之後,沒過多久就收到了報警通知
image

感謝閱讀,如有錯誤,望指正!

參考資料

相關文章