Getting Started with Spring Boot - Advanced (8) - Application Monitoring (Actuator)

As another highlight of Spring Boot, it is the actuator module, which is a special module in Spring Boot Starter, which is used to centrally collect various indicator information of the application.

(1) Open monitoring

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


No modification is required after the introduction. When you start the application, you will see the following log:
quote
o.s.b.a.e.mvc.EndpointHandlerMapping     : Mapped "{[/configprops || /configprops.json],methods=[GET],produces=[application/vnd.spring-boot.actuator.v1+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.EndpointMvcAdapter.invoke()
o.s.b.a.e.mvc.EndpointHandlerMapping     : Mapped "{[/env/{name:.*}],methods=[GET],produces=[application/vnd.spring-boot.actuator.v1+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.EnvironmentMvcEndpoint.value(java.lang.String)
o.s.b.a.e.mvc.EndpointHandlerMapping     : Mapped "{[/env || /env.json],methods=[GET],produces=[application/vnd.spring-boot.actuator.v1+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.EndpointMvcAdapter.invoke()
o.s.b.a.e.mvc.EndpointHandlerMapping     : Mapped "{[/heapdump || /heapdump.json],methods=[GET],produces=[application/octet-stream]}" onto public void org.springframework.boot.actuate.endpoint.mvc.HeapdumpMvcEndpoint.invoke(boolean,javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse) throws java.io.IOException,javax.servlet.ServletException
o.s.b.a.e.mvc.EndpointHandlerMapping     : Mapped "{[/metrics/{name:.*}],methods=[GET],produces=[application/vnd.spring-boot.actuator.v1+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.MetricsMvcEndpoint.value(java.lang.String)
o.s.b.a.e.mvc.EndpointHandlerMapping     : Mapped "{[/metrics || /metrics.json],methods=[GET],produces=[application/vnd.spring-boot.actuator.v1+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.EndpointMvcAdapter.invoke()
o.s.b.a.e.mvc.EndpointHandlerMapping     : Mapped "{[/auditevents || /auditevents.json],methods=[GET],produces=[application/vnd.spring-boot.actuator.v1+json || application/json]}" onto public org.springframework.http.ResponseEntity<?> org.springframework.boot.actuate.endpoint.mvc.AuditEventsMvcEndpoint.findByPrincipalAndAfterAndType(java.lang.String,java.util.Date,java.lang.String)
o.s.b.a.e.mvc.EndpointHandlerMapping     : Mapped "{[/health || /health.json],methods=[GET],produces=[application/vnd.spring-boot.actuator.v1+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.HealthMvcEndpoint.invoke(javax.servlet.http.HttpServletRequest)
o.s.b.a.e.mvc.EndpointHandlerMapping     : Mapped "{[/info || /info.json],methods=[GET],produces=[application/vnd.spring-boot.actuator.v1+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.EndpointMvcAdapter.invoke()
o.s.b.a.e.mvc.EndpointHandlerMapping     : Mapped "{[/dump || /dump.json],methods=[GET],produces=[application/vnd.spring-boot.actuator.v1+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.EndpointMvcAdapter.invoke()
o.s.b.a.e.mvc.EndpointHandlerMapping     : Mapped "{[/autoconfig || /autoconfig.json],methods=[GET],produces=[application/vnd.spring-boot.actuator.v1+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.EndpointMvcAdapter.invoke()
o.s.b.a.e.mvc.EndpointHandlerMapping     : Mapped "{[/trace || /trace.json],methods=[GET],produces=[application/vnd.spring-boot.actuator.v1+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.EndpointMvcAdapter.invoke()
o.s.b.a.e.mvc.EndpointHandlerMapping     : Mapped "{[/loggers/{name:.*}],methods=[GET],produces=[application/vnd.spring-boot.actuator.v1+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.LoggersMvcEndpoint.get(java.lang.String)
o.s.b.a.e.mvc.EndpointHandlerMapping     : Mapped "{[/loggers/{name:.*}],methods=[POST],consumes=[application/vnd.spring-boot.actuator.v1+json || application/json],produces=[application/vnd.spring-boot.actuator.v1+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.LoggersMvcEndpoint.set(java.lang.String,java.util.Map<java.lang.String, java.lang.String>)
o.s.b.a.e.mvc.EndpointHandlerMapping     : Mapped "{[/loggers || /loggers.json],methods=[GET],produces=[application/vnd.spring-boot.actuator.v1+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.EndpointMvcAdapter.invoke()
o.s.b.a.e.mvc.EndpointHandlerMapping     : Mapped "{[/mappings || /mappings.json],methods=[GET],produces=[application/vnd.spring-boot.actuator.v1+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.EndpointMvcAdapter.invoke()
o.s.b.a.e.mvc.EndpointHandlerMapping     : Mapped "{[/beans || /beans.json],methods=[GET],produces=[application/vnd.spring-boot.actuator.v1+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.mvc.EndpointMvcAdapter.invoke()


