1.prometheus工作原理:
Prometheus將指標收集并存儲為時間序列數據庫(時序數據庫),即指標信息與記錄它的時間戳一起存儲,以及稱為標簽的可選鍵值對。
特性:
具有由指標名稱和鍵/值對識別的時間序列數據的多維數據模型
·PromQL,一種利用此維度的靈活查詢語言
不依賴集中式存儲;單個服務器節點是自治的
時間序列收集通過http上的拉模型進行
通過中間網關支持推送時間序列
通過服務發現或靜態配置發現目標
多種圖形和儀表板支持模式
指標:
指標是通俗意義上的數值測量。時間序列是指記錄隨時間的變化。用戶想要衡量的指標因應用而異。對于Web 服務器,可能是請求時間;對于數據庫,可能是活動連接數或活動查詢數,等等
指標在了解應用程序為何以某種方式工作方面發揮著重要作用。假設您正在運行一個Web 應用程序,并發現它很慢。為了了解應用程序發生了什么,您需要一些信息。例如,當請求數量很高時,應用程序可能會變慢。如果您有請求計數指標,則可以確定原因并增加服務器數量以處理負載。
工作原理:
應用服務通過導出器暴露自己的指標,Prometheus定時去拉取導出器暴露的數據,然后數據會持久化落盤做時序數據庫存儲,客戶端如Grafana會通過PromQL查詢Prometheus中的指標數據。exporter導出器相當于一個Web應用,遵循Prometheus協議,導出器完成兩件事:拿到指標,然后封裝指標。
SpringBoot會自帶一個actuator,相當于導出器的功能,可以暴露監控指標
為了安全考慮,我們通常將監控服務部署在內網,部署架構如下:
2.SpringBoot整合Prometheus示例
1.新建SpringBoot項目并引入監控相關核心依賴
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId></dependency>
<!-- rometheus 注冊表實現,用于將應用的度量指標按照 Prometheus 的格式進行暴露。--><dependency><groupId>io.micrometer</groupId><artifactId>micrometer-registry-prometheus</artifactId><scope>runtime</scope></dependency>
2.配置application.yml
spring:application:name: spring-boot-prometheus-demo# 暴露所有監控指標
management:endpoints:web:exposure:include: "*"
3.查看指標
查看暴露的指標列表:
localhost:8080/actuator/metrics
查看某一詳細指標(上述路徑+具體指標):
localhost:8080/actuator/metrics/disk.free
刷新頁面,上述監控數據實時變化
查看prometheus格式的數據:
localhost:8080/actuator/prometheus
一條指標的格式:
3.Promethus+Grafana整合實戰整合
1.Docker部署項目
項目打jar包并編寫如下的Dockerfile文件:
# 一個鏡像就是一個小型linux系統
# 基礎運行環境
FROM openjdk:17# 把產品復制到運行環境的linux系統中 /app 目錄下,改名叫 boot.jar
COPY target/*.jar /app/boot.jar# 啟動占用端口
EXPOSE 9090# 應用啟動命令 'java -jar /app/boot.jar';
# CMD 可以被啟動的時候重新修改,、
# ENTRYPOINT(入口),不能被啟動的時候修改
ENTRYPOINT ["java","-jar","/app/boot.jar"]
將項目整體打成壓縮包并上傳到服務器,在服務解壓壓縮包并進入項目目錄
執行指令構建鏡像:
docker build -f Dockerfile -t boot-app:v1.0 .
根據鏡像起服務容器:
docker run -d -p 6379:9090 --name boot boot-app:v1.0
成功從外網訪問監控:
2.配置Prometheus
創建配置存放路徑
在此路徑下創建?prometheus.yml編寫配置內容:
global :
scrape_interval:15 #抓取配置
sevaluation_interval:15s #計算
scrape_configs:-job_name:'prometheus' #抓取自己指標static_configs:-targets:['localhost:9090']-job_name:'bootapp-exporter'metrics_path:'/actuator/prometheus' #指定抓取的路徑static_configs:-targets:['172.20.221.50:9090']# 注意改為服務器私有IP地址labels :appname:'bootapp
啟動prometheus
回到根目錄下創建compose.yaml文件,批量啟動應用:prometheus,grafana
name: prom
services:prometheus:image: prom/prometheuscontainer_name:prometheusrestart: alwaysvolumes -/app/prom/conf/prometheus.yml:/etc/prometheus/prometheus.yml-/etc/localtime:/etc/localtime:roports:-"6379:9090'networks:- backendgrafana :image: grafana/grafanacontainer_name:grafanarestart: alwaysvolumes:-/etc/localtime:/etc/localtime:rodepends_on:- prometheusports:-"3306:3306'networks:- backendnetworks:backendname: backend
批量啟動服務:
docker compose -f compose.yaml up -d
服務啟動,訪問promethus端口,進入promethus監控
登錄進入Grafana登錄頁面
配置promethus數據源
查看某些指標
配置監控面板
主機,數據庫等中間件的監控同理配置