본문 바로가기

Spring/Springboot

[springboot] 액츄에이터(actuator)

 

 

 

 

1. 의존성 추가

// build.gradle

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

 

 

2. 

 

 

 

액츄에이터가 제공하는 수 많은 기능을 확인할 수 있음

액츄에이터가 제공하는 기능 하나하나를 엔드포인트라고하고 health는 헬스 정보를 beans는 스프링 컨테이너에 등록된 빈을 보여줌

{
  "_links": {
    "self": {
      "href": "http://localhost:8080/actuator",
      "templated": false
    },
    "beans": {
      "href": "http://localhost:8080/actuator/beans",
      "templated": false
    },
    "caches-cache": {
      "href": "http://localhost:8080/actuator/caches/{cache}",
      "templated": true
    },
    "caches": {
      "href": "http://localhost:8080/actuator/caches",
      "templated": false
    },
    "health": {
      "href": "http://localhost:8080/actuator/health",
      "templated": false
    },
    "health-path": {
      "href": "http://localhost:8080/actuator/health/{*path}",
      "templated": true
    },
    "info": {
      "href": "http://localhost:8080/actuator/info",
      "templated": false
    },
    "conditions": {
      "href": "http://localhost:8080/actuator/conditions",
      "templated": false
    },
    "configprops-prefix": {
      "href": "http://localhost:8080/actuator/configprops/{prefix}",
      "templated": true
    },
    "configprops": {
      "href": "http://localhost:8080/actuator/configprops",
      "templated": false
    },
    "env": {
      "href": "http://localhost:8080/actuator/env",
      "templated": false
    },
    "env-toMatch": {
      "href": "http://localhost:8080/actuator/env/{toMatch}",
      "templated": true
    },
    "loggers": {
      "href": "http://localhost:8080/actuator/loggers",
      "templated": false
    },
    "loggers-name": {
      "href": "http://localhost:8080/actuator/loggers/{name}",
      "templated": true
    },
    "heapdump": {
      "href": "http://localhost:8080/actuator/heapdump",
      "templated": false
    },
    "threaddump": {
      "href": "http://localhost:8080/actuator/threaddump",
      "templated": false
    },
    "metrics-requiredMetricName": {
      "href": "http://localhost:8080/actuator/metrics/{requiredMetricName}",
      "templated": true
    },
    "metrics": {
      "href": "http://localhost:8080/actuator/metrics",
      "templated": false
    },
    "scheduledtasks": {
      "href": "http://localhost:8080/actuator/scheduledtasks",
      "templated": false
    },
    "mappings": {
      "href": "http://localhost:8080/actuator/mappings",
      "templated": false
    }
  }
}

 

 

엔드포인트 설정

1. 엔드포인트 활성화

해당 기능 자체를 사용할지 말지 on/off 선택하는 것

엔드포인트 노출은 활성화된 엔드포인트를 HTTP에 노출할 지 아니면 JMX에 노출할 지 선택하는 것

엔드포인트를 활성화 하고 추가로 HTTP를 통해서 웹에 노출할지, JMX에 노출할 지 두 위치에 모두 노출할 지 설정해야함

// application.yml

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

 

 

특정 엔드포인트 활성화

management.endpoint.{엔드포인트명}.enable=true

 

특정 엔드포인트 비활성화

// application.yml

management:
  endpoints:
    web:
      exposure:
        include: "*"
        exclude: "{엔드포인트명}"

 

2. 엔드포인트 노출

활성화가 되어 있어야 노출이 됨

엔드포인트는 대부분 기본으로 활성화 되어있음(shutdown 제외), 노출이 되어 있지 않을 뿐

노출할 엔드포인트를 선택하면 됨

HTTP와 JMX를 선택할 수 있는데, 보통 JMX는 잘 사용하지 않으므로 HTTP에 어떤 엔드포인트를 노출할 지 선택하면 됨

 

cf) JMX?

더보기

JMX(Java Management eXtensions)는 응용 프로그램(소프트웨어)/객체/장치 (프린터 등) 및 서비스 지향 네트워크 등을 감시 관리를 위한 도구를 제공하는 자바 API이다.

 

application.yml

"*" 옵션은 모든 엔드포인트를 웹에 노출하는 것

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

 

 

엔드포인트

엔드포인트를 통해서 개발자는 애플리케이션 내부의 수 많은 기능을 관리하고 모니터링할 수 있음

 

스프링 부트에서 기본으로 제공하는 다양한 엔드포인트

beans

스프링 컨테이너에 등록된 스프링 빈을 보여줌

conditions

condition을 통해서 빈을 등록할 때 평가 조건과 일치하거나 일치하지 않은 이유를 표시

 

 

configprops

@ConfigurationProperties를 보여줌

 

env

Environment 정보를 보여줌

 

health

애플리케이션 헬스 정보를 보여줌

 

httpexchanges

HTTP 호출 응답 정보를 보여줌 

HttpExchangeRepository를 구현한 빈 별도 등록 필요

 

 

info

애플리케이션 정보를 보여줌

 

loggers

애플리케이션 로거 설정을 보여주고 변경할 수 있음

 

 

metrics

애플리케이션의 매트릭 정보를 보여줌

cpu 사용률 확인

 

 

mappings

@RequestMapping 정보를 보여줌

 

threaddump

스레드 덤프를 실행해서 보여줌

 

shutdown

애플리케이션을 종료함

이 기능은 기본으로 비활성화 되어 있음

 

공식 메뉴얼