从0到1: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面板配置
- 安装Prometheus并配置抓取Spring Boot应用指标
- 在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)
部署与验证
- 克隆项目:
git clone https://gitcode.com/gh_mirrors/sp/spring-petclinic - 按上述步骤修改代码
- 启动应用:
./mvnw spring-boot:run - 访问Actuator端点验证指标:
curl http://localhost:8080/actuator/metrics/petclinic.visits.total
总结与扩展
通过本文方法,我们为Spring PetClinic添加了三类核心指标:
- 业务操作计数器(就诊、新增宠物)
- 分类统计指标(宠物类型分布)
- 系统性能指标(缓存命中率)
后续可扩展实现:
- 医生接诊效率计时(使用
@Timed注解) - 客户满意度评分指标
- 药品库存预警指标
关注本系列教程,下期将介绍如何通过AlertManager配置智能告警规则,实现异常指标自动通知。收藏本文,立即开始你的Spring Boot监控之旅!
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



