您的位置:

Spring Boot监控详解

Spring Boot是一个非常流行的Java企业级Web应用开发框架。除了具备开箱即用、简化配置等优点外,它还提供了强大的监控功能。这篇文章将围绕Spring Boot监控展开,从多个方面详细阐述它的功能与使用。

一、基本监控指标

在应用程序运行过程中,我们需要实时地了解到它的基础指标数据,比如CPU、内存、磁盘、网络等。Spring Boot提供了很多监控指标收集器,可以方便地获取这些数据。

首先,使用Spring Boot Actuator来进行监控:


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

然后,在配置文件中增加以下内容:


spring:
  application:
    name: demo
management:
  endpoints:
    web:
      exposure:
        include: '*'
  endpoint:
    health:
      show-details: always

通过访问"/actuator/health"接口,可以获取到应用程序的健康状况。访问"/actuator/metrics"接口,可以获取到应用程序的基础指标数据。

除此之外,还可以使用Spring Boot Admin进行监控,它提供了更丰富的监控指标展示和操作。Spring Boot Admin需要引入以下依赖:


// pom.xml
<dependency>
    <groupId>de.codecentric</groupId>
    <artifactId>spring-boot-admin-starter-server</artifactId>
</dependency>

然后,在配置文件中增加以下内容:


spring.boot.admin.ui.title: Demo Admin
spring.boot.admin.ui.favicon: /img/favicon.ico
spring.boot.admin.notify.mail.to: admin@demo.com
spring.boot.admin.notify.mail.from: noreply@demo.com
spring.boot.admin.notify.mail.ignore-errors: false
logging.level.de.codecentric.boot.admin.server.domain.services.DefaultNotificationTrigger: DEBUG

通过访问"http://localhost:8080"界面,可以获取到应用程序的健康状况、基础指标数据、日志信息等,并且支持邮件、Slack等多种通知方式。

二、自定义指标

除了基础指标数据外,我们可能还需要自定义一些指标,比如业务逻辑相关的指标。Spring Boot提供了Metrics API,可以自定义指标数据,并将其集成到Actuator中,方便展示与监控。

首先,使用以下依赖:


// pom.xml
<dependency>
    <groupId>io.micrometer</groupId>
    <artifactId>micrometer-core</artifactId>
</dependency>
<dependency>
    <groupId>io.micrometer</groupId>
    <artifactId>micrometer-registry-prometheus</artifactId>
</dependency>

然后,编写代码:


@Service
public class CustomMetricsService {
    private final Counter counter;

    public CustomMetricsService(MeterRegistry registry) {
        counter = registry.counter("custom_counter_total", "type", "business");
    }

    public void increase() {
        counter.increment();
    }
}

通过以上代码,我们定义了一个名为"custom_counter_total"的计数器,用于记录业务逻辑相关的调用次数。接下来,在业务逻辑代码中调用CustomMetricsService的increase方法,就可以在Actuator中看到相应的指标数据了。

三、应用状态检查

在应用程序运行过程中,随时可能出现一些异常情况,比如数据库连接异常、消息队列连接异常等。这时,我们需要快速地了解到应用程序的健康状态,并及时进行处理。Spring Boot提供了HealthIndicator接口,可以自定义应用程序状态检查逻辑。

首先,定义一个检查类:


@Component
public class MyHealthIndicator implements HealthIndicator {
    @Override
    public Health health() {
        return Health.up().build();
    }
}

通过实现HealthIndicator接口,定义了一个名为"MyHealthIndicator"的健康检查器。在health方法中编写健康检查逻辑,根据检查结果返回相应的Health对象。

然后,配置文件中增加以下内容:


management.endpoint.health.show-details: always
management.health.status.order: DOWN, OUT_OF_SERVICE, UNKNOWN, UP

通过以上代码,我们开启了健康检查器的详细展示,并设置了检查结果的顺序。接下来,访问"/actuator/health"接口,就可以看到自定义的健康检查结果了。

四、应用详细信息

在应用程序开发、部署、运维过程中,我们需要了解到应用程序的详细信息,比如版本号、Git提交ID等。Spring Boot提供了InfoContributor接口,可以方便地自定义应用程序的详细信息。

首先,定义一个信息类:


@Component
public class MyInfoContributor implements InfoContributor {
    @Override
    public void contribute(Info.Builder builder) {
        builder.withDetail("version", "1.0.0")
               .withDetail("git", "abcd1234");
    }
}

通过实现InfoContributor接口,定义了一个名为"MyInfoContributor"的信息类。在contribute方法中编写详细信息逻辑,向Info.Builder中添加自定义的信息。

然后,访问"/actuator/info"接口,就可以看到应用程序的详细信息了。

五、日志跟踪

在应用程序出现问题时,我们需要查看相应的日志,并确定问题的原因。Spring Boot提供了Trace功能,可以方便地跟踪应用程序的请求与响应,从而快速定位问题。

首先,增加以下配置:


logging.level.org.springframework.boot.actuate.trace.http:
  InMemoryHttpTraceRepository: trace

通过以上配置,我们启用了Trace功能,并使用InMemoryHttpTraceRepository作为存储器。接下来,在代码中添加一行注解:


@Slf4j
@RestController
public class DemoController {
    @GetMapping("/")
    @Trace
    public String hello() {
        log.info("hello world");
        return "hello world";
    }
}

通过添加@Trace注解,我们标示了该方法需要追踪,Spring Boot就会记录该方法的入参、出参、异常等信息,并保存到InMemoryHttpTraceRepository中。访问"/actuator/httptrace"接口,就可以查看Trace记录信息了。

总结

本文从基本监控指标、自定义指标、应用状态检查、应用详细信息、日志跟踪等方面详细阐述了Spring Boot监控的功能与使用方法。通过集成Actuator、Admin、Metrics、InfoContributor、Trace等组件,我们能够更方便地获取应用程序的基础指标、自定义指标、应用状态、详细信息和请求响应信息,从而更加高效地开发、部署和运维我们的应用程序。