Prometheus+SpringBoot应用监控全过程(详解)

本文详细介绍了Prometheus监控Spring Boot应用的全过程,包括Prometheus的基本概念、数据模型、安装配置,以及如何利用Node Exporter添加目标。此外,还讲述了如何配置Spring Boot应用以供Prometheus抓取指标,并展示了如何使用Grafana进行可视化展示。

1. Prometheus是什么

Prometheus是一个具有活跃生态系统的开源系统监控和告警工具包。一言以蔽之,它是一套开源监控解决方案。

Prometheus主要特性:

  • 多维数据模型,其中包含由指标名称和键/值对标识的时间序列数据
  • PromQL,一种灵活的查询语言
  • 不依赖分布式存储; 单服务器节点是自治的
  • 时间序列收集通过HTTP上的pull模型进行
  • 通过中间网关支持推送(push)时间序列
  • 通过服务发现或静态配置发现目标
  • 支持多种模式的图形和仪表盘

为什么用pull(拉取)而不用push(推送)呢?

因为,pull有以下优势:

  • 进行更改时,可以在笔记本电脑上运行监控
  • 可以更轻松地判断目标是否下线
  • 可以手动转到目标并使用Web浏览器检查其运行状况

目标暴露HTTP端点,Prometheus服务端通过HTTP主动拉取数据。既然是服务端自己主动向目标拉取数据,那么服务端运行在本地(我们自己的电脑上)也是可以的,只要能访问目标端点即可,同时就像心跳检测一样可以判断目标是否下线,还有,服务端自己主动拉取,那么想拉取谁的数据就拉取谁的数据,因而可以随意切换拉取目标。

回想一下Skywalking是怎么做的,SkyWalking有客户端和服务端,需要在目标服务上安装探针(agent),探针采集目标服务的指标数据,上报给服务端OAP服务,这个对目标有一定的侵入性,不过可以接受。Prometheus不需要探针,可以借助push gateway来实现push效果。

对了,有个名词要先说清楚,metrics (译:度量,指标),个人更倾向于把它翻译成指标,后面说指标就是metrics

2. 基本概念

2.1. 数据模型

Prometheus基本上将所有数据存储为时间序列:具有时间戳的值流,它们属于同一个指标和同一组标记的维度。除了存储的时间序列外,Prometheus还可以生成临时派生的时间序列作为查询的结果。

Metric names and labels

Every time series is uniquely identified by its metric name and optional key-value pairs called labels.

每个时间序列都由它的指标名称和称为标签的可选键/值对唯一标识。

样本构成实际的时间序列数据。 每个样本包括:

  • 一个64位的浮点值
  • 一个毫秒时间戳

给定指标名称和一组标签,时间序列通常使用这种符号来标识:

<metric name>{<label name>=<label value>, ...}

例如,有一个时间序列,指标名称是api_http_requests_total,标签有method="POST"和handler="/messages",那么它可能被表示成这样:

api_http_requests_total{method="POST", handler="/messages"}

2.2. 指标类型

Counter

counter是一个累积量度,代表一个单调递增的计数器,其值只能增加或在重新启动时重置为零。例如,可以使用计数器来表示已服务请求数,已完成任务或错误的数量。

不要使用计数器来显示可以减小的值。例如,请勿对当前正在运行的进程数使用计数器,代替的应该使用量规。

Gauge

量规是一种指标,代表可以任意上下波动的单个数值。

量规通常用于测量值,例如温度或当前内存使用量,还用于可能上升和下降的“计数”,例如并发请求数。

Histogram

直方图对观察结果(通常是请求持续时间或响应大小)进行抽样,并在可配置的桶中对它们进行计数。它还提供了所有观测值的总和。

一个基础指标名称为<basename>的直方图在抓取期间会暴露多个时间序列:

  • 观察桶的累积计数器,表示为 <basename>_bucket{le="<upper inclusive bound>"}
  • 所有观测值的总和,表示为 <basename>_sum
  • 观察到的事件数量,表示为 <basename>_count

Summary

与直方图类似,摘要对观察结果(通常是请求持续时间和响应大小等内容)进行抽样分析。虽然它还提供了观测值的总数和所有观测值的总和,但它可以计算滑动时间窗口内的可配置分位数。

一个基础指标名称为<basename>的摘要在抓取期间暴露多个时间序列:

  • 观测事件的φ分位数(0≤φ≤1)流,表示为<basename>{quantile="<φ>"}
  • 所有观测值的总和,表示为 <basename>
### 依赖引入 在Spring Boot 3项目的`pom.xml`文件中添加相关依赖,以支持OpenTelemetry、Prometheus和Actuator等功能: ```xml <dependencies> <!-- Spring Boot Actuator for metrics --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> <!-- OpenTelemetry for tracing and metrics --> <dependency> <groupId>io.micrometer</groupId> <artifactId>micrometer-tracing-bridge-opentelemetry</artifactId> </dependency> <dependency> <groupId>io.opentelemetry</groupId> <artifactId>opentelemetry-exporter-prometheus</artifactId> </dependency> <!-- Prometheus support --> <dependency> <groupId>io.micrometer</groupId> <artifactId>micrometer-registry-prometheus</artifactId> </dependency> </dependencies> ``` ### 配置OpenTelemetry和Prometheus 在`application.properties`或`application.yml`中进行配置,启用OpenTelemetry和Prometheus相关功能: ```properties # Enable OpenTelemetry management.tracing.enabled=true # Configure OpenTelemetry exporter for Prometheus management.metrics.export.prometheus.enabled=true ``` ### 配置Prometheus服务 创建`prometheus.yml`文件,用于配置Prometheus如何采集Spring Boot应用的指标: ```yaml global: scrape_interval: 15s scrape_configs: - job_name: 'spring-boot-app' metrics_path: '/actuator/prometheus' static_configs: - targets: ['localhost:8080'] ``` 启动Prometheus服务,使用以下命令: ```sh prometheus --config.file=prometheus.yml ``` ### 配置Grafana 启动Grafana服务,登录Grafana控制台。在Grafana中添加Prometheus作为数据源,之后创建仪表盘,利用Grafana的可视化功能展示Prometheus采集的指标数据和OpenTelemetry的链路追踪数据。 ### 可选:集成Jaeger进行链路追踪可视化 若需要更强大的链路追踪可视化和分析功能,可集成Jaeger。添加Jaeger依赖: ```xml <dependency> <groupId>io.opentelemetry</groupId> <artifactId>opentelemetry-exporter-jaeger</artifactId> </dependency> ``` 配置Jaeger exporter: ```properties otel.traces.exporter=jaeger otel.exporter.jaeger.endpoint=http://localhost:14250 ``` ### 代码详解 Spring Boot 3.x官方推荐集成OpenTelemetry实现分布式追踪,替代Spring Cloud Sleuth,具有零侵入、轻量级、高性能的特点 [^2]。OpenTelemetry的Java Agent可自动插桩,降低接入成本,采集应用的Traces、Metrics和Logs数据。Prometheus采集这些指标数据,Grafana进行可视化展示。当Prometheus的指标告警时,可在Grafana面板上关联到Jaeger的链路追踪数据,方便定位问题 [^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值