SpringBoot+Prometheus采集Metrics指标数据

news2024/12/26 11:40:18

简介

本文介绍在springboot3.x里配置启用系统指标监控功能,来监视系统各项Metrics指标,从而实时了解应用的运行健康状态,通过promtheus服务提供数据收集与指标可视化方案;

Metrics指标

metrics指标表示应用程序代码运行中提供的多维度指标数据,每一条指标数据通常由时间序列及一组标签键值对结构数据组成,常见的运行维度指标有:服务响应时间,HTTP请求量,CPU利用率,内存使用大小,磁盘读写大小,JVM内存使用率等等;

Spring Boot Actuator为Micrometer提供依赖管理和自动配置,Micrometer 是一个支持众多监控系统,并提供应用程序的可观察性度量指标数据组件;

Micrometer官方描述为计时器、计量器、计数器、分布摘要和长任务计时器提供供应商中立的接口,并具有维度数据模型,当与维度监控系统配合使用时,可以有效访问特定的命名指标,并具有向下钻取的能力跨越它的维度。

SpringBoot启用metrics

在springboot生态体系spring-boot-starter-actuator组件中已集成相关Metrics指标配置与服务,可以方便支持从 Spring Boot 应用程序中获取应用程序可观察性指标。

相关的配置与使用方式,在springboot官方文档中都有进行描述;详情参见:Production-ready Features

以一个springboot3.x项目做为示例,演示如何使用metrics指标服务,并对接到prometheus中做可观察性指标展示;

项目信息:springboot.3.1.0 + jdk17

pom.xml

创建任意一个springboot项目,引入以下pom配置项

<properties>
    <maven.compiler.source>17</maven.compiler.source>
    <maven.compiler.target>17</maven.compiler.target>
    <java.version>17</java.version>
</properties>

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>3.1.0</version>
    <relativePath/> <!-- lookup parent from repository -->
</parent>

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-webflux</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-actuator</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-configuration-processor</artifactId>
        <optional>true</optional>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>io.projectreactor</groupId>
        <artifactId>reactor-test</artifactId>
        <scope>test</scope>
    </dependency>
    <!-- prometheus依赖 -->
    <dependency>
        <groupId>io.micrometer</groupId>
        <artifactId>micrometer-registry-prometheus</artifactId>
        <version>1.11.0</version>
    </dependency>
</dependencies>

application.yml

# 本地服务访问
server:
  # 服务端口
  port: 8080
  # 服务IP
  address: 0.0.0.0

spring:
  application:
    # 应用服务名
    name: testDemo

# 是否启用springboot的debug调试模式,会打印详细日志信息
debug: false

# 开启健康检查
management:
  # 自定义管理服务地址和端口,默认和应用程序地址端口一致
#  server:
#    port: 8081
#    address: 0.0.0.0
  endpoint:
    shutdown:
      enabled: true
    health:
      show-details: always
  endpoints:
    web:
      exposure:
        # 开启端点,*表示开启所有
        include:
          - '*'
        # 某些端点除外,不做开启
        exclude:
          - env
          - beans
      # 跨域配置
      cors:
        # 开放所有域访问
        allowed-origins:
          - '*'
  metrics:
    # 指标采集标签名
    tags:
      application: ${spring.application.name}
  # 启用对接prometheus服务采集指标数据
  prometheus:
    metrics:
      export:
        enabled: true

ApplicationStart.java

@SpringBootApplication
public class ApplicationStart {
    public static void main(String[] args) {
        SpringApplication.run(ApplicationStart.class, args);
    }
}

浏览器访问

启动springboot程序后,通过以下URL在浏览器中打开

http://127.0.0.1:8080/actuator

查看已开启的端点与端点数据展示链接

