섹션 8 : 액츄에이터

최용석·2024년 1월 24일
post-thumbnail

프로덕션 준비 기능

프로덕션을 운영에 배포할 때 준비해야 하는 비 기능적 요소들

  • 지표(metric), 추적(trace), 감사(auditing)
  • 모니터링

액츄에이터

스프링에서 제공하는 프로덕션 준비 기능

build.gradle - 추가

implementation 'org.springframework.boot:spring-boot-starter-actuator' //
actuator 추가 

엔드포인트 설정

    1. 엔드포인트 활성화 - 해당 기능 자체를 사용할지 말지 on, off를 선택
    1. 엔드포인트 노출 - HTTP에 노출할지, JMX에 노출할지를 선택

엔드포인트 활성화 + 엔드포인트 노출이 둘다 적용되어야 사용할 수 있다.

헬스 정보

헬스 정보는 단순히 애플리케이션이 요청에 응답을 할 수 있는지 판단하는 것을 넘어서 애플리케이션이 사용하는 데이터베이스가 응답하는지, 디스크 사용량에는 문제가 없는지 같은 다양한 정보들을 포함해서 만들어진다.

애플리케이션 정보

info 엔드포인트는 애플리케이션의 기본 정보를 노출한다.
기본으로 제공하는 기능들은 다음과 같다.

  • java : 자바 런타임 정보
  • os : OS 정보
  • env : Environment 에서 info. 로 시작하는 정보
  • build : 빌드 정보, META-INF/build-info.properties 파일이 필요하다.
  • git : git 정보, git.properties 파일이 필요하다.

로거

loggers 엔드포인트를 사용하면 로깅과 관련된 정보를 확인하고, 또 실시간으로 변경할 수도 있다.

더 자세히 조회하기

다음과 같은 패턴을 사용해서 특정 로거 이름을 기준으로 조회할 수 있다.
http://localhost:8080/actuator/loggers/{로거이름}

실시간 로그 레벨 변경

개발 서버는 보통 DEBUG 로그를 사용하지만, 운영 서버는 보통 요청이 아주 많기 때문에 DEBUG 로그까지 모두 출력하게 되면 성능이나 디스크에 영향을 주게 된다. 그래서 운영 서버는 중요하다고 판단되는 INFO 로그 레벨을 사용한다.
그런데 급하게 DEBUG 나 TRACE 로그를 남겨서 확인해야 확인하고 싶다면 어떻게 해야할까? 일반적으로는 로깅 설정을 변경하고, 서버를 다시 시작해야 한다.

loggers 엔드포인트를 사용하면 애플리케이션을 다시 시작하지 않고, 실시간으로 로그 레벨을 변경할 수 있다.

POST http://localhost:8080/actuator/loggers/{로거이름}
content/type 도 application/json 으로 전달해야 한다

{
 "configuredLevel": "TRACE"
}

액츄에이터와 보안

보안 주의

액츄에이터가 제공하는 기능들은 내부 정보를 너무 많이 노출하기 때문에 보안상 외부에서 접근을 제한하고, 내부에서만 접근 가능하도록 사용하는 것이 안전하다.

  • 포트 분리가 가능한 경우 - 액츄에이터를 다른 포트에서 실행
  • 포트 분리가 불가능한 경우 - 액츄에이터 URL 경로에 인증 설정(서블릿 필터 or 스프링 시큐리티를 통한 추가 개발이 필요)
profile
호기심이 많은 백엔드 개발자

0개의 댓글