Prometheus监控Spring Boot应用,自定义应用监控指标

本文涉及的产品
可观测可视化 Grafana 版,10个用户账号 1个月
可观测监控 Prometheus 版,每月50GB免费额度
简介: Prometheus监控Spring Boot应用,自定义应用监控指标

使用Actuator,Micrometer,Prometheus和Grafana监控Spring Boot应用程序,自定义应用监控指标。

应用程序在生产环境中运行时,监控其运行状况是非常必要的。通过实时了解应用程序的运行状况,才能在问题出现之前得到警告,也可以通监控应用系统的运行状况,优化性能,提高运行效率。

一、监控Spring Boot应用

下面我们以Spring Boot 为例,演示Prometheus如何监控应用系统。

1.1 项目环境:

Spring Boot 2.3.7.release

micrometer-registry-prometheus 1.5.9

需要注意Spring Boot 和 micrometer的版本号。不同的micrometer版本支持的Spring Boot 版本也不相同。

1.2 Spring Boot集成 Micrometer

step1:首先创建Spring Boot项目,首先添加依赖如下:

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-actuator</artifactId>
    </dependency>
    <dependency>
        <groupId>io.micrometer</groupId>
        <artifactId>micrometer-registry-prometheus</artifactId>
        <version>1.5.9</version>
    </dependency>
</dependencies>

这里引入了 io.micrometer 的 micrometer-registry-prometheus 依赖以及 spring-boot-starter-actuator 依赖,因为该包对 Prometheus 进行了封装,可以很方便的集成到 Spring Boot 工程中。

需要注意Spring Boot 和 micrometer的版本号。不同的micrometer版本支持的Spring Boot 版本也不相同。

step2:修改配置文件,打开Actuator监控端点

在 application.yml 中配置如下:

spring:
  application:
    name: PrometheusApp
#Prometheus springboot监控配置
management:
  endpoints:
    web:
      exposure:
        include: '*'
  metrics:
    export:
      prometheus:
        enabled: true
    tags:
      application: ${spring.application.name} # 暴露的数据中添加application label

上面的配置中, include=* 配置为开启 Actuator 服务,Spring Boot Actuator 自带了一个/actuator/Prometheus 的监控端点供给Prometheus 抓取数据。不过默认该服务是关闭的,所以,使用该配置将打开所有的 Actuator 服务。

step3:最后,启动服务,然后在浏览器访问 http://10.2.1.159:8080/actuator/prometheus ,就可以看到服务的一系列不同类型 metrics 信息,例如 http_server_requests_seconds summary、jvm_memory_used_bytes gauge、jvm_gc_memory_promoted_bytes_total counter 等等。

到此,Spring Boot 工程集成 Micrometer 就已经完成,接下里就要与 Prometheus 进行集成了。

1.3 将应用添加到Prometheus

前面Spring Boot应用已经启动成功,并暴露了/actuator/Prometheus的监控端点。接下来我们将此应用添加到Prometheus。

step1:首先,修改 Prometheus 的配置文件 prometheus.yml ,添加上边启动的服务地址来执行监控。vim /usr/local/etc/prometheus.yml 。具体配置如下:

global:
  scrape_interval: 15s
scrape_configs:
  - job_name: "prometheus"
    # metrics_path defaults to '/metrics'
    # scheme defaults to 'http'.
    static_configs:
      - targets: ["localhost:9090"]
  # 采集node exporter监控数据
  - job_name: 'node'
    static_configs:
      - targets: ['10.2.1.231:9527']
  - job_name: 'prometheusapp'
    metrics_path: '/actuator/prometheus'
    static_configs:
      - targets: ['10.2.1.159:8080']

上面的prometheusapp 就是前面创建的Spring Boot 应用程序,也就是 Prometheus 需要监控的服务地址。

step2:然后,重启 Prometheus 服务,查看 Prometheus UI 界面确认 Target 是否添加成功。

我们也可以在 Graph 页面执行一个简单的查询,也是获取 PrometheusApp服务的相关性能指标值。

二、使用 Grafana Dashboard 展示应用数据

前面我们已经在Prometheus正常监控Spring Boot应用的JVM性能指标数据,接下来,我们配置 Grafana Dashboard 来优雅直观的展示出来这些监控指标。

2.1 下载Grafana模板