Visiting http://localhost:8080/health will return the following json
quote
{
    "status" : "UP"
}


(2) Set endpoint access

1 - close verification
By default, many endpoints are not allowed to access, and will return 401: Unauthorized.

application.properties
quote
management.security.enabled=false


2-Enable HTTP basic authentication

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


application.properties
quote
security.user.name=admin
security.user.password=123456
management.security.enabled=true
management.security.role=ADMIN


After visiting the URL http://localhost:8080/env, you will see that you need to enter a username and password.

3- Set ContextPath

application.properties
quote
management.contextPath=/manage


Then the URL is: http://localhost:8080/manage/env

4-set the port

application.properties
quote
management.port=8081


Then the URL is: http://localhost:8081/manage/env

(2) Endpoint Endpoint

application configuration class
  /autoconfig Get the automatic configuration report of the
  application/beans Get all the beans created in the application context
  /configprops Get the property information configured in the application Report
  /env Get all available environment properties of the
  application Report/mappings Get all Spring MVC controller mappings in the application Report
  /info Get application-customized information

Metrics
class   /metrics Returns various important metric information of the
  application/health Returns to the application All kinds of health indicator information
  /dump Returns thread information in the running program
  /trace Returns basic HTTP trace information

Operation
control class   /shutdown Used to remotely shut down applications

(3) Enable or disable endpoints
application.properties
quote
endpoints.configprops.enabled=false
endpoints.shutdown.enabled=true


(4) Custom endpoint

1 - customize existing endpoints, such as the /health endpoint
@Component
public class CustomHealth implements HealthIndicator {
 
    public Health health() {
    	return Health.up().build();
    }
 
}


Access URL: http://localhost:8081/manage/health

2 - Create new endpoint
@Component
public class CustomEndpoint implements Endpoint<List<String>> {
     
    public String getId() {
        return "myep";
    }
 
    public boolean isEnabled() {
        return true;
    }
 
    public boolean isSensitive () {
        return true;
    }
 
    public List<String> invoke() {
        List<String> messages = new ArrayList<String>();
        messages.add("This is message 1");
        messages.add("This is message 2");
        return messages;
    }
}


Access URL: http://localhost:8081/manage/myep

3 - List all endpoints
@Component
public class ListEndpoints extends AbstractEndpoint<List<Endpoint>> {
    private List<Endpoint> endpoints;
 
    @Autowired
    public ListEndpoints(List<Endpoint> endpoints) {
        super("allep");
        this.endpoints = endpoints;
    }
 
    public List<Endpoint> invoke() {
        return this.endpoints;
    }
}


Access URL: http://localhost:8081/manage/allep

(5) Custom endpoint metrics
Spring Boot allows developers to provide richer metrics information in a coded way, which can be accessed through the /metrics endpoint. Counter is an indicator that is represented by the Number type; gauge is an indicator that measures double-precision calculations. CounterService or GaugeService can be injected anywhere.

counterService.increment("metricName");
counterService.decrement("metricName");
counterService.reset("metricName");


gaugeService.submit("metricName", 2.5);


Reference:
http://www.baeldung.com/spring-boot-actuators
http://blog.didispace.com/spring-boot-actuator-1/

Guess you like

Origin http://10.200.1.11:23101/article/api/json?id=326616705&siteId=291194637