Springboot自定义Prometheus采集指标

添加依赖

复制代码
<!--增加Prometheus依赖-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
    <groupId>io.micrometer</groupId>
    <artifactId>micrometer-registry-prometheus</artifactId>
</dependency>

项目配置

配置application.yml文件

复制代码
spring:
    application:
        name: my-metrics

server:
    port: 8080
    tomcat:
      mbeanregistry:
          enabled: true #启用Tomcat MBean注册表,以便于通过JMX进行监控和管理

management:
    endpoints:
        web:
            exposure:
                include: "*" #将所有Actuator端点暴露
    prometheus:
        metrics:
            export:
                enabled: true #启用Prometheus指标导出
    metrics:
        tags:
            application: ${spring.application.name}

自定义指标

复制代码
import io.micrometer.core.instrument.Gauge;
import io.micrometer.core.instrument.MeterRegistry;
import io.micrometer.core.instrument.Tags;
import jakarta.servlet.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.function.Supplier;

/**
 * @Description 使用过滤器添加自定义指标
 **/
@Component
public class MyMetricsFilter implements Filter {

    @Autowired
    private MeterRegistry registry;

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        //自定义指标方法
        addMetrics();
        filterChain.doFilter(servletRequest, servletResponse);
    }

    /**
     * 添加自定义指标,根据业务场景自行方法逻辑
     */
    public void addMetrics() {
        List<String> sysNames = new ArrayList<>();
        sysNames.add("sys1");
        sysNames.add("sys2");

        sysNames.forEach(sysName -> {
// 构建Gauge指标并注册
            Gauge.builder("my.metrics.monitor", getValue(sysName)) // getValue(sysName)返回一个Supplier<Number>对象, 对象值为匿名函数, 匿名函数会在创建指标时调用,返回自定义指标的值
                    .tags(Tags.of("service", sysName)) // 指标标签
                    .description("my metrics monitor") // 指标描述
                    .register(registry); // 注册到MeterRegistry
        });
    }

    public Supplier<Number> getValue(String sysName) {
        return () -> {
            // 在这里使用 sysName 参数, 编写自定义指标的逻辑
            System.out.println("System name: " + sysName);
            return sysName.hashCode();
        };
    }
}

获取自定义指标

启动项目,访问http://localhost:8080/actuator/prometheus,即可获取自定义指标

相关推荐
骑着蜗牛撵大象3272 天前
设备监控数据存与查:Spring Boot 接入 TimescaleDB 超表的完整落地
android·spring boot·后端·springboot·时序数据库·es·设备监控
Dreamboat-L5 天前
日志级别基础 + Spring Boot 日志实践指南
java·服务器·数据库·java-ee·springboot
ab1237685 天前
Spring WebSocket(STOMP)
笔记·websocket·springboot·stomp
Java爱好狂.5 天前
挑战一周速通Spring+SpringBoot+SpringCloud!
java·后端·spring·springboot·架构师·java面试·java程序员
撸串-研究生6 天前
社区流浪宠物领养救助系统【附源码】
mysql·springboot·宠物·社区公益服务
BLUcoding10 天前
接口服务公网超时排查记录:SecureRandom 阻塞问题分析与解决
java·linux·springboot·aes·securerandom
我最爱吃鱼香茄子10 天前
【毕业设计优选】人力资源管理系统|Java|SpringBoot|Vue|前后端分离|带详细文档+部署教学视频
java·vue·毕业设计·springboot
做个文艺程序员11 天前
MinIO第05篇:MinIO事件通知机制与Kafka集成——构建SaaS平台的异步文件处理管道
kafka·消息队列·springboot·minio·事件驱动·异步处理
骑着蜗牛撵大象32711 天前
SpringBoot+Vue3 企业智能体侧挂架构:独立服务、独立数据库与主线零侵入落地
数据库·spring boot·架构·vue·springboot·事件驱动·服务拆分
程序猿_极客12 天前
【免费】分享一套优质的基于微信小程序的音乐播放器系统的设计与实现,源码+文档+视频详解(讲解)
微信小程序·小程序·springboot·音乐播放器小程序·音乐管理系统