之前介绍过Grafana 使用Dashboard 模板展示Prometheus的数据,这里就不再重复了,直接在https://grafana.com/dashboards 下载Spring Boot的模板(这里使用的是编号4701)。

2.2 导入模板

下载成功后直接在Dashboards | Import 将json模板导入到Grafana 即可。

2.3 查看应用信息

导入完毕后,就可以看到 JVM的各项监控指标,如果有多个应用,可以通过Application选择我们想要查看的应用即可。

三、自定义监控指标

前面我们在Spring Boot项目中集成Actuator和Micrometer实现了Spring Boot应用监控,基本上覆盖 JVM 各个层间的参数指标,并且配合 Grafana Dashboard 模板基本可以满足我们日常对Spring Boot应用的监控。

但是,对于核心业务改是否也能够监控它们的执行情况呢?答案是肯定的,Micrometer支持自定义监控指标,实现业务方面的数据监控。例如统计访问某一个 API 接口的请求数,统计实时在线人数、统计实时接口响应时间等。

接下来,我们以监控所有API请求次数为例,演示如何自定义监控指标并展示到Grafana 。

3.1 添加指标统计

step1:首先,在之前的Spring Boot项目中,创建CustomMetricsController 控制器,具体示例代码如下:

@RestController
@RequestMapping("/custom/metrics")
public class CustomMetricsController {
    @Autowired
    private MeterRegistry meterRegistry;
    /**
     * 订单请求测试
     */
    @GetMapping("/order/{appId}")
    public String orderTest(@PathVariable("appId") String appId) {
        Counter.builder("metrics.request.count").tags("apiCode", "order").register(meterRegistry).increment();
        return "order请求成功:" +appId ;
    }
    /**
     * 产品请求测试
     */
    @GetMapping("/product/{appId}")
    public String productTest(@PathVariable("appId") String appId) {
        Counter.builder("metrics.request.count").tags("apiCode", "product").register(meterRegistry).increment();
        return "product请求成功:" +appId ;
    }
}

如上所示,使用Counter 计数器定义了自定义指标参数:metrics_request_count,来统计相关接口的请求次数。这里只是测试,所以直接在Controller类中进行统计。实际项目项目中,应该是使用AOP,或是拦截器的方式统计所有接口的请求信息,减少这种非关键代码的侵入性。

step2: 验证测试,重新启动Spring Boot 应用。分别访问:http://10.2.1.159:8080/custom/metrics/order/{appId}http://10.2.1.159:8080/custom/metrics/product/{appId} 接口,然后在 Promtheus 中查看自定义的指标数据:metrics_request_count_total

如上图所示,我们自定义的监控指标已经在Prometheus中显示了,说明我们在应用中配置的自定义监控指标已经成功。

3.2 创建Grafana数据面板

接下来,我们在 Grafana Dashboard展示我们自定义的监控指标。其实也非常简单,创建一个新的数据面板Panel 并添加 Query 查询,相关的监控指标就图形化展示出来了。接下来演示在Grafana上创建数据面板。

step1:首先,页面的右上角的Add panel | Add a new Panel,添加一个 Panel,并命名为:统计接口请求次数。可以选择选择想要展示的图形,如:连线图、柱状图等。

step2:然后,在panel的下方增加 Query 查询,选择数据源为之前定义的Prometheus-1,指标选择之前自定义的指标数据:metrics_request_count_total,点击applay 保存之后,返回首页就可以看到刚添加的 panel。具体如下图所示:

如上图所示,上面我们新增加的panel中成功显示了我们自定义的监控数据。继续请求之前的应用接口,数据会正常刷新。说明Grafana上的指标数据展示配置成功。


