[Spring Boot] Chapter.11 액추에이터 활용하기

굿거리·2023년 7월 2일
0

🧡 액추에이터

애플리케이션을 개발하는 단계를 지나 운영 단계에 접어들면 애플리케이션이 정상적으로 동작하는지 모니터링하는 환경을 구축하는 것이 중요하다. 스프링 부트 액추에이터는 HTTP 엔드포인트나 JMAX를 활용해 애플리케이션을 모니터링하고 관리할 수 있는 기능을 제공한다.

  • JMX
    JMX(Java Management Extensions는 실행 중인 애플리케이션의 상태를 모니터링하고 설정을 변경할 수 있게 해주는 API다. JMX를 통해 리소스 관리를 하려면 MBeans(Managed Beans)를 생성해야 한다.

💛 엔드포인트
액추에이터의 엔드포인트는 애플리케이션의 모니터링을 사용하는 경로이다. 스프링 부트에는 여러 내장 엔드포인트가 포함되어 있으며, 커스텀 엔드포인트를 추가할 수도 있다. 액추에이터를 추가하면 기ㅗㄴ적으로 엔드포인트 RUL로 /actuator가 추가되며 이 뒤에 경로를 추가해 상세 내역에 접근한다. 만약 /actuator 경로가 아닌 다른 경로로 접근하고 싶다면 application.properties 파일에 작성한다.

// application.properties
management.endpotins.web.base-path=/custom-path

💚 엔드포인트 리스트

  • `auditevents : 호출된 AUdit 이벤트 정보를 표시한다. AuditEvenRepository 빈이 필요하다.
  • beans : 애플리케이션에 있는 모든 스프링 빈 리스트를 표시한다.
  • caches : 사용 가능한 캐시를 표시한다.
  • conditions : 자동 구성 조건 내역을 생성한다.
  • cofigprops : @ConfigurationProperties의 속성 리스트를 표시한다.
  • env : 애플리케이션에서 사용할 수 있는 환경 속성을 표시한다.
  • health : 애플리케이션의 상태 정보를 표시한다.
  • httptrace : 가장 최근에 이뤄진 100건의 요청 기록을 표시한다. HttpTraceRepository 빈이 필요하다.
  • info : 애플리케이션의 정보를 표시한다.
  • integrationgraph : 스프링 통합 그래프를 표시한다. spring-integration-core 모듈에 대한 의존성을 추가해야 동작한다.
  • loggers : 애플리케이션의 로거 구성을 표시하고 수정한다.
  • metrics : 애플리케이션의 메트릭 정보를 표시한다.
  • mappings : 모든 @RequestMapping의 매핑 정보를 표시한다.
  • quartz : Quartz 스케줄러 작업에 대한 정보를 표시한다.
  • scheduledtasks : 애플리케이션에서 예약된 작업을 표시한다.
  • sessions : 스프링 세션 저장소에서 사용자의 세션을 검색하고 삭제할 수 있다. 스프링 세션을 사용하는 서블릿 기반 웹 애플리케이션이 필요하다.
  • shutdown : 애플리케이션을 정상적으로 종료할 수 있다. 기본값은 비활성화 상태이다.
  • startup : 애플리케이션이 시작될 때 수집된 시작 단계 데이터를 표시한다. BufferingApplicationStartup으로 구성된 스프링 애플리케이션이 필요하다.
  • threaddump : 스레드 덤프를 수행한다.

Spring MVC, Spring WebFlux, Jersey를 사용한다면 추가로 다음과 같은 엔드포인트를 사용할 수 있다.

  • heapdump : 힘 덤프 파일을 반환한다. 핫스팟(HotSpot) VM 상에서 hprof 포맷의 파일이 반환되며, OpenJ9 JVM에서는 PHD 포맷 파일을 반환한다.
  • jolokia : Jolokia가 클래스패스에 있을 때 HTTP를 통해 JMX 빈을 표시한다. jolokia-core 모듈에 대한 의존성 추가가 필요하며, WebFlux에서는 사용할 수 없다.
  • logfile : logging.file.name 또는 logging.gile.path 속성이 설정돼 있는 경우 로그 파일의 내용을 반환한다.
  • Prometheus : Prometheus 서버에서 스크랩 할 수 있는 형식으로 메트릭을 표시한다. micrometer-registry-prometheus 모듈의 의존성 추가가 필요하다.

엔드포인트는 활성화 여부와 노출 여부를 설정할 수 있다. 활성화는 기능 자체를 활성화할 것인지를 결정하는 것으로, 비활성화된 엔드포인트는 컨텍스트에서 완전히 제거된다. 엔드포인트를 활성화하려면 application.properties 파일에 속성을 추가하면 된다.

💙 애플리케이션 상태(/health)

/health 엔드포인트를 활용하면 애플리케이션의 상태를 확인할 수 있다. 별도의 설정 없이 다음 URl에 접근하면 다음과 같은 결과를 확인할 수 있다.

// http://localhost:8080/actuator/health
{"status":"UP"}

현재는 UP만 표시되지만 status 속성에서 확인할 수 있는 상태 지표는 다음과 같다.

  • UP
  • DOWN
  • UNKNOWN
  • OUT_OF_SERVICE

이 결과는 주로 네트워크 계층 중 L4(Loadbalancing) 레벨에서 애플리케이션의 상태를 확인하기 위해 사용된다.

💜 빈 정보 확인(/beans)
액추에이터의 /beans 엔드포인트를 사용하면 스프링 컨테이너에 등록된 스프링 빈의 전체 목록을 표시할 수 있다. 이 엔드포인트는 JSON 형식으로 빈의 정보를 반환한다. 다만 스프링은 워낙 많은 빈이 자동으로 등록되어 운영되기 때문에 실제로 내용을 출력해서 육안으로 내용을 파악하기는 어렵다.
http://localhost:8080/actuator/beans

🧡 스프링 부트의 자동설정 내역 확인(/conditions)
스프링 부트의 자동설정(AutoConfiguration) 조건 내역을 확인하려면 /conditions 엔드포인트를 사용한다. 다음 URL로 접근하면 내용을 확인할 수 있다.
http://localhost:8080/actuator/conditions

출력 내용은 크게 positiveMatchesnegativeMatches 속성으로 구분되는데, 자동설정의@Conditional에 따라 평가된 내용을 표시한다.

💛 스프링 환경변수 정보(/env)
/env 엔드포인트는 스프링의 환경변수 정보를 확인하는 데 사용된다. 기본적으로 application.properties 파일의 변수들이 표시되며, OS, JVM의 환경변수도 함께 표시된다.

http://localhost:8080/actuator/env
만약 일부 내용에 포함된 민감한 정보를 가리기 위해서는 management.endpoint.env.keys-to-sanitize 속성을 사용하면 된다. 해당 속성에 넣을 수 있는 값은 단순 문자열이나 정규식을 활용한다.

💚 로깅 레벨 확인(/loggers)
애플리케이션의 로깅 레벨 수준이 어떻게 설정돼 있는지 확인하려면 /loggers 엔드포인트를 사용할 수 있다. 다음 URL에 접근하면 결과가 출력된다.

httpL//localhost:8080/actuator/loggers

profile
개발자를 향해

0개의 댓글

관련 채용 정보