Prometheus+Grafana可視化監控SpringBoot項目

原文地址:https://xeblog.cn/articles/7git

Prometheus簡介

簡史

Prometheus受啓發於Google的Brogmon監控系統(類似的Kubernetes是從Google的Brog系統演變而來),從2012年開始由前Google工程師在Soundcloud以開源軟件的形式進行研發,而且於2015年早期對外發布早期版本。2016年5月繼Kubernetes以後成爲第二個正式加入CNCF基金會的項目,同年6月正式發佈1.0版本。2017年末發佈了基於全新存儲層的2.0版本,能更好地與容器平臺、雲平臺配合。web

架構

image

特色

  • 多維的數據模型(基於時間序列的k/v鍵值對)。
  • 靈活的查詢及聚合語句(PromQL)。
  • 不依賴分佈式存儲,節點自治。
  • 基於HTTP的pull模式採集時間序列數據。
  • 可使用pushgateway(prometheus的可選中間件)實現push模式。
  • 可使用動態服務發現或靜態配置採集的目標機器。
  • 支持多種圖形及儀表盤。

相關概念

數據模型

Prometheus 存儲的是時序數據, 即按照相同時序(相同的名字和標籤),以時間維度存儲連續的數據的集合。spring

監控樣本vim

# 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.2358726454409068三、0.0、557.0表示該監控樣本的具體值

時序類型

Prometheus 時序數據分爲 Counter, Gauge, Histogram, Summary 四種類型。api

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分佈式

新增節點ide

- job_name: xeblog-api
    metrics_path: /actuator/prometheus
    static_configs:
    - targets: ['127.0.0.1:8080’]
複製代碼

job_name:任務名稱 metrics_path: 指標路徑 targets:實例地址/項目地址,可配置多個函數

運行Prometheus

進入Prometheus安裝根目錄 ./prometheus 運行成功日誌 spring-boot

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

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

參考資料

相關文章
相關標籤/搜索