Spring Boot Admin (Server) and Spring Boot Admin (Client) have been added to Spring Initializr, so I decided to touch them. Spring Boot Admin is a library that allows you to monitor Spring Boot applications.
OS: macOS Sierra 10.12.6 Java: 1.8.0_102 Spring Boot: 1.5.10.RELEASE Spring Boot Admin: 1.5.7
Spring Boot Admin has a Server-Client configuration. The Server provides the monitoring screen, and the Client is the application to be monitored.
Spring Boot Admin Server
Select Spring Boot Admin (Server)
from Spring Initializr to create an application.
OK if spring-boot-admin-starter-server
is added to depenedency
.
(If you make it from Spring Initializr as above, it will be added naturally, so you should not need to edit pom.xml)
pom.xml
<dependencies>
<dependency>
<groupId>de.codecentric</groupId>
<artifactId>spring-boot-admin-starter-server</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
After that, you need to delete the @SpringBootApplication
annotation of the ʻApplication` class and add the annotation as shown below.
SpringBootAdminServerApplication.java
@Configuration
@EnableAutoConfiguration
@EnableAdminServer
public class SpringBootAdminServerApplication {
public static void main(String[] args) {
SpringApplication.run(SpringBootAdminServerApplication.class, args);
}
}
If you start it as an application with this, the Server side is OK.
If you access http: // localhost: 8080
, the monitoring web page will be displayed.
Spring Boot Admin Client
Select Spring Boot Admin (Client)
from Spring Initializr to create an application.
Since the Client itself should be started as an application, assuming a WEB application here, add Web
as well.
If you create it as above, spring-boot-admin-starter-client
(and spring-boot-starter-web
) should be added to dependency
.
pom.xml
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>de.codecentric</groupId>
<artifactId>spring-boot-admin-starter-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
Once you enter the connection information to the server in application.yml (I changed it because I personally like yml rather than properties), it's OK.
application.yml
server:
port: 3000 # ①
spring:
boot:
admin:
url: http://localhost:8080 # ②
management:
security:
enabled: false # ③
I will explain each property. (1): Spring Boot Admin Server starts on the default 8080 port (because it is not set in particular), so make sure that the boot port is not covered. 2: Connection information to Spring Boot Admin Server. ③: Because all endpoints have been secure since Spring Boot 1.5.x. Since it is disabled for confirmation, it is described in the security section in production. Need to be dealt with.
After that, it is better to add build-info
to pom.xml so that the build time information (version, artifact, etc.) is displayed.
pom.xml
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>build-info</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
All you have to do is start it.
The screen looks like this.
What immediately made me feel uncomfortable was that the display was not over time. In other words, only the current snapshot status is displayed. Therefore, it is unknown whether the state is a state in which the load is higher than usual. I think this is the biggest disadvantage. To be honest, it's hard to see, and it's hard to use because I can't feel whether it's normal or not.
The main process is described in the de.codecentric.boot.admin.client.registration
package.
The Client side is just scheduling and registering to the Server side.
class | Outline of processing |
---|---|
RegistrationApplicationListener | Register and cancel scheduling. The method of ApplicationRegistrator class is called at startup or periodically. |
ApplicationRegistrator | HTTP communication is performed to Spring Boot Server Admin, and registration request is performed on the Server side. |
Roughly speaking, there is a process of receiving HTTP and registering, and a process of updating the status regularly. Click here for classes that are mainly related to the process of receiving and registering HTTP.
package | class | Outline of processing |
---|---|---|
de.codecentric.boot.admin.registry.web | RegistryController | Controller that receives API from Client side. |
de.codecentric.boot.admin.registry | ApplicationRegistry | Register the Client information based on the information received from the Client side. |
Click here for the process of updating the status on a regular basis.
package | class | Outline of processing |
---|---|---|
de.codecentric.boot.admin.registry | StatusUpdateApplicationListener | Register and cancel scheduling. |
de.codecentric.boot.admin.registry | StatusUpdater | Access the Actuator API on the Client side and update the status. |
When I created it by default, Git's commit information (commit ID, branch, etc.) was not displayed, so I checked the settings.
Spring Boot Admin displays the information of / info
of Spring Boot Actuator, so you can add the information of Git to / info
. The method is as follows.
Add git-commit-id-plugin
to pom.xml.
pom.xml
<build>
<plugins>
<plugin>
<groupId>pl.project13.maven</groupId>
<artifactId>git-commit-id-plugin</artifactId>
</plugin>
</plugins>
</build>
This is all you need!
The git-commit-id-plugin
just creates a git.properties
file, but the Spring Boot Actuator's GitInfoContributor
class will automatically find the file and add it to / info
.
After all it is bad that time has not passed. I wondered if I would bother to adopt it for the project. I hope that it will be improved so that it will be easier to use in the future.
Also, if you look at the contents of the library, it will be a learning experience. Sometimes I want to take the time to check the library like this.
GitHub
I uploaded it to my GitHub, so please refer to it. spring-boot-admin-sample
Spring Boot Admin
Recommended Posts