본문 바로가기

Spring/Spring

Spring boot Actuator를 이용하여 스프링 애플리케이션 정보 모니터링 하기 (java application state/performance check)

반응형

Spring boot Actuator

* 스프링 부트 2.0 레퍼런스 기준으로 작성했습니다.

spring boot actuator는 한 마디로 얘기하면 "스프링 부트 애플리케이션에서 제공하는 여러가지 정보를 모니터링하기 쉽게 해주는 기능"이다.

그 정보가 무엇이냐면 컨텍스트 빈, 환경 설정, 자동 설정, JVM 상태 등의 것이다.

여기서 필요한 정보를 얻어서 가공할 수 있고, 모니터링할 수도 있는 것이다.

또한 내가 만든 어떠한 값들을 actuator를 통해서 제공할 수도 있다. (custom endpoint)

아래부터는 Actuator를 사용하기 위해서 어떻게 해야하고, 어떤 정보를 볼 수 있는지 테스트해보려고한다. 


Actuator settings

Actuator를 사용하는 법은 아주 간단하다.

- maven dependency에 아래의 내용을 추가하기만 하면 된다.

1
2
3
4
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>


- gradle도 아래의 내용을 추가하면 된다.

1
2
3
dependencies {
    compile("org.springframework.boot:spring-boot-starter-actuator")
}


spring boot 1.x 때는 추가적으로 무언가 해줄 필요는 없었지만 2.x 부터는 default로 대부분의 정보를 노출하지 않는 것으로 되어 있기 때문에 해당 부분을 변경해줘야한다.

.properties파일이나 .yml/.yaml파일에서 아래의 property를 바꿔주며 된다.

1
management.endpoints.web.exposure.include=*



1
2
3
4
5
management:
    endpoints:
        web:
            exposure:
                include: "*"


모든정보(*)를 포함하여 노출 하겠다. 라고 설정한 것이다. 만약 보안 때문에 노출하고 싶지 않은 부분은 아래처럼 하면 된다.

1
management.endpoints.web.exposure.exclude=env,beans


환경 설정 정보와 스프링 빈들은 제외하고 노출하겠다. 라고 설정한 것이다.

(아 미리 말은 안했지만 web에서 정보를 확인할 수 있기 때문에 중간에 .web.이 들어간 것이고 jmx? 에서도 확인할 수 있다고 한다.)

+ exclude 속성은 include 속성보다 우위에 있기 때문에 exclude로 막아놓으면 include로 아무리 정보 제공을 하려고해도 안먹힌다. 따라서 굳이 두 줄을 쓸 필요없이 노출하고 싶은 정보만 따로 빼주면 헷갈리지 않고 좋을 것 같다.

+ 스프링 시큐리티를 적용해서 Admin같이 특정 권한이 있는 사람만 접근하게 할 수도 있다. (자세한 내용은 살펴보지 않았다.)


이제 설정을 마쳤으니 확인하는 것만 남았다.

기본 경로뒤에 /actuator라고 치면 노출하고 있는 정보들의 ID가 나오게 된다. 해당 ID에 있는 정보를 알고 싶으면 기본 경로뒤에 /actuator/beans 이렇게 치면 나온다.

(json으로 정보가 제공되는데 사람이 읽기에는 조금 불편하게 되어있다. 따라서 GUI로 구성된 actuator 프로젝트를 가져와서 모니터링해보는 것도 좋고, 그냥 jsonviewer 같은 크롬 확장프로그램이나 웹에서 json을 예쁘게 보여주는 사이트를 이용해서 봐도 좋다.)

잠깐 드는 생각에 스프링 애플리케이션의 정보를 노출한다는 것이 굉장히 보안상 나쁠 것으로 생각된다.

아무 사이트에 가서 /actuator/heapdump 이렇게 쳐보면서 메모리 정보를 훔쳐 볼 수 있기 때문이다.

따라서 아래와 같이 경로와 ID명을 변경할 수도 있다.

1
2
management.endpoints.web.base-path=/application
management.endpoints.web.path-mapping.health=healthcheck


위와 같이 하면 기본 경로에 /application/healthcheck 를 붙여서 들어가면 /actuator/health 정보를 볼 수 있다.


스프링 부트 Actuator에서 기본으로 제공하는 정보들에 대한 설명은 너무 길어서 아래를 참조해서 사용하면 될 것이다. (출처 : http://www.baeldung.com/spring-boot-actuators)

  • /auditevents – lists security audit-related events such as user login/logout. Also, we can filter by principal or type among others fields
  • /beans – returns all available beans in our BeanFactory. Unlike /auditevents, it doesn’t support filtering
  • /conditions – formerly known as /autoconfig, builds a report of conditions around auto-configuration
  • /configprops – allows us to fetch all @ConfigurationProperties beans
  • /env – returns the current environment properties. Additionally, we can retrieve single properties
  • /flyway – provides details about our Flyway database migrations
  • /health – summarises the health status of our application
  • /heapdump – builds and returns a heap dump from the JVM used by our application
  • /info – returns general information. It might be custom data, build information or details about the latest commit
  • /liquibase – behaves like /flyway but for Liquibase
  • /logfile – returns ordinary application logs
  • /loggers – enables us to query and modify the logging level of our application
  • /metrics – details metrics of our application. This might include generic metrics as well as custom ones
  • /prometheus – returns metrics like the previous one, but formatted to work with a Prometheus server
  • /scheduledtasks – provides details about every scheduled task within our application
  • /sessions – lists HTTP sessions given we are using Spring Session
  • /shutdown – performs a graceful shutdown of the application
  • /threaddump – dumps the thread information of the underlying JVM

관심있는 정보가 많은 metrics를 보면 system.cpu.usage, jvm.memory.used, tomcat.global.request, jvm.classes.loaded등 의 퍼포먼스와 관련된 것 혹은 정상적으로 동작하는 지등을 알 수 있는 정보들이 많이 있다.

물론 위와 같이 beans를 보면 스프링부트 애플리케이션이 사용하는 beans를 확인 할 수 있다. (사람이 직접확인 하기 어려우니 아래와 같이 보면 된다.)

임시로 만든 bean이 올라가 있는 것을 확인할 수 있다.

우선은 "이런 것들을 확인할 수 있다" 정도로만 테스트를 해놓으면 나중에 뭔가 체크해야할 때 actuator를 사용해서 받아 볼 수 있을 것이다.

반응형