본문 바로가기

Spring

Spring Actuator 란 무엇일까

728x90
반응형

Actuator


명사로 동작시키는 것을 의미. 무언가를 움직이거나 제어하는 기계 장치

스프링 액추에이터는 HTTP 엔드포인트나 JMX로 실행주인 앱의 모니터링과 관리기능을 제공한다.

의존성을 추가하면 쉽게 사용이 가능하다

 

// maven
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>


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

 

서버 실행 후에 actuator 엔드포인트로 호출하면 볼 수 있다.

 

http://localhost:8080/actuator

HTTP/1.1 200 
Content-Type: application/vnd.spring-boot.actuator.v3+json
Transfer-Encoding: chunked
Date: Sun, 29 Oct 2023 08:26:24 GMT
Connection: close

{
  "_links": {
    "self": {
      "href": "http://localhost:8080/actuator",
      "templated": false
    },
    "health": {
      "href": "http://localhost:8080/actuator/health",
      "templated": false
    },
    "health-path": {
      "href": "http://localhost:8080/actuator/health/{*path}",
      "templated": true
    }
  }
}

기본적으로 액추에이터는 /actuator 엔드포인트 아래에 그룹화되어 있다.

애플리케이션 보안을 위협하는 악의적인 사람에게 노출되면 활용가치가 높으므로 제한해서 사용하는 것이 좋다.

(health, info와 같은 것으로 제한 )

// env, info, health만 노출
management.endpoints.web.exposure.include=env,info,health

// 전체 엔드포인트 모두 노출 
management.endpoints.web.exposure.include=*

 

전부 노출 후에 actuator를 호출 했을 때

HTTP/1.1 200 
Content-Type: application/vnd.spring-boot.actuator.v3+json
Transfer-Encoding: chunked
Date: Sun, 29 Oct 2023 08:29:29 GMT
Connection: close

{
  "_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-path": {
      "href": "http://localhost:8080/actuator/health/{*path}",
      "templated": true
    },
    "health": {
      "href": "http://localhost:8080/actuator/health",
      "templated": false
    },
    "info": {
      "href": "http://localhost:8080/actuator/info",
      "templated": false
    },
    "conditions": {
      "href": "http://localhost:8080/actuator/conditions",
      "templated": false
    },
    "configprops": {
      "href": "http://localhost:8080/actuator/configprops",
      "templated": false
    },
    "configprops-prefix": {
      "href": "http://localhost:8080/actuator/configprops/{prefix}",
      "templated": true
    },
    "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": {
      "href": "http://localhost:8080/actuator/metrics",
      "templated": false
    },
    "metrics-requiredMetricName": {
      "href": "http://localhost:8080/actuator/metrics/{requiredMetricName}",
      "templated": true
    },
    "scheduledtasks": {
      "href": "http://localhost:8080/actuator/scheduledtasks",
      "templated": false
    },
    "mappings": {
      "href": "http://localhost:8080/actuator/mappings",
      "templated": false
    }
  }
}

 

actuator 조회 정보 

/actuator/beans

애플리케이션에서 생성한 모든 스프링 빈

 

/actuator/conditions

스프링 빈의 생성조건이 충족됐는지 여부 (Conditions Evaluation Report)

 

/actuator/configprops

애플리케이션에서 액세스할 수 있는 모든 Environment속성

 

/actuator/health

health정보(설정에 따라 기본 또는 확장)

 

/actuaotr/heapdump

트러블슈팅과 분석을 위해 힙덤프 시작 

 

/actuator/loggers

모든 컴포넌트의 로깅수준

 

/actuator/mappings

모든 엔드포인트 매핑과 세부 지원 정보 

 

/actuator/metrics

애플리케이션에서 현재 캡처 중인 메트릭스 

 

/actuator/threaddump

트러블 슈팅과 분석을 위해 스레드 덤프 시작 

 

 

액추에이터 열기


health를 호출할 경우 어플리케이션의 상태 UP/DOWN 둘 중 하나를 제공한다.

HTTP/1.1 200 
Content-Type: application/vnd.spring-boot.actuator.v3+json
Transfer-Encoding: chunked
Date: Sun, 29 Oct 2023 08:42:09 GMT
Connection: close

{
  "status": "UP"
}

의존성이 확장된 health정보를 확인하고 싶다면 속성을 추가하면 된다.

management.endpoint.health.show-details=always
HTTP/1.1 200 
Content-Type: application/vnd.spring-boot.actuator.v3+json
Transfer-Encoding: chunked
Date: Sun, 29 Oct 2023 08:46:04 GMT
Connection: close

{
  "status": "UP",
  "components": {
    "db": {
      "status": "UP",
      "details": {
        "database": "H2",
        "validationQuery": "isValid()"
      }
    },
    "diskSpace": {
      "status": "UP",
      "details": {
        "total": 245107195904,
        "free": 130567168000,
        "threshold": 10485760,
        "path": "/Users/baejisuk/Downloads/demo 2/.",
        "exists": true
      }
    },
    "ping": {
      "status": "UP"
    }
  }
}
728x90
반응형