{
    "_links": {
        "self": {
            "href": "http://127.0.0.1:8080/actuator",
            "templated": false
        },
        "caches-cache": {
            "href": "http://127.0.0.1:8080/actuator/caches/{cache}",
            "templated": true
        },
        "caches": {
            "href": "http://127.0.0.1:8080/actuator/caches",
            "templated": false
        },
        "health": {
            "href": "http://127.0.0.1:8080/actuator/health",
            "templated": false
        },
        "health-path": {
            "href": "http://127.0.0.1:8080/actuator/health/{*path}",
            "templated": true
        },
        "info": {
            "href": "http://127.0.0.1:8080/actuator/info",
            "templated": false
        },
        "conditions": {
            "href": "http://127.0.0.1:8080/actuator/conditions",
            "templated": false
        },
        "shutdown": {
            "href": "http://127.0.0.1:8080/actuator/shutdown",
            "templated": false
        },
        "configprops": {
            "href": "http://127.0.0.1:8080/actuator/configprops",
            "templated": false
        },
        "configprops-prefix": {
            "href": "http://127.0.0.1:8080/actuator/configprops/{prefix}",
            "templated": true
        },
        "loggers": {
            "href": "http://127.0.0.1:8080/actuator/loggers",
            "templated": false
        },
        "loggers-name": {
            "href": "http://127.0.0.1:8080/actuator/loggers/{name}",
            "templated": true
        },
        "heapdump": {
            "href": "http://127.0.0.1:8080/actuator/heapdump",
            "templated": false
        },
        "threaddump": {
            "href": "http://127.0.0.1:8080/actuator/threaddump",
            "templated": false
        },
        "prometheus": {
            "href": "http://127.0.0.1:8080/actuator/prometheus",
            "templated": false
        },
        "metrics-requiredMetricName": {
            "href": "http://127.0.0.1:8080/actuator/metrics/{requiredMetricName}",
            "templated": true
        },
        "metrics": {
            "href": "http://127.0.0.1:8080/actuator/metrics",
            "templated": false
        },
        "scheduledtasks": {
            "href": "http://127.0.0.1:8080/actuator/scheduledtasks",
            "templated": false
        },
        "mappings": {
            "href": "http://127.0.0.1:8080/actuator/mappings",
            "templated": false
        }
    }
}

安装prometheus

prometheus是一个开源监控系统,用于收集和聚合指标作为时间序列数据,它前身是SoundCloud的警告工具包。

prometheus通过抓取或轮询获取各个应用程序实例的指标。Spring Boot 提供了一个执行器端点/actuator/prometheus输出数据格式,以提供prometheus服务抓取。

下载

Download | Prometheus

prometheus支持windows环境安装与使用,本文采用prometheus-2.37.0(windows-amd64)版本做为演示使用;

prometheus.yml

解压下载包后,进入prometheus解压根目录,编辑prometheus.yml配置,添加拉取的springboot应用服务配置;

# my global config
global:
  scrape_interval: 15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.
  evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute.
  # scrape_timeout is set to the global default (10s).

# Alertmanager configuration
alerting:
  alertmanagers:
    - static_configs:
        - targets:
          # - alertmanager:9093

# Load rules once and periodically evaluate them according to the global 'evaluation_interval'.
rule_files:
  # - "first_rules.yml"
  # - "second_rules.yml"

# A scrape configuration containing exactly one endpoint to scrape:
# Here it's Prometheus itself.
scrape_configs:
  # The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
  - job_name: "prometheus"
    # metrics_path defaults to '/metrics'
    # scheme defaults to 'http'.
    static_configs:
      - targets: ["localhost:9090"]
  # 增加spring任务节点,从/actuator/prometheus拉取目标指标数据
  - job_name: "spring"
    metrics_path: "/actuator/prometheus"
    static_configs:
      - targets: ["localhost:8080"]

浏览器访问

完成prometheus.yml配置后,直接双击prometheus.exe程序运行服务;服务启动完毕后,通过以下URL在浏览器中访问:

http://127.0.0.1:9090/

点击 “菜单栏》Status》Targets” 查看已配置并启用的采集端点应用

Metrics指标跟踪

点击菜单栏的“Graph”项,在搜索框中输入jvm,则会自动联想多个带有jvm内容的可观察性指标;

我们以常见的java应用程序内存使用为例,选择jvm_memory_used_bytes,观察应用服务运行过程中的jvm内存使用情况,进行实时监控以便及时了解应用服务运行状况,为应用服务提供有效的健康跟踪方案;

Grafana大盘展示

由于metrics维度指标众多,通过prometheus服务采集后,通过数据指标转化成可观察性图形,为应用程序运维提供了合适的监控技术与管理平台,同时也可以将prometheus采集的指标输出到第三方各类平台上进行展示,比如运维中常见的Grafana,提供了许多丰富的图标插件,高大上的的漂亮UI,以及Grafana官网第三方上传的展示模板,可以非常便捷的套用开放模板后立即呈现出可视化监控图形界面;

  • 注:此处以一个已有的Grafana服务为例,不额外描述Grafana安装过程,安装请自行百度;

默认在explore界面查找指标展示;

