Java服务端服务监控:Prometheus与Spring Boot Actuator的集成方式

 更新时间:2024年12月12日 11:01:25   作者:微赚淘客系统开发者@聚娃科技  
本文介绍了如何将Prometheus与SpringBootActuator集成,实现对Java服务端应用的监控,通过集成,可以利用Prometheus的强大监控能力,及时发现和解决性能问题

Prometheus与Spring Boot Actuator的集成

在现代Java服务端开发中,服务监控是确保系统稳定性和性能的关键。

Prometheus是一个开源的系统监控和警报工具,而Spring Boot Actuator提供了生产级别的监控功能。

将两者集成可以为Java应用提供强大的监控能力。

本文将介绍如何将Prometheus与Spring Boot Actuator集成,以及如何配置和使用它们进行服务监控。

1. 添加依赖

首先,需要在Spring Boot项目中添加Prometheus和Actuator的依赖。

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-actuator</artifactId>
    </dependency>
    <dependency>
        <groupId>io.prometheus</groupId>
        <artifactId>prometheus-client-spring-boot</artifactId>
        <version>0.10.0</version>
    </dependency>
</dependencies>

2. 配置Prometheus

在Spring Boot应用中配置Prometheus,以暴露监控指标。

import cn.juwatech.config.PrometheusConfig;
import org.springframework.context.annotation.Configuration;
import io.prometheus.client.exporter.common.TextFormat;
import io.prometheus.client.hotspot.DefaultExports;
import io.prometheus.client.spring.boot.PrometheusMetricsExportAutoConfiguration;

@Configuration
public class PrometheusConfiguration extends PrometheusMetricsExportAutoConfiguration.MetricsExportConfiguration {

    @Override
    public void configureMetricsExport(io.prometheus.client.exporter.MetricsServlet metricsServlet) {
        super.configureMetricsExport(metricsServlet);
        metricsServlet.setServletPath("/metrics");
    }

    @Override
    public void configureDefaultExports() {
        super.configureDefaultExports();
        DefaultExports.initialize();
    }
}

3. 集成Spring Boot Actuator

Spring Boot Actuator提供了多种监控端点,可以与Prometheus集成以暴露这些端点。

import org.springframework.boot.actuate.autoconfigure.metrics.export.prometheus.PrometheusMetricsExportAutoConfiguration;
import org.springframework.context.annotation.Configuration;
import org.springframework.boot.actuate.autoconfigure.web.server.WebManagementContextResolver;
import org.springframework.boot.actuate.endpoint.web.WebEndpointFilter;

@Configuration
@WebManagementContextResolver
public class ActuatorConfiguration extends PrometheusMetricsExportAutoConfiguration {

    @Override
    public void configureWebEndpointFilters(WebEndpointFilter[] filters) {
        super.configureWebEndpointFilters(filters);
    }
}

4. 定义自定义指标

除了内置的监控指标,我们还可以定义自定义指标来满足特定的监控需求。

import io.prometheus.client.Counter;
import io.prometheus.client.Gauge;
import org.springframework.stereotype.Component;

@Component
public class CustomMetrics {

    private static final Counter requestsCounter = Counter.build()
            .name("my_requests_total")
            .help("Total requests.")
            .register();

    private static final Gauge responseSizeGauge = Gauge.build()
            .name("my_response_size_bytes")
            .help("Response size in bytes.")
            .register();

    public void recordRequest(int responseSize) {
        requestsCounter.inc();
        responseSizeGauge.set(responseSize);
    }
}

5. 使用自定义指标

在应用中使用自定义指标来记录监控数据。

import cn.juwatech.service.MyService;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class MyController {

    private final CustomMetrics customMetrics;
    private final MyService myService;

    public MyController(CustomMetrics customMetrics, MyService myService) {
        this.customMetrics = customMetrics;
        this.myService = myService;
    }

    @GetMapping("/my-service")
    public String myServiceEndpoint() {
        String response = myService.performAction();
        int responseSize = response.getBytes().length;
        customMetrics.recordRequest(responseSize);
        return response;
    }
}

6. 配置Prometheus服务器

配置Prometheus服务器以抓取Spring Boot应用暴露的监控指标。

global:
  scrape_interval: 15s

scrape_configs:
  - job_name: 'spring-boot-application'
    scrape_interval: 5s
    static_configs:
      - targets: ['localhost:8080']

7. 可视化与告警

使用Prometheus的可视化工具,如Grafana,来展示监控数据,并设置告警规则。

import cn.juwatech.monitor.PrometheusAlertManager;

public class MonitoringAndAlerting {
    public static void main(String[] args) {
        PrometheusAlertManager alertManager = new PrometheusAlertManager();
        alertManager.setAlertRule("my_requests_total > 100");
        alertManager.startMonitoring();
    }
}

总结

通过上述步骤,我们可以将Prometheus与Spring Boot Actuator集成,实现对Java服务端应用的监控。这种集成提供了强大的监控能力,帮助我们及时发现和解决潜在的性能问题。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 如何改变idea和maven中的sdk版本

    如何改变idea和maven中的sdk版本

    这篇文章主要介绍了如何改变idea和maven中的sdk版本,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-07-07
  • idea撤销git commit操作详解

    idea撤销git commit操作详解

    这篇文章主要为大家介绍了idea撤销git commit操作详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-08-08
  • java金额数字转中文工具类详解

    java金额数字转中文工具类详解

    这篇文章主要为大家详细介绍了java金额数字转中文工具类的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-04-04
  • SpringBootTest测试时不启动程序的问题

    SpringBootTest测试时不启动程序的问题

    这篇文章主要介绍了SpringBootTest测试时不启动程序的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-01-01
  • 例题详解Java dfs与记忆化搜索和分治递归算法的使用

    例题详解Java dfs与记忆化搜索和分治递归算法的使用

    递归指函数调用自身。常用的递归算法有dfs(深度优先搜索)、记忆化搜索和分治,接下来将用几个算法题来带你熟练掌握它
    2022-04-04
  • Java对象集合按照指定元素顺序排序的实现

    Java对象集合按照指定元素顺序排序的实现

    最近在对一个集合列表的数据进行排序,需求是要集合数据按照一个排序状态值进行排序,而这个状态值,不是按照从小到大这样的顺序排序的,而是要按照特定的顺序,所以本文给大家介绍了Java对象集合按照指定元素顺序排序的实现,需要的朋友可以参考下
    2024-07-07
  • SpringBoot2.3集成ELK7.1.0的示例代码

    SpringBoot2.3集成ELK7.1.0的示例代码

    这篇文章主要介绍了SpringBoot2.3集成ELK7.1.0的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-08-08
  • Spring Cloud分布式定时器之ShedLock的实现

    Spring Cloud分布式定时器之ShedLock的实现

    这篇文章主要介绍了Spring Cloud分布式定时器之ShedLock的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-03-03
  • 学习SpringMVC——如何获取请求参数详解

    学习SpringMVC——如何获取请求参数详解

    本篇文章主要介绍了SpringMVC——如何获取请求参数详解,详细的介绍了每种参数注解的用法。具有一定的参考价值,感兴趣的小伙伴们可以参考一下。
    2016-12-12
  • Java实现将byte[]转换为File对象

    Java实现将byte[]转换为File对象

    这篇文章将通过一个简单的例子为大家演示Java如何实现 byte[] 转换为 File 对象,并将其上传到外部服务器,感兴趣的小伙伴可以跟随小编一起学习一下
    2025-03-03

最新评论