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"
}
}
}
'Spring' 카테고리의 다른 글
Spring cloud gateway netty httpclient pool 로그 모니터링 (2) | 2024.07.18 |
---|---|
Spring boot netty access log 남기는 방법 (0) | 2024.01.12 |
스프링부트 구동할 때 초기화 코드 넣는 방법(CommandLineRunner, ApplicationRunner) (0) | 2023.10.29 |
Spring WebFlux 란 무엇일까 (0) | 2023.08.10 |
Spring @RequestMapping multi request 요청받기 (0) | 2023.02.22 |