添加SpringBoot监控大盘,官方有很多共享的仪表盘资源可下载,从而减少自已不熟悉仪表盘的配置与脚本,避免无法操作出想要的效果,通过获得第三方共享资源可以快速进行展示。

Dashboards | Grafana Labs

以下为共享ID:12900 (SpringBoot APM Dashboard)

在共享大盘页面复制共享ID后,在Grafana》Dashboards浏览界面,点击import按钮进入导入共享资源界面;

输入共享大盘ID:12900,点击load后,进入大盘配置盘面,底部的Prometheus选择已安装的Prometheus数据源选择(如没有,需要先在插件库中提前安装);

导入共享大盘后,进入到大盘展示界面,开始加载Prometheus监控的维度指标数据,通过各种仪表盘进行详细展示;

到此,一个完整的springboot项目从集成metrics指标组件,到Prometheus监控服务搭建,到最后Grafana大盘仪表展示流程结束;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/693418.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【JavaWeb】前端之CSS基础认知

目录 前言 1、CSS基本语法规范 2、向HTML中引入CSS的方式 2.1、内部样式 2.2、外部样式 2.3、内联样式 3、CSS选择器 3.1、基础选择器 3.1.1、标签选择器 3.1.2、类选择器 3.1.3、id选择器 3.1.4、通配符选择器 3.2、复合选择器 3.2.1、后代选择器 4、CSS常用元素…

leetcode514. 自由之路(java)

自由之路 leetcode514. 自由之路题目描述解题思路代码演示 动态规划专题 leetcode514. 自由之路 来源&#xff1a;力扣&#xff08;LeetCode&#xff09; 链接&#xff1a;https://leetcode.cn/problems/freedom-trail 题目描述 电子游戏“辐射4”中&#xff0c;任务 “通向自由…

深入浅出设计模式 - 工厂模式

博主介绍&#xff1a; ✌博主从事应用安全和大数据领域&#xff0c;有8年研发经验&#xff0c;5年面试官经验&#xff0c;Java技术专家✌ Java知识图谱点击链接&#xff1a;体系化学习Java&#xff08;Java面试专题&#xff09; ​ &#x1f495;&#x1f495; 感兴趣的同学可…

目标检测舰船数据集整合

一、光学数据集 1、 DIOR 数据集(已下载yolo版本)&#xff08;论文中提到过&#xff09; “DIOR”是一个用于光学遥感图像目标检测的大规模基准数据集。数据集包含23463个图像和192472个实例&#xff0c;涵盖20个对象类。这20个对象类是飞机、机场、棒球场、篮球场、桥梁、烟囱…

CSS 边框盒子

文章目录 边框盒子 边框盒子 提示&#xff1a;这里可以添加本文要记录的大概内容&#xff1a; 默认的盒子类型是内容盒子&#xff1a;content-box 在内容盒子中&#xff0c;width和height是内容尺寸 盒子整体的尺寸内容的尺寸两个边框两个内边距 css3引入了新的盒子类型&…

Linux——对动静态库的优缺点和底层剖析对比

目录 静态库底层剖析&#xff1a; 所以静态库的优缺点总结&#xff1a; 动态库底层剖析&#xff1a; 所以使用动态库的优缺点剖析&#xff1a; 静态库底层剖析&#xff1a; 如上图&#xff1a;file1.exe被加载到了内存&#xff0c;成为了进程&#xff0c;因为代码中都有pri…

【Docker】docker安装配置Jenkins

docker 安装 Jenkins #拉镜像 docker pull jenkins/jenkins#创建卷(volume) docker volume create jenkins_home#制作容器并启动 docker run -d \ -p 8080:8080 \ -p 50000:50000 \ -v jenkins_home:/var/jenkins_home \ -v /usr/lib/jvm/java-8-openjdk-amd64:/usr/local/java…

IMX6ULL系统移植篇-镜像烧写方法

一. 烧录镜像简介 本文我们就来学习&#xff1a;windows 系统下烧录镜像的方法。 如何使用 NXP 官方提供的 MfgTool 工具通过 USB OTG 口来 烧写系统。 二. windows下烧录镜像 1. 烧录镜像前准备工作 &#xff08;1&#xff09;从开发板上拔下 SD卡。 &#xff08;2…

SpringBoot中如何优雅的统一全局返回格式与处理系统异常?

在领域驱动设计&#xff08;DDD&#xff09;中&#xff0c;接口层主要负责处理与外部系统的交互&#xff0c;包括接收用户或外部系统的请求&#xff0c;调用应用层服务处理请求&#xff0c;以及将处理结果返回给请求方。 我发现一些代码中&#xff0c;接口的返回值类型众多&am…

