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数据源
查看某些指标
配置监控面板
主机,数据库等中间件的监控同理配置