액추에이터

유요한·2023년 2월 24일
0

Spring Boot

목록 보기
13/25
post-thumbnail

액추에이터 활용하기

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

프로젝트 생성 및 액추에이터 종속성 추가

dependencies {
	// 스프링 액추에이터는 애플리케이션에 대한 모니터링 정보를 엔드포인트를 통해 제공한다.
    implementation 'org.springframework.boot:spring-boot-starter-actuator'

이렇게 생성되는 것을 볼 수 있습니다.

스프링 actuator

스프링 액추에이터는 애플리케이션에 대한 모니터링 정보를 엔드포인트를 통해 제공한다. db, matrix 등의 상태 정보를 제공하며 만약 actuator/health(기본값) 을 통해 접근하면 애플리케이션의 건강 상태를 (up, down.. 등으로) 제공 받을 수 있다. 또한 다양한 설정을 통해 사용자에 맞게 수정 가능하다.

엔드포인트

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

자주 활용되는 액추에이터의 앤드포인트는 다음과 같습니다.

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

앤드포인트 활성화 여부와 노출 여부를 설정할 수 있습니다. 활성화는 기능 자체를 활성화할 것인지를 결정하는 것으로, 비활성화된 엔드포인트는 애플리케이션 컨텍스트에서 완전히 제거됩니다. 엔드포인트를 활성화하려면 application.properties에 속성을 추가합니다. 간단한 예로 다음과 같이 작성할 수 있습니다.

## 엔트포인트 활성화
management.endpoint.shutdown.enabled=true
management.endpoint.caches.enabled=false

위 예제의 설정은 엔드포인트의 shutdown 기능은 활성화하고 caches 기능은 비활성화하겠다는 의미입니다.

또한 액추에이터 설정을 통해 기능 활성화/비활성화가 아니라 엔드포인트의 노출 여부만 설정하는 것도 가능합니다. 노출 여부는 JMX를 통한 노출과 HTTP를 통한 노출이 있어 다음과 같이 설정이 구분됩니다.

# 엔드포인트 노출 설정
# HTTP 설정
management.endpoints.web.exposure.include=*
management.endpoints.web.exposure.exclude=threaddump, heapdump
# JMX 설정
management.endpoints.jmx.exposure.include=*
management.endpoints.jmx.exposure.exclude=threaddump, heapdump

web과 jmx 환경에서 엔드포인트를 전체적으로 노출하며, 스레드 덤프와 힙 덤프 기능은 제외하겠다는 의미입니다. 엔드포인트는 애플리케이션에 관한 민감한 정보를 가지고 있어서 노출 설정을 신중하게 고려해야 합니다.

노출 설정에 대한 기본값

server:
  port: 9090

---
management:
  endpoint:
    # true로 설정하면, 애플리케이션의 상태를 나타내는 /actuator/health 엔드포인트가 활성화됩니다.
    # 이 엔드포인트는 일반적으로 애플리케이션의 건강 상태를 나타내는데 사용됩니다.
    health:
      enabled: false
    # true로 설정하면 애플리케이션의 빈정보를 나타내는 /actuator/beans 엔드포인트 활성화
    beans:
      enabled: false
      # true로 설정하면 애플리케이션의 캐시 정보를 나타내는 /actuator/caches 엔드포인트가 활성화됩니다.
    caches:
      enabled: true
      # true로 설정하면, /actuator/heapdump 엔드포인트를 통해 힙 덤프를 생성할 수 있습니다.
      # 이는 애플리케이션의 힙 메모리 상태를 분석하기 위해 사용됩니다.
    heapdump:
      enabled: true
  # 활성화할 관리 엔드포인트를 명시적으로 지정하는데 사용됩니다.
  endpoints:
    web:
      exposure:
        # *는 모든 엔드포인트를 활성화하고, exclude에 명시된 엔드포인트는 제외됩니다.
        include: "*"
        exclude:
          - health
          - beans

이렇게 설정할 때

기존꺼보다 더 많이 나오고 healthbeans가 안나오는 것을 볼 수 있습니다.

그러면 include랑 exclude랑 같이하면 뭐가 우선순위가 있을까?
exclude가 우선순위가 더 높습니다.

보안 문제

actuator를 통해 application의 다양한 정보를 확인할 수 있고 특정 endpoint에서는 실시간 변경도 가능하게 해줍니다. 따라서 보안상 문제가 있을 수 있으므로 spring security 혹은 이와 유사한 방법으로 위험을 해결하도록 해야합니다. 가장 쉬운 방법은 security를 통해 /actuator url에 대해 http basic auth을 적용해서 id, pw가 맞아야만 pass되도록 하면 됩니다.

액추에이터 기능 살펴보기

액추에이터를 활성화하고 노출 지점도 설정하고 나면 애플리케이션에서 해당 기능을 사용할 수 있습니다. 모든 기능을 살펴보기 위해서는 다른 의존성을 추가하거나 몇 가지 설정을 추가해야하기 때문에 기능 추가 없이 액추에이터 설정만으로 볼 수 있는 기능을 살펴보겠습니다.

애플리케이션 기본정보(/info)

액추에이터의 /info 엔드포인트를 활용하면 가동 중인 애플리케이션의 정보를 볼 수 있습니다. 제공하는 정보의 범위는 애플리케이션에서 몇 가지 방법을 거쳐 제공할 수도 있으나 application.properties 파일에 info.로 시작하는 속성 값들을 정의하는 것이 가장 쉬운 방법입니다.

# 액추에이터 info 정보 설정
info.organization.name=wikibooks
info.contact.email=thinkground.flature@gamil.com
info.contact.phoneNumber=010-1234-5678

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

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

{"status" : "UP"}

만약 애플리케이션에 데이터베이스가 연동돼 있으면 인프라 관련 상태까지 확인할 수 있습니다.

빈 정보 확인(/beans)

액추에이터의 /beans 엔드포인트를 사용하면 스프링 컨테이너에 등록된 스프링 빈의 전체 목록을 표시할 수 있습니다. 이 엔드포인트는 JSON 형식으로 빈의 정보를 반환합니다.

스프링 부트의 자동설정 내역 확인(/conditions)

스프링 부트의 자동설정 조건 내역을 확인하려면 /conditions 엔드포인트를 사용합니다.

스프링 환경변수 정보(/env)

/env 엔드포인트는 스프링의 환경변수 정보를 확인하는 데 사용됩니다. 기본적으로 application.yml 파일의 변수들이 표시되며, OS, JVM의 환경변수도 함께 표시됩니다. 만약 일부 내용에 포함된 민감한 정보를 가리기 위해서는 management.endpoint.env.keys-to-sanitize 속성을 사용하면 됩니다. 해당 속성에 넣을 수 잇는 값은 단순 문자열이나 정규식을 활용합니다.

로깅 레벨 확인(/loggers)

애플리케이션 로깅 레벨 수준이 어떻게 설정되어 있는지 확인하려면 /loggers 엔드포인트를 사용할 수 있습니다.

endpoint cache

http에 etag와 같은 캐시 방법이 존재하듯이 endpoint에도 cache방법이 있습니다.

업로드중..

이런식으로 하면되는데 시가은 하루 1d, 1시간 1h, 1분 1m, 1초 1s이렇게 설정하면 됩니다.

profile
발전하기 위한 공부

0개의 댓글