从0到1:Spring PetClinic自定义监控指标实战指南

从0到1:Spring PetClinic自定义监控指标实战指南

【免费下载链接】spring-petclinic A sample Spring-based application 【免费下载链接】spring-petclinic 项目地址: https://gitcode.com/gh_mirrors/sp/spring-petclinic

你是否在管理宠物诊所系统时遇到过这些困扰?无法实时掌握就诊量高峰时段、不清楚哪些宠物类型最受欢迎、系统性能瓶颈难以定位?本文将带你通过Spring Boot Actuator和Micrometer,为Spring PetClinic项目打造专属监控指标体系,30分钟即可实现业务数据可视化。

为什么需要自定义监控指标

Spring PetClinic作为经典的Spring Boot示例项目,默认并未提供业务相关的监控指标。通过本文方法,你将获得:

  • 实时就诊量统计(每小时新增就诊数、医生接诊效率)
  • 宠物类型分布分析(猫/狗等类型占比)
  • 系统性能指标(缓存命中率、数据库查询耗时)

这些指标将帮助你优化资源配置,提升用户体验。

技术准备与依赖配置

首先确保项目已引入必要依赖。Spring Boot Actuator提供基础监控能力,Micrometer作为指标门面支持多种监控系统(Prometheus、Graphite等)。

打开项目根目录下的pom.xml文件,添加以下依赖:

<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.properties中添加配置(若文件不存在需创建):

# 暴露所有监控端点
management.endpoints.web.exposure.include=*
# 启用缓存统计(已在[CacheConfiguration.java](https://link.gitcode.com/i/110f242f3081dd79591f4cdb85775c42)中配置)
management.metrics.cache.instrument-cache=true

核心指标设计与实现

就诊量计数器

VisitController.java中添加就诊次数统计:

import io.micrometer.core.annotation.Timed;
import io.micrometer.core.instrument.Counter;
import io.micrometer.core.instrument.MeterRegistry;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;

@Controller
@RequestMapping("/owners/{ownerId}/pets/{petId}/visits")
public class VisitController {
    
    private final Counter visitCounter;
    
    @Autowired
    public VisitController(MeterRegistry meterRegistry) {
        this.visitCounter = Counter.builder("petclinic.visits.total")
                .description("Total number of pet visits")
                .register(meterRegistry);
    }
    
    @PostMapping("/new")
    @Timed(value = "petclinic.visits.process", description = "Time taken to process a visit")
    public String processNewVisitForm(/* 原有参数 */) {
        // 原有业务逻辑
        visitCounter.increment(); // 计数+1
        return "redirect:/owners/{ownerId}";
    }
}

宠物类型分布指标

PetController.java中添加宠物类型统计:

import io.micrometer.core.instrument.MeterRegistry;
import org.springframework.beans.factory.annotation.Autowired;

@Controller
@RequestMapping("/owners/{ownerId}/pets")
public class PetController {
    
    private final MeterRegistry meterRegistry;
    
    @Autowired
    public PetController(MeterRegistry meterRegistry) {
        this.meterRegistry = meterRegistry;
    }
    
    @PostMapping("/new")
    public String processCreationForm(Owner owner, @Valid Pet pet, BindingResult result) {
        if (result.hasErrors()) {
            return "pets/createOrUpdatePetForm";
        }
        owner.addPet(pet);
        
        // 记录宠物类型
        meterRegistry.counter("petclinic.pets.created", 
                "type", pet.getType().getName())
                .increment();
                
        return "redirect:/owners/{ownerId}";
    }
}

指标可视化与监控平台集成

启动应用后,访问http://localhost:8080/actuator/prometheus即可看到指标数据:

# HELP petclinic_visits_total Total number of pet visits
# TYPE petclinic_visits_total counter
petclinic_visits_total 12.0
# HELP petclinic_pets_created_total 
# TYPE petclinic_pets_created_total counter
petclinic_pets_created_total{type="cat",} 5.0
petclinic_pets_created_total{type="dog",} 7.0

Grafana面板配置

  1. 安装Prometheus并配置抓取Spring Boot应用指标
  2. 在Grafana中导入以下面板JSON(示例):
{
  "panels": [
    {
      "title": "今日就诊量",
      "type": "graph",
      "targets": [
        {
          "expr": "increase(petclinic_visits_total[24h])",
          "legendFormat": "就诊数"
        }
      ]
    }
  ]
}

高级指标实现:缓存性能监控

Spring PetClinic已在CacheConfiguration.java中启用缓存统计:

@Bean
public JCacheManagerCustomizer petclinicCacheConfigurationCustomizer() {
    return cm -> cm.createCache("vets", cacheConfiguration());
}

private javax.cache.configuration.Configuration<Object, Object> cacheConfiguration() {
    return new MutableConfiguration<>().setStatisticsEnabled(true); // 启用统计
}

Micrometer会自动暴露缓存指标,可直接在Grafana中监控:

  • jcache_gets_total{cache="vets"}:缓存查询总数
  • jcache_hits_total{cache="vets"}:缓存命中数
  • 命中率计算公式:sum(jcache_hits_total) / sum(jcache_gets_total)

部署与验证

  1. 克隆项目:git clone https://gitcode.com/gh_mirrors/sp/spring-petclinic
  2. 按上述步骤修改代码
  3. 启动应用:./mvnw spring-boot:run
  4. 访问Actuator端点验证指标:curl http://localhost:8080/actuator/metrics/petclinic.visits.total

总结与扩展

通过本文方法,我们为Spring PetClinic添加了三类核心指标:

  • 业务操作计数器(就诊、新增宠物)
  • 分类统计指标(宠物类型分布)
  • 系统性能指标(缓存命中率)

后续可扩展实现:

  • 医生接诊效率计时(使用@Timed注解)
  • 客户满意度评分指标
  • 药品库存预警指标

关注本系列教程,下期将介绍如何通过AlertManager配置智能告警规则,实现异常指标自动通知。收藏本文,立即开始你的Spring Boot监控之旅!

【免费下载链接】spring-petclinic A sample Spring-based application 【免费下载链接】spring-petclinic 项目地址: https://gitcode.com/gh_mirrors/sp/spring-petclinic

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值