chatgpt赋能python:Python语言单词大全:从入门到精通

Python语言单词大全&#xff1a;从入门到精通 Python是一种高级编程语言&#xff0c;适用于各种应用领域&#xff0c;如数据科学、机器学习、网站开发和自动化脚本编写等。Python语言有其内置的语法和功能&#xff0c;我们将在本文中逐一介绍和解释。 1. Python中最基本的单词…

K8S集群安全之安全机制

1. 安全机制说明&#xff1a; Kubernetes作为一个分布式集群的管理工具&#xff0c;保证集群的安全性是其一个重要的任务。API Server是集群内部各个组件通信的中介&#xff0c;也是外部控制的入口。所以Kubernetes的安全机制基本就是围绕保护APIServer来设计的。Kubernetes使…

小程序实现双列布局

目录 1 双列布局2 采用流式布局3 采用网格布局总结 小程序中双列布局是一个常见的效果&#xff0c;比如在电商小程序的商品推荐&#xff0c;效果如下&#xff1a; 1 双列布局 双列布局的话特点是随着数据的增多&#xff0c;我们会出现偶数或者奇数的问题&#xff0c;如果是偶…

【Data Studio 2.1.0连接openGauss2.1.0】

Data Studio 2.1.0连接openGauss2.1.0 一、实验环境说明二、配置客户端接入方式三、Data Studio2.1.0连接openGauss数据库 一、实验环境说明 openGauss2.1.0版本Data Studio 2.1.0 版本 二、配置客户端接入方式 【以下操作是omm用户进行】 修改配置文件pg_hba.conf&#xf…

12--Gradle进阶 - Gradle任务的类型

12--Gradle进阶 - Gradle任务的类型 任务类型 前面我们定义的task 都是DefaultTask 类型的,如果要完成某些具体的操作完全需要我们自己去编写gradle 脚本&#xff0c;势必有些麻烦&#xff0c;那有没有一些现成的任务类型可以使用呢&#xff1f;有的&#xff0c;Gradle 官网给出…

C. Tenzing and Balls - dp

分析&#xff1a; 补题。当时不明白的点是如何快速查询相同元素的下标&#xff0c;可以用last[a[i]]表示与a[i]相同的最近的一个数的下标&#xff0c;可以遍历数组的同时实现下标的查询和变化&#xff0c;不断通过遍历来更新last[a[i]]的值&#xff0c;即last[a[i]]i。 然后是状…

衡石bi的几种跳转方式

衡石bi的几种跳转方式 通过点击表格的单元格跳转(带参) 点击首页的表格里任意一行的单元格跳转到明细页的企业相关数据 这两个数据集都是有一个info_uuid的主键&#xff0c;我们知道每个控件都可以设置交互的方式进行跳转应用内的仪表盘。 点击首页里要设置跳转的控件右上角的…

maven基础教程

一、安装moven 1、下载maven包 首先到maven官网下载安装包&#xff0c;解压到本地目录&#xff0c;然后配置环境变量。 maven下载地址&#xff1a;https://maven.apache.org/download.cgi 2、配置环境变量 然后打开环境变量&#xff0c;添加 MAVEN_HOME 系统变量&#xff…

JVM-jvisualvm性能监控可视化工具使用与eden-s0-s1分配分析

目录 第一步&#xff1a;安装jvisualvm 第二步&#xff1a;安装VisualvmGc插件 方式一&#xff1a;jvisualvm工具直接下载安装 方式二&#xff1a;去官网下载导入安装 总结 第三步&#xff1a;idea安装VisualvM Launcher插件 第四步&#xff1a;演示young中eden、s0、s1垃…

轻量级数据交换格式:jsoncpp

"这不属于我&#xff0c;因为沉默背后&#xff0c;也有冲动" 一、认识json (1) 为什么有那么多的数据交换格式&#xff1f; 比如说&#xff0c;现在我有下面的数据: #include <iostream> #include <string>int main() {std::string name "张三&q…

比较两个突出的node.js框架:koa和express

目录 一、Koa 和 Express 的介绍 二、Koa 和 Express 的区别 1.异步编程方式不同 2.错误处理方式不同 三、Koa 和 Express 的优缺点 1.Express 的优点 2.Express 的缺点 3.Koa 的优点 4.Koa 的缺点 总结 接上文讲述了 koa框架&#xff0c;这边文章比较一下这两个突出…