[Spring Boot #32] 스프링 부트 Actuator, JConsole, VisualVM, 스프링 Admin

2021. 3. 25. 01:52 Spring Framework/Spring boot #2

| 스프링 부트 Actuator

 

스프링 부트 어플리케이션은 actuator라는 모듈을 통해 어플리케이션 상태를 종합적으로 정리해서 제공해줍니다. 이를 통해 스프링 부트 어플리케이션 운영을 손쉽게 할 수 있죠. 

 

actuator는 다양한 Endpoints(사용자나 디바이스같은 IT 서비스의 최종 목적지)를 제공하여 이 다양한 Endpoints를 통해 어플리케이션의 운영 정보를 알 수 있습니다.

 

| Actuator 접근하기

 

프로젝트 구조

+---src
|   +---main
|   |   +---java
|   |   |   \---com
|   |   |       \---tutorial
|   |   |           \---actuator
|   |   |                   ActuatorApplication.java
|   |   |
|   |   \---resources
|   |       |   application.properties
|   |       |
|   |       +---static
|   |       \---templates

 

의존성 추가

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

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

 

소스 코드

@SpringBootApplication
@RestController
public class ActuatorApplication {

    @GetMapping("/hello")
    public String hello(){
        return "hello";
    }

    public static void main(String[] args) {
        SpringApplication.run(ActuatorApplication.class, args);
    }
}

 

위 프로젝트를 실행하고 어플리케이션의 상태를 알고자 할 때 다음에 소개하는 방법들을 써서 어플리케이션에 접속할 수 있습니다.

 

JConsole

 

jconsole 을 cmd 라인에 칩니다.

C:\Users\user\actuator>jconsole

 

다음과 같이 local에 구동되고 있는 jvm 위에서 실행되고 있는 어플리케이션의 목록이 나옵니다. 여기서 현재 어플리케이션에 해당되는 것을 클릭합니다.

 

 

Secure connection을 사용하지 않는 상태이므로 Insecure 상태로 접속합니다.

 

 

아래와 같이 Heap Memory 상태, Threads 개수 클래스 개수등 어플리케이션의 상태를 나타내는 metric이 표시됩니다.

 

 

VisualVM

 

https://visualvm.github.io/download.html 서 VisualVm을 다운 받습니다. 

 

다운로드 받은 후 VisualVM을 실행하면 다음과 같은 화면이 출력됩니다. 여기서 스프링 부트 어플리케이션을 클릭합니다.

 

 

다음과 같이 어플리케이션의 상태를 체크할 수 있습니다. 

 

 

HTTP

 

스프링 부트 application.properties 파일에 다음과 같이 설정을 한 후 모든 웹 요청에 대해서 actuator가 어플리케이션의 상태를 반환하게 끔 설정합니다.

# application.properties
management.endpoints.web.exposure.include=*

 

| 스프링 부트 Admin

 

스프링 Admin은 actuator 정보를 UI로 쉽게 볼 수 있는 오픈소스 프로젝트입니다. 

 

Admin 서버 

 

프로젝트 구조

+---src
|   +---main
|   |   +---java
|   |   |   \---com
|   |   |       \---tutorial
|   |   |           \---springadmin
|   |   |                   SpringAdminApplication.java
|   |   |
|   |   \---resources
|   |       |   application.properties
|   |       |
|   |       +---static
|   |       \---templates

 

의존성 추가

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

    <dependency>
        <groupId>de.codecentric</groupId>
        <artifactId>spring-boot-admin-starter-server</artifactId>
        <version>2.1.1</version>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
</dependencies>

 

소스 코드

@SpringBootApplication
@EnableAdminServer
public class SpringAdminApplication {

    public static void main(String[] args) {
        SpringApplication.run(SpringAdminApplication.class, args);
    }

}

 

Client 

 

프로젝트 구조

+---src
|   +---main
|   |   +---java
|   |   |   \---com
|   |   |       \---tutorial
|   |   |           \---actuator
|   |   |                   ActuatorApplication.java
|   |   |
|   |   \---resources
|   |       |   application.properties
|   |       |
|   |       +---static
|   |       \---templates

 

의존성 추가

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

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

    <dependency>
        <groupId>de.codecentric</groupId>
        <artifactId>spring-boot-admin-starter-client</artifactId>
        <version>2.1.1</version>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
</dependencies>

 

소스 코드

@SpringBootApplication
@RestController
public class ActuatorApplication {

    @GetMapping("/hello")
    public String hello(){
        return "hello";
    }

    public static void main(String[] args) {
        SpringApplication.run(ActuatorApplication.class, args);
    }
}

 

application.properties

spring.boot.admin.client.url=http://localhost:8080
management.endpoints.web.exposure.include=*
server.port = 18080

 

서버를 구동한뒤 클라이언트를 admin 서버에 접속시키면 다음과 같이 클라이언트의 어플리케이션의 정보가 웹 상에 나타나게 됩니다.

 

 

 

참고자료 : https://www.inflearn.com/course/스프링부트



출처: https://engkimbs.tistory.com/809?category=767865 [새로비]