ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 액츄에이터와 액츄에이터 엔드포인트
    스프링/스프링부트 2023. 10. 1. 13:16

    개발이 끝나고 운영 단계에서 실시간 모니터링을 하는 것은 매우 중요한 일이다.

     

    스프링 부트가 제공하는 액츄에이터는 프로덕션 준비 기능을 매우 편리하게 사용할 수 있는 기능들을 제공한다.

    또한 마이크로미터, 프로메테우스, 그라파나 같은 최근 유행하는 모니터링 시스템과 매우 쉽게 연동할 수 있는 기능도 제공한다.

     

     

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

    build.gradle에서 액츄에이터를 위와 같이 추가할 수 있다.

     

     

     

    application.yml

    management:
      endpoints:
        web:
          exposure:
            include: "*"

    appication.yml에 다음과 같이 "*"을 입력하면 actuator의 모든 속성을 확인할 수 있다.

     

    여기서 http://localhost:8080/actuator/beans 등 href 값으로 나와있는 url로 접근하면 해당하는 속성을 볼 수 있다.

     

     http://localhost:8080/actuator/beans 는 스프링에 등록된 빈들을 관찰할 수 있는 액츄에이터 페이지이다.

     

     

    스프링 빈이 잘 주입되었는지 확인하기 위해서 이전에는 로그를 찍거나 그랬는데, 이제는 액츄에이터 페이지에 접근해서 스프링 빈이 주입되었는지 확인할 수 있다.

     

    health는 헬스 정보(애플리케이션이 잘 살아있는지)를, beans는 스프링 컨테이너에 등록된 빈을 보여준다.

     

     

    여기서 액츄에이터가 제공하는 기능 하나하나를 엔드포인트라 한다.

    http://localhost:8080/actuator/health : 애플리케이션 헬스 정보를 보여준다.
    http://localhost:8080/actuator/beans : 스프링 컨테이너에 등록된 빈을 보여준다.

     

     

     

     

     

    엔드포인트 설정

    엔드포인트를 사용하기 위한 2가지 과정

    • 엔드포인트 활성화 - 해당 기능 자체를 사용할지 말지 on / off 하는 것
    • 엔드포인트 노출 - 활성화된 엔드포인트를 HTTP에 노출할지 JMX에 노출할지 선택(둘 다 노출도 가능)

    활성화가 off 되어있으면 노출도 되지 않는다.

    엔드 포인트트는 대부분 기본으로 활성화 되어있다.

    -> 따라서 어떤 엔드포인트를 노출할 지 선택하면 되는데 JXM은 잘 사용되지 않아서 HTTP에 어떤 엔드포인트를 노출할지만 정하면 된다.

     

     

    application.yml - 모든 엔드포인트를 웹에 노출

    management:
      endpoints:
        web:
          exposure:
            include: "*"

    위에서 봤던 것처럼 "*" 옵션으로 모든 엔드포인트를 웹에 노출할 수 있다.

     

     

    application.yml - shutdown 엔드포인트 활성화

    management:
      endpoint:
        shutdown:
          enabled: true
      endpoints:
        web:
          exposure:
            include: "*"

    shutdown이라는 기능은 원래 꺼져있는데 enabled: true를 통해 활성화할 수 있다.

     

    이 기능은 POST 매핑으로 localhost:8080/actuator/shutdown에 접근하면 애플리케이션을 강제로 종료한다.

    -> 이거는 해킹 위험이 있기 때문에 진짜 꼭 필요할 경우에만 사용해야 한다.

     

    (management.endpoints는 엔드포인트 전체를 설정할 때, endpoint는 개별을 설정할 때 사용된다.)

     

     

    application.yml - 모든 엔드포인트를 JMX에 노출

    management:
     endpoints:
       jmx:
         exposure:
           include: "health,info"

    웹이 아니라 jmx에 노출하려면 web을 jmx로 바꿔주면 된다.

     

     

    application.yml - env, beans를 제외한 모든 엔드포인트를 웹에 노출

    management:
     endpoints:
       web:
         exposure:
           include: "*"
           exclude: "env,beans"

    엔드포인트를 노출할 때 제외하고 싶은 엔드포인트가 있다면 exclude로 설정하면 된다.

     

     

     

     

     

    엔드포인트의 종류들

    엔드포인트가 너무 많지만 자주 사용하는 것들 위주로 정리하겠다.

     

     

    엔드포인트 목록

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

     

    여기서 중요하고 가장 많이 사용되는 health , info , loggers , httpexchanges , metrics 는 별도로 포스팅을 할 예정이다.

     

    '스프링 > 스프링부트' 카테고리의 다른 글

    애플리케이션 정보 - info  (0) 2023.10.01
    헬스 정보 - health  (0) 2023.10.01
    @Profile  (0) 2023.09.30
    YAML  (0) 2023.09.30
    @ConfigurationProperties - 외부 설정 사용  (0) 2023.09.30
Designed by Tistory.