991 字
约 3 分钟
1
SpringBoot 监控
2026-09-19
无标签

第18章 SpringBoot 监控

掌握SpringBoot Actuator监控和管理功能 💻 查看完整代码 - 在线IDE体验

🎯 学习目标

  • Actuator基础:了解监控端点和配置
  • 健康检查:掌握应用健康状态监控
  • 指标监控:学习性能指标收集
  • 自定义端点:创建业务监控端点
  • 安全配置:保护监控端点安全
  • 集成监控:与外部监控系统集成

🔧 核心概念

  • Actuator:生产就绪功能监控
  • Endpoints:监控和管理端点
  • Health Indicators:健康状态指示器
  • Metrics:应用性能指标
  • Info:应用信息展示
  • Custom Endpoints:自定义监控端点

📦 依赖配置

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

<!-- Web支持 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

<!-- 安全支持 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-security</artifactId>
</dependency>

<!-- Micrometer监控 -->
<dependency>
    <groupId>io.micrometer</groupId>
    <artifactId>micrometer-registry-prometheus</artifactId>
</dependency>

🔄 监控架构流程

应用启动→Actuator初始化→端点注册→健康检查→指标收集→监控展示

⚙️ 配置示例

# application.yml
management:
  endpoints:
    web:
      exposure:
        include: health,info,metrics,prometheus,env,beans
      base-path: /actuator
  endpoint:
    health:
      show-details: always
      show-components: always
    info:
      enabled: true
    metrics:
      enabled: true
  health:
    defaults:
      enabled: true
    diskspace:
      enabled: true
    db:
      enabled: true
  info:
    env:
      enabled: true
    java:
      enabled: true
    os:
      enabled: true

# 应用信息
info:
  app:
    name: SpringBoot监控示例
    version: 1.0.0
    description: Actuator监控功能演示
  build:
    artifact: spring-boot-actuator-demo
    version: 1.0.0

📊 监控仪表板

实时监控指标

UP应用状态256MB内存使用15ms响应时间1,234请求总数

🏥 健康检查配置

@Component
public class CustomHealthIndicator implements HealthIndicator {
    
    @Override
    public Health health() {
        // 检查业务逻辑
        boolean isHealthy = checkBusinessLogic();
        
        if (isHealthy) {
            return Health.up()
                .withDetail("database", "连接正常")
                .withDetail("cache", "缓存可用")
                .withDetail("external-service", "服务正常")
                .build();
        } else {
            return Health.down()
                .withDetail("error", "业务检查失败")
                .build();
        }
    }
    
    private boolean checkBusinessLogic() {
        // 实际的健康检查逻辑
        return true;
    }
}

📈 自定义指标

@RestController
public class MetricsController {
    
    private final MeterRegistry meterRegistry;
    private final Counter requestCounter;
    private final Timer requestTimer;
    
    public MetricsController(MeterRegistry meterRegistry) {
        this.meterRegistry = meterRegistry;
        this.requestCounter = Counter.builder("api.requests")
            .description("API请求计数")
            .register(meterRegistry);
        this.requestTimer = Timer.builder("api.response.time")
            .description("API响应时间")
            .register(meterRegistry);
    }
    
    @GetMapping("/api/data")
    public String getData() {
        return Timer.Sample.start(meterRegistry)
            .stop(requestTimer);
    }
}

🔗 监控端点

GET /actuator/health应用健康状态检查GET /actuator/info应用基本信息GET /actuator/metrics应用性能指标GET /actuator/env环境变量信息GET /actuator/beansSpring Bean信息GET /actuator/prometheusPrometheus格式指标

🛡️ 安全配置

@Configuration
@EnableWebSecurity
public class ActuatorSecurityConfig {
    
    @Bean
    public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
        http.authorizeHttpRequests(authz -> authz
                .requestMatchers("/actuator/health").permitAll()
                .requestMatchers("/actuator/info").permitAll()
                .requestMatchers("/actuator/**").hasRole("ADMIN")
                .anyRequest().authenticated()
            )
            .httpBasic(Customizer.withDefaults());
        return http.build();
    }
}

# 配置用户
spring:
  security:
    user:
      name: admin
      password: admin123
      roles: ADMIN

🎛️ 自定义端点

@Component
@Endpoint(id = "business")
public class BusinessEndpoint {
    
    @ReadOperation
    public Map<String, Object> business() {
        Map<String, Object> details = new HashMap<>();
        details.put("activeUsers", 1500);
        details.put("totalOrders", 25000);
        details.put("revenue", "¥1,250,000");
        details.put("systemLoad", "正常");
        return details;
    }
    
    @WriteOperation
    public void updateConfig(@Selector String key, String value) {
        // 更新配置逻辑
        System.out.println("更新配置: " + key + " = " + value);
    }
}

📊 监控对比

监控类型 端点 用途 安全级别
健康检查 /actuator/health 应用状态监控 公开
应用信息 /actuator/info 版本和构建信息 公开
性能指标 /actuator/metrics JVM和应用指标 受保护
环境信息 /actuator/env 配置和环境变量 受保护
Bean信息 /actuator/beans Spring容器Bean 受保护
日志配置 /actuator/loggers 动态调整日志级别 受保护

🎯 最佳实践

监控配置建议1. 端点安全:生产环境必须配置认证和授权2. 选择性暴露:只暴露必要的监控端点3. 健康检查:实现业务相关的健康检查逻辑4. 自定义指标:收集业务关键指标5. 监控集成:与Prometheus、Grafana等工具集成6. 告警配置:设置关键指标的告警阈值

下一章节

🎉 恭喜完成第18章学习!

你已经掌握了SpringBoot Actuator监控的核心技能,接下来学习应用安全! 🚀 下一章:SpringBoot Security 🏠 返回课程首页

SpringBoot 监控
http://www.clxhxhhr.top/posts/2886/
作者
clxstart
发布于
2026-09-19
许可协议
CC BY-NC-SA 4.0
评论
0 条
还没有评论,先写一条吧。