본문 바로가기
Java, Kotlin, Spring/Spring, Spring Boot

Springboot - Actuator, 운영

by Wordbe 2021. 1. 21.
728x90

 

Springboot - Actuator

Actuator 는 스프링부트 운영 중 유용한 기능을 제공한다. 엔드포인트, 메트릭스, 모니터링 기능 등을 알아보자.

 

Endpoint

아래 ID에 해당하는 모듈들이 모두 활성화 된다.(shutdown 제외)

  • auditevents : 인증 정보 등록
  • beans : 빈들
  • conditions : 자동 설정 여부와 이유
  • configprops : application.properties 에 정의 가능한 프로퍼티들
  • env : 스프링 environment 를 등록
  • flyway : 마이그레이션 정보
  • liquibase : 마이그레이션 정보
  • health : 애플리케이션의 정상 가동 유무
  • httptrace : 최근 100개 HTTP 요청/응답
  • info : application 관련 된 임의 정보
  • loggers : 패키지 로깅 레벨, 운영 중 로깅 레벨 수정 가능
  • metrics : 현재 애플리케이션 제 3의 모니터링을 위한 공통 포맷, 수치 넘으면 알람 기능 설정 가능
  • mappings : 컨트롤러 매핑 정보
  • scheduletasks : 배치 정보 등
  • sessions : 세션 관련
  • threaddump : 쓰레드 덤프
  • shutdown : 비활성화 되어있음, 애플리케이션 최적의 종료기능 제공

web application (Spring MVC, WebFlux, Jersey 등) 이라면 추가 엔드포인트 제공

  • headdump : 헤드덤프 hprof 압축파일(GZip)
  • jolokia : JMX (Java Management Extensions) Bean 이 HTTP에서 제공
  • logfile : 로그파일
  • prometheus : metric 정보를 프로메테우스 서버에서 사용가능한 포맷으로 제공

활성화와 공개여부(expose)는 따로 구분되어 있다. 위 엔드포인트 중 JMX 의 경우는 대부분 다 공개가 되어있지만, 웹(HTTP 를 사용할 때)은 공개된 정보가 health와 info 만 있다. 보안을 위함이다.

http://localhost:8080/actuator 에서 확인할 수 있다. HATEOAS 규약을 잘 맞추어서 self 에대한 하이퍼링크가 담겨있다.

위 주소를 요청하면 서버는 아래 json 응답을 내보낸다.

{
  "_links": {
    "self": {
      "href": "http://localhost:8080/actuator",
      "templated": false
    },
    "health-path": {
      "href": "http://localhost:8080/actuator/health/{*path}",
      "templated": true
    },
    "health": {
      "href": "http://localhost:8080/actuator/health",
      "templated": false
    },
    "info": {
      "href": "http://localhost:8080/actuator/info",
      "templated": false
    }
  }
}

이런 기본 엔드포인트(health, info) 정보는 공개가 되어 있다.

 

  • JConsole (JMX)
$ jconsole

작은 툴박스가 나오는데, 다양한 엔드포인트를 확인, 제어할 수 있다.

  • VisualVM

visualvm 을 다운받아 실행한다. JMX와 비슷하지만 더 큰화면에 예쁘고 깔끔한 화면을 제공한다.

  • HTTP 사용

웹 브라우저로 볼 수도 있다. 그런데 눈으로보기 상당히 힘들다. 공개로 한 순간 외부에서 볼 수도 있으니 해당 페이지들은 스프링 시큐리티로 막아놓는 것이 좋다.

application.properties

# Enpoint 모두 공개
management.endpoints.web.exposure.include=*

# 예) env, beans 는 공개 제외
management.endpoints.web.exposure.exclude=env,beans

http://localhost:18080/actuator/conditions 등으로 json 정보를 볼 수 있다.

 

 


Spring-Boot-Admin

스프링 부트 Actuator에 대한 깔끔한 UI 를 제공하는 어플리케이션이다.

먼저 인텔리제이 새 프로젝트를 열어서 어드민 서버를 띄워야 한다.

pom.xml

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

메인 애플리케이션 클래스 위에는 @EnableAdminServer 어노테이션을 붙이면 된다.

 

클라이언트에서는 아래 의존성을 추가한다.

pom.xml

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

그리고 어플리케이션 프로퍼티에 아래를 추가한다.

# actuator 모든 endpoint 를 공개한다.
management.endpoints.web.exposure.include=*

# admin server url을 등록한다.
spring.boot.admin.client.url=http://localhost:8080

# 서버와 포트가 겹치므로, 클라이언트 url을 18080으로 바꿔준다.
server.port=18080

 

 

 

 

728x90

'Java, Kotlin, Spring > Spring, Spring Boot' 카테고리의 다른 글

Springboot - Spring REST Client  (0) 2021.01.21
Springboot - Security  (0) 2021.01.21
Spring Data - MongoDB  (0) 2021.01.21
Spring Data - Redis  (0) 2021.01.21
Spring Data - Neo4j 사용  (0) 2021.01.20

댓글