티스토리 뷰
개요
- Spirng Boot 기반의 웹 애플리케이션을 구동하다 보면 JVM의 상태라던가, 사용 가능한 디스크 용량 등의 정보를 실시간으로 확인할 필요가 있다. Spring Boot에서는 이런 요구사항을 충족시킬 수 있는
Spirng Boot Actuator
모듈을 제공한다.
build.gralde 추가
dependencies {
...
compile group: 'org.springframework.boot', name: 'spring-boot-starter-actuator'
}
- 기존의 Spring Boot 프로젝트에
spring-boot-starter-actuator
아티팩트를 추가하면 별다른 추가 설정 없이 바로 Spirng Boot Actuator 기능이 활성화 된다.
애플리케이션 호출
- Spirng Boot Actuator가 제공하는 각 EndPoint는 HTTP, JMX 등 다양한 접근 방식을 지원한다. 아래는 애플리케이션의 내부 로직에서 각 Endpoint에 접근하는 방법을 간단히 설명한 예제이다.
@Service
public class HealthCheckScheduler {
@Autowired
private MetricsEndpoint metricsEndpoint;
@Autowired
private HealthEndpoint healthEndpoint;
@Scheduled(initialDelay = 60000, fixedDelay = 60000)
public void healthCheck() {
MDC.clear();
Map<String, Object> metrics = metricsEndpoint.invoke();
Health health = healthEndpoint.invoke();
float memJvmUsedMb = Float.valueOf((long) metrics.get("mem")) / 1024;
float memJvmFreeMb = Float.valueOf((long) metrics.get("mem.free")) / 1024;
float heapCommittedMb = Float.valueOf((long) metrics.get("heap.committed")) / 1024;
float heapInitMb = Float.valueOf((long) metrics.get("heap.init")) / 1024;
float heapUsedMb = Float.valueOf((long) metrics.get("heap.used")) / 1024;
float heapMb = Float.valueOf((long) metrics.get("heap")) / 1024;
float nonheapCommittedMb = Float.valueOf((long) metrics.get("nonheap.committed")) / 1024;
float nonheapInitMb = Float.valueOf((long) metrics.get("nonheap.init")) / 1024;
float nonheapUsedMb = Float.valueOf((long) metrics.get("nonheap.used")) / 1024;
float nonheapMb = Float.valueOf((long) metrics.get("nonheap")) / 1024;
MDC.put("mem_jvm_used_mb", String.valueOf(memJvmUsedMb));
MDC.put("mem_jvm_free_mb", String.valueOf(memJvmFreeMb));
MDC.put("processors", String.valueOf(metrics.get("processors")));
MDC.put("systemload_average", String.valueOf(metrics.get("systemload.average")));
MDC.put("heap_committed_mb", String.valueOf(heapCommittedMb));
MDC.put("heap_init_mb", String.valueOf(heapInitMb));
MDC.put("heap_used_mb", String.valueOf(heapUsedMb));
MDC.put("heap_mb", String.valueOf(heapMb));
MDC.put("nonheap_committed_mb", String.valueOf(nonheapCommittedMb));
MDC.put("nonheap_init_mb", String.valueOf(nonheapInitMb));
MDC.put("nonheap_used_mb", String.valueOf(nonheapUsedMb));
MDC.put("nonheap_mb", String.valueOf(nonheapMb));
MDC.put("threads_peak", String.valueOf(metrics.get("threads.peak")));
MDC.put("threads_daemon", String.valueOf(metrics.get("threads.daemon")));
MDC.put("threads_total_started", String.valueOf(metrics.get("threads.totalStarted")));
MDC.put("threads", String.valueOf(metrics.get("threads")));
MDC.put("classes", String.valueOf(metrics.get("classes")));
MDC.put("classes_loaded", String.valueOf(metrics.get("classes.loaded")));
MDC.put("classes_unloaded", String.valueOf(metrics.get("classes.unloaded")));
float diskSpaceTotalGb = Float.valueOf((long) ((Health) health.getDetails().get("diskSpace")).getDetails().get("total")) / 1024 / 1024 / 1024;
float diskSpaceFreeGb = Float.valueOf((long) ((Health) health.getDetails().get("diskSpace")).getDetails().get("free")) / 1024 / 1024 / 1024;
MDC.put("disk_space_total_gb", String.valueOf(diskSpaceTotalGb));
MDC.put("disk_space_free_gb", String.valueOf(diskSpaceFreeGb));
log.info("API_SCHEDULE_FINISHED");
}
}
- 각 Endpoint는 스프링 빈으로 제공되므로 @Authwired 어노테이션으로 손쉽게 접근할 수 있다.
invoke()
메써드의 응답 데이터는 HTTP로 요청할 때의 응답 데이터와 일치한다. 적절히 가공하여 1분 단위 로깅 등에 활용할 수 있다.
참고 글
댓글
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- maven
- JHipster
- DynamoDB
- jpa
- 로드 바이크
- 구동계
- 알뜰폰
- graylog
- Docker
- kotlin
- spring
- Spring MVC 3
- Tomcat
- node.js
- jstl
- 평속
- java
- 로드바이크
- chrome
- MySQL
- 태그를 입력해 주세요.
- Kendo UI
- Spring Boot
- JavaScript
- 자전거
- Kendo UI Web Grid
- bootstrap
- CentOS
- Eclipse
- jsp
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
글 보관함