스프링 부트 - 액추에이터

xellos·2023년 4월 7일
2

Spring

목록 보기
6/6

액추에이터는 스프링 부트가 제공하는 기능으로 지표 수집, 추적, 감사 등의 모니터링을 쉽게 할 수 있는 다양한 편의 기능을 제공한다. 또한 최근 유행하는 마이크로미터, 프로메테우스, 그라파나 같은 다양한 모니터링 시스템과 매우 쉽게 연동할 수 있는 기능도 제공한다.

들어가기 전: 이 글은 [인프런] 에서 '김영한님의 스프링 부트 - 핵심 원리와 활용'을 수강하고 일부를 요약한 글입니다.

프로젝트 설정

  • 의존성 추가: pom.xml
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

시작

  • 의존성 추가 후 앱을 동작시키고 다음의 페이지로 가면 actuator 가 제공하는 서비스 목록을 확인할 수 있다: http://localhost:8080/actuator
  • 실행 결과
{	
  "_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
		} 
	} 
}
{"status": "UP"}

엔드포인트 설정

1) 모든 엔드 포인트를 웹에 노출

  • 아래의 옵션은 모든 엔드포인트를 웹에 노출하는 것이다.
  • shutdown 엔드포인트는 기본적으로 활성화되지 않기 때문에 노출도 되지 않는다.
management:
  endpoints:
    web:
      exposure:
        include: "*"

2) 특정 엔드포인트 노출

  • include: health, metrics 정보 노출
management:
  endpoints:
    web:
      exposure:
        include: health, metrics

  • exclude: env, beans 정보를 제외하고 모두 노출
management:
  endpoints:
    web:
      exposure:
        include: "*"
        exclude: env, beans

다양한 엔드포인트

아래는 자주 사용하는 기능 위주로 정리한 목록이다.

  • beans : 스프링 컨테이너에 등뢱된 빈을 보여준다.
  • conditions : condition 을 통해서 빈을 등록할 때 평가 조건과 일치하거나 일치하지 않는 이유를 표시한다.
  • configprops : @ConfigurationProperties 를 보여준다.
  • env : Environment 정보를 보여준다.
  • health : 애플리케이션 상태 정보를 보여준다.
  • httpexchanges : HTTP 호출 응답 정보를 보여준다. HttpExchangeRepository 를 구현한 빈을 별도로 등록해야 한다.
  • info : 애플리케이션 정보를 보여준다.
  • loggers : 애플리케이션 로거 설정을 보여주고 변경도 가능하다.
  • metrics : 애플리케이션의 메트릭 정보를 보여준다.
  • mappings : @RequestMapping 정보를 보여준다.
  • threaddump : 쓰레드 덤프를 실행해서 보여준다.
  • shutdown : 애플리케이션을 종료한다. (Default: 비활성)

참고: https://docs.spring.io/spring-boot/docs/current/reference/html/actuator.html#actuator.endpoints


Health 정보

Health 정보를 사용하면 애플리케이션에 문제가 발생했을때 문제를 빠르게 인지할 수 있다.

1) 기본 동작

{"status": "UP"}

2) 상세 동작

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

  • 상세 옵션보기 설정
management:
  endpoint:
    health:
      show-details: always
  • 결과: 헬스 컴포넌트 중에 하나라도 문제가 있으면 전체 상태는 'DOWN'이 된다.
{
  "status": "UP",
  "components": {
    "clientConfigServer": {
    "status": "UP",
    "details": {...}
  },
  "db": {
    "status": "UP",
    "details": {
      "database": "MySQL",
      "validationQuery": "isValid()"
    }
  },
  "diskSpace": {
    "status": "UP",
    "details": {
      "total": 494384795648,
      "free": 368320262144,
      "threshold": 10485760,
      "exists": true
    }
  },
  "ping": {
    "status": "UP"
  }
	...
}

보안

1) 보안 주의

Actuator 가 제공하는 기능은 우리 애플리케이션 내부 정보를 너무 많이 노출한다. 따라서 외부 인터넷 망이 공개된 곳에 actuator의 엔드포인트를 공개하는 것은 보안상 좋은 방법이 아니다.

actuator 의 엔드포엔트들은 외부 인터넷에서 접근이 불가능하게 막고, 내부에서만 접근이 가능한 내부망을 사용하는 것이 안전하다.

2) 액추에이터를 다른 포트에서 실행

management:
  server:
    port: 9292

3) 엔드 포인트 경로 변경

management:
  endpoints:
  	web:
      base-path: "/manage"

4) 액추에이터 URL 경로에 인증설정

포트를 분리하는 것이 어렵고 어쩔 수 없이 외부 인터넷 망을 통해서 접근해야 한다면 /actuator 경로에서 서블릿 필터, 스프링 인터셉터 또는 스프링 시큐리티를 통해 인증된 사용자만 접근 가능하록 추가 개발이 필요하다.

0개의 댓글