相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
相关文章
|
26天前
|
JavaScript 安全 Java
如何使用 Spring Boot 和 Ant Design Pro Vue 实现动态路由和菜单功能,快速搭建前后端分离的应用框架
本文介绍了如何使用 Spring Boot 和 Ant Design Pro Vue 实现动态路由和菜单功能,快速搭建前后端分离的应用框架。首先,确保开发环境已安装必要的工具,然后创建并配置 Spring Boot 项目,包括添加依赖和配置 Spring Security。接着,创建后端 API 和前端项目,配置动态路由和菜单。最后,运行项目并分享实践心得,包括版本兼容性、安全性、性能调优等方面。
130 1
|
10天前
|
JavaScript 安全 Java
如何使用 Spring Boot 和 Ant Design Pro Vue 构建一个具有动态路由和菜单功能的前后端分离应用。
本文介绍了如何使用 Spring Boot 和 Ant Design Pro Vue 构建一个具有动态路由和菜单功能的前后端分离应用。首先,创建并配置 Spring Boot 项目,实现后端 API;然后,使用 Ant Design Pro Vue 创建前端项目,配置动态路由和菜单。通过具体案例,展示了如何快速搭建高效、易维护的项目框架。
88 62
|
8天前
|
JavaScript 安全 Java
如何使用 Spring Boot 和 Ant Design Pro Vue 构建一个前后端分离的应用框架,实现动态路由和菜单功能
本文介绍了如何使用 Spring Boot 和 Ant Design Pro Vue 构建一个前后端分离的应用框架,实现动态路由和菜单功能。首先,确保开发环境已安装必要的工具,然后创建并配置 Spring Boot 项目,包括添加依赖和配置 Spring Security。接着,创建后端 API 和前端项目,配置动态路由和菜单。最后,运行项目并分享实践心得,帮助开发者提高开发效率和应用的可维护性。
21 2
|
27天前
|
JavaScript 安全 Java
如何使用 Spring Boot 和 Ant Design Pro Vue 构建一个具有动态路由和菜单功能的前后端分离应用
【10月更文挑战第8天】本文介绍了如何使用 Spring Boot 和 Ant Design Pro Vue 构建一个具有动态路由和菜单功能的前后端分离应用。首先,通过 Spring Initializr 创建并配置 Spring Boot 项目,实现后端 API 和安全配置。接着,使用 Ant Design Pro Vue 脚手架创建前端项目,配置动态路由和菜单,并创建相应的页面组件。最后,通过具体实践心得,分享了版本兼容性、安全性、性能调优等注意事项,帮助读者快速搭建高效且易维护的应用框架。
38 3
|
28天前
|
JavaScript 安全 Java
如何使用 Spring Boot 和 Ant Design Pro Vue 构建一个具有动态路由和菜单功能的前后端分离应用
【10月更文挑战第7天】本文介绍了如何使用 Spring Boot 和 Ant Design Pro Vue 构建一个具有动态路由和菜单功能的前后端分离应用。首先,通过 Spring Initializr 创建 Spring Boot 项目并配置 Spring Security。接着,实现后端 API 以提供菜单数据。在前端部分,使用 Ant Design Pro Vue 脚手架创建项目,并配置动态路由和菜单。最后,启动前后端服务,实现高效、美观且功能强大的应用框架。
34 2
|
28天前
|
搜索推荐 Java UED
SpringBoot 自定义启动画面:打造个性化应用启动体验
【10月更文挑战第7天】在软件开发中,细节往往能够体现一个团队的专业性和对用户体验的关注。SpringBoot作为快速构建Spring应用的框架,其简洁的启动流程和强大的功能深受开发者喜爱。然而,默认的启动画面可能略显单调,无法充分展示应用的特色或品牌。本文将详细介绍如何为SpringBoot应用自定义启动画面,让应用在启动时就能给人留下深刻印象。
47 1
|
15天前
|
存储 Java 数据管理
强大!用 @Audited 注解增强 Spring Boot 应用,打造健壮的数据审计功能
本文深入介绍了如何在Spring Boot应用中使用`@Audited`注解和`spring-data-envers`实现数据审计功能,涵盖从添加依赖、配置实体类到查询审计数据的具体步骤,助力开发人员构建更加透明、合规的应用系统。
|
3月前
|
运维 Java Nacos
Spring Cloud应用框架:Nacos作为服务注册中心和配置中心
Spring Cloud应用框架:Nacos作为服务注册中心和配置中心
|
5月前
|
Java 应用服务中间件 Maven
ContextLoaderListener在Spring应用中的作用与配置方法
ContextLoaderListener在Spring应用中的作用与配置方法
|
Java 开发者 微服务
深入解析@SpringBootApplication注解:简化Spring Boot应用的配置
在现代的Java开发中,Spring Boot框架成为了构建微服务和快速开发应用的首选。Spring Boot的成功部分归功于其简化的配置和约定大于配置的理念。而`@SpringBootApplication`注解则是Spring Boot应用的入口,负责自动配置和启动Spring Boot应用。本文将深入探讨`@SpringBootApplication`注解的作用、用法,以及在Spring Boot应用中的应用场景。
1084 1