Spring Boot Actuator Endpoints stellen ons in staat om onze toepassing te monitoren en ermee te communiceren. Spring Actuator is een sub-module van Spring Boot en biedt ingebouwde endpoints die we kunnen in- en uitschakelen voor onze toepassing.
Spring Boot Actuator Endpoints
Spring Boot Actuator Endpoints zijn beschikbaar via JMX en HTTP. Meestal gebruiken we HTTP-gebaseerde Actuator-endpoints omdat ze gemakkelijk toegankelijk zijn via de browser, CURL-commando’s, shell-scripts, enzovoort. Enkele nuttige actuator-endpoints zijn:
- beans: dit endpoint geeft de lijst van alle geconfigureerde beans in onze toepassing terug.
- env: verstrekt informatie over de eigenschappen van de Spring-omgeving.
- health: Geeft de gezondheid van de toepassing weer
- info: Toont informatie over de toepassing; we kunnen dit configureren in de eigenschappen van de Spring-omgeving.
- mappings: Toont de lijst van alle @RequestMapping-paden.
- shutdown: stelt ons in staat om de toepassing op een gecontroleerde manier af te sluiten.
- threaddump: levert de thread dump van de toepassing.
Je kunt de volledige lijst met Spring Actuator-eindpunten krijgen van hier.
Veiligheid van Spring Actuator-eindpunten
Alleen de “gezondheid” en “info” eindpunten zijn blootgesteld zonder enige beveiliging, voor toegang tot alle andere eindpunten moeten we onze toepassing configureren voor Spring Security. Dit is zeer eenvoudig te bereiken, we zullen er later in de tutorial op ingaan.
Spring Actuator-eindpunten inschakelen
Wanneer we Spring Actuator-afhankelijkheden toevoegen aan ons Spring Boot-project, worden de actuator-eindpunten automatisch ingeschakeld. Voeg de onderstaande afhankelijkheden toe aan je Spring-toepassing om de actuator-eindpunten van Spring Boot in te schakelen.
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
Als je de toepassing nu uitvoert, zie je dat actuator-eindpunten worden toegewezen in de logs.
2018-06-19 15:23:20.715 INFO 6493 --- [main] o.s.b.a.e.web.EndpointLinksResolver: Exposing 2 endpoint(s) beneath base path '/actuator'
2018-06-19 15:23:20.723 INFO 6493 --- [main] s.b.a.e.w.s.WebMvcEndpointHandlerMapping : Mapped "{[/actuator/health],methods=[GET],produces=[application/vnd.spring-boot.actuator.v2+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.web.servlet.AbstractWebMvcEndpointHandlerMapping$OperationHandler.handle(javax.servlet.http.HttpServletRequest,java.util.Map<java.lang.String, java.lang.String>)
2018-06-19 15:23:20.724 INFO 6493 --- [main] s.b.a.e.w.s.WebMvcEndpointHandlerMapping : Mapped "{[/actuator/info],methods=[GET],produces=[application/vnd.spring-boot.actuator.v2+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.web.servlet.AbstractWebMvcEndpointHandlerMapping$OperationHandler.handle(javax.servlet.http.HttpServletRequest,java.util.Map<java.lang.String, java.lang.String>)
Let op dat er slechts twee eindpunten – health
en info
– zijn toegewezen. Onderstaande afbeelding toont de uitvoer van deze actuator-eindpunten.
Heb je gemerkt dat er geen gegevens zijn in de /actuator/info
? Dat komt omdat we ze niet hebben geconfigureerd. Voeg gewoon de volgende eigenschappen toe aan je application.properties
-bestand.
info.app.name=Spring Actuator Example
info.app.java.version=10
info.app.type=Spring Boot
Herstart de applicatie en je krijgt de volgende uitvoer:
Aanpassen van het basisservicepad van de actuator-eindpunten
Standaard is het basisservicepad van de actuator-eindpunten /actuator
, maar we kunnen het wijzigen in een andere waarde door management.endpoints.web.base-path
in het application.properties-bestand in te stellen.
management.endpoints.web.base-path=/management
Andere actuator-eindpunten blootstellen
We kunnen andere actuator-eindpunten in- en uitschakelen via eigenschapsbestanden. Als je alle actuator-eindpunten wilt inschakelen, voeg dan de volgende eigenschap toe.
management.endpoints.web.exposure.include=*
Om alleen specifieke actuator eindpunten in te schakelen, geef de lijst van eindpunt-ID’s.
management.endpoints.web.exposure.include=health,info,beans,env
Spring Security voor Actuator Eindpunten
Merk op dat we Spring Security aan onze applicatie moeten toevoegen om extra eindpunten in te schakelen, omdat alle andere eindpunten minimaal basisverificatie vereisen. Voeg de volgende afhankelijkheid voor Spring Security toe aan je applicatie.
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
Voeg ook de gebruikersnaam en het wachtwoord voor Spring Security toe in het applicatieconfiguratiebestand.
spring.security.user.name=pankaj
spring.security.user.password=pankaj
Herstart de applicatie en je zult zien dat er extra eindpunten worden gemapt.
2018-06-19 16:18:22.211 INFO 6627 --- [main] s.b.a.e.w.s.WebMvcEndpointHandlerMapping : Mapped "{[/management/beans],methods=[GET],produces=[application/vnd.spring-boot.actuator.v2+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.web.servlet.AbstractWebMvcEndpointHandlerMapping$OperationHandler.handle(javax.servlet.http.HttpServletRequest,java.util.Map<java.lang.String, java.lang.String>)
2018-06-19 16:18:22.212 INFO 6627 --- [ main] s.b.a.e.w.s.WebMvcEndpointHandlerMapping : Mapped "{[/management/env],methods=[GET],produces=[application/vnd.spring-boot.actuator.v2+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.web.servlet.AbstractWebMvcEndpointHandlerMapping$OperationHandler.handle(javax.servlet.http.HttpServletRequest,java.util.Map<java.lang.String, java.lang.String>)
2018-06-19 16:18:22.212 INFO 6627 --- [ main] s.b.a.e.w.s.WebMvcEndpointHandlerMapping : Mapped "{[/management/env/{toMatch}],methods=[GET],produces=[application/vnd.spring-boot.actuator.v2+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.web.servlet.AbstractWebMvcEndpointHandlerMapping$OperationHandler.handle(javax.servlet.http.HttpServletRequest,java.util.Map<java.lang.String, java.lang.String>)
Wanneer je nu probeert toegang te krijgen tot de beveiligde actuator eindpunten, moet je inloggegevens verstrekken. Hieronder staan afbeeldingen van de respons van de
beans
en env/java.home
eindpunten.
Spring Actuator Aangepaste Eindpunten
Een van de geweldige kenmerken van het Spring Framework is dat het zeer eenvoudig is om uit te breiden. We kunnen onze eigen aangepaste actuator-eindpunten maken met de @Endpoint
-annotatie op een klasse. Vervolgens moeten we de @ReadOperation
, @WriteOperation
of @DeleteOperation
-annotaties gebruiken op de methoden om ze bloot te stellen als actuator-eindpunt bean. We kunnen technologiespecifieke eindpunten maken met behulp van de @JmxEndpoint
en @WebEndpoint
-annotaties. Hier is een voorbeeld van ons eigen aangepaste Spring-actuator-eindpunt.
package com.journaldev.spring;
import org.springframework.boot.actuate.endpoint.annotation.Endpoint;
import org.springframework.boot.actuate.endpoint.annotation.ReadOperation;
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Component;
@Endpoint(id="myendpoint")
@Component
public class MyCustomEndpoints {
@ReadOperation
@Bean
public String hi() {
return "Hi from custom endpoint";
}
}
Heb je het eindpunt-id opgemerkt? Dit moeten we ook configureren in de lijst met actuator-eindpunten die moeten worden ingeschakeld. Werk de volgende eigenschappen bij in het application.properties
-bestand.
management.endpoints.web.exposure.include=health,info,beans,env,myendpoint
Nu, wanneer je de toepassing start, controleer dan of dit nieuwe eindpunt wordt toegewezen in de logs.
2018-06-19 17:06:59.743 INFO 6739 --- [main] s.b.a.e.w.s.WebMvcEndpointHandlerMapping : Mapped "{[/management/myendpoint],methods=[GET],produces=[application/vnd.spring-boot.actuator.v2+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.web.servlet.AbstractWebMvcEndpointHandlerMapping$OperationHandler.handle(javax.servlet.http.HttpServletRequest,java.util.Map<java.lang.String, java.lang.String>)
De onderstaande afbeelding toont de output wanneer we ons aangepaste actuator-eindpunt aanroepen.
Samenvatting
Spring Boot Actuator is een productierijp beheer- en informatiemodule. We kunnen het eenvoudig uitbreiden om onze eigen API’s toe te voegen en onze toepassing te beheren.
Je kunt het volledige project downloaden vanuit onze GitHub Repository.
Source:
https://www.digitalocean.com/community/tutorials/spring-boot-actuator-endpoints