We've created a Spring web app with minimal code and released it to production. This is the perfect time to introduce production-grade support features.
There are some questions that often arise in production, and these are as follows:
- What do we do when the system administrator wants to configure his or her monitoring software to ping our app to see if it's up?
- What happens when our manager wants to know the metrics of people hitting our app?
- What are we going to do when the ops center supervisor calls us at 2:00 a.m. and we have to figure out what went wrong?
The last feature we are going to introduce in this chapter is Spring Boot's Actuator module. This module provides some super slick Ops-oriented features that are incredibly valuable in a production environment.
We start by adding this dependency to our build.gradle as follows:
compile('org.springframework.boot:spring-boot-starter-actuator')
When you run this version of our app, the same business functionality is available that we saw earlier, but there are additional HTTP endpoints; these are listed in the following table:
Actuator Endpoint |
Description |
/application/autoconfig |
This reports what Spring Boot did and didn't autoconfigure, and why |
/appplication/beans |
This reports all the beans configured in the application context (including ours as well as the ones autoconfigured by Boot) |
/application/configprops |
This exposes all configuration properties |
/application/dump |
This creates thread dump report |
/application/env |
This reports on the current system environment |
/application/health |
This is a simple endpoint to check the life of the app |
/application/info |
This serves up custom content from the app |
/application/metrics |
This shows counters and gauges on web usage |
/application/mappings |
This gives us details about all Spring WebFlux routes |
/application/trace |
This shows the details about past requests |
Endpoints, by default, are disabled. We have to opt in. This is accomplished by setting endpoints.{endpoint}.enabled=true inside src/main/resources/application.properties, like this:
endpoints.health.enabled=true
This line added to application.properties mentions the endpoint, health, and enables it. If we restart the application, we can ping for its health, as shown in the next section.