1. Spring Boot Actuator
일단.. 생소한Actuator 이란??
An actuator is a manufacturing term that refers to a mechanical device for moving or controlling something. Actuators can generate a large amount of motion from a small change.
물건을 움직이거나 컨트롤하기 위한 장치를 의미하는 제조 용어로, 작은 변화로 큰 변화를 일으킬 수 있다.
- 앱을 모니터링 하거나 메트릭을 수집하거나 트래픽 혹은 데이터 베이스 상태를 이해하는 것을 쉽게 하는 것
- 설명만 봐선 알듯말듯하게 모르겠고, 정리를 하는 시점에도 딱 이거다! 하고 떠오르질 않네요.
모든 내용은 spring boot2.x 를 기반으로 작성했습니다. 1.x 하고는 약간 달라요
2. 의존성 추가
- maven 일 경우
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
</dependencies>
- Gradle 일 경우
dependencies {
compile("org.springframework.boot:spring-boot-starter-actuator")
}
3. Endpoints
엔드포인트를 사용하면 애플리케이션을 모니터링하고 상호 작용할 수 있음
spring boot 2.x 에서는
/health
,/info
2개만 기본적으로 제공모든 기능을 사용하려면 프로퍼티에 추가
management.endpoints.web.exposure.include = *
기본적인 /health 를 하면
{ "status": "UP" }
만 나오며 healthIndicator 을 구현하여 추가적으로 커스텀도 가능
ex)
@Component public class MyHealthIndicator implements HealthIndicator { @Override public Health health() { int errorCode = check(); // perform some specific health check if (errorCode != 0) { return Health.down().withDetail("Error Code", errorCode).build(); } return Health.up().build(); } }
4. Metrics
Micrometer 지원, 직접 상호작용
MeterRegistry 유형의 Bean 이 자동 구성
이번 글을 쓰게 된 이유/metrics 를 하면
{ "names": [ "http.server.requests", "jdbc.connections.idle", "tomcat.sessions.rejected", "hikaricp.connections.max", "hikaricp.connections.min", "process.cpu.usage", "jvm.memory.max", "jvm.threads.states", //.... ] }
이런 식으로 뜨고, 실제 값을 얻으려면 원하는 메트릭 (/actuator/metrics/jvm.memory.max) 으로 이동해야 됨
/actuator/metrics/jvm.memory.max 의 경우
{ "name": "jvm.memory.max", "description": "The maximum amount of memory in bytes that can be used for memory management", "baseUnit": "bytes", "measurements": [ { "statistic": "VALUE", "value": 9860284415 } ], "availableTags": [ { "tag": "area", "values": [ "heap" //... ] } ] }
당연하게도 커스텀 메트릭 또한 추가 가능
@Component public class SampleBean { private final Counter counter; private Tag tag = Tag.of("status", "ok") public SampleBean(MeterRegistry registry) { this.counter = registry.counter("received.message", "status", "all"); } public void handleMessage(String message) { this.counter.increment(); // handle message implementation } }
metrics 에 등록된 것 확인
{ "names": [ "http.server.requests", "jdbc.connections.idle", "tomcat.sessions.rejected", //.... "received.message" ] }
/actuator/metrics/received.message 에서 내용을 확인해보면
{ "name": "received.message", "description": null, "baseUnit": null, "measurements": [ { "statistic": "COUNT", "value": 1 // 호출 횟수 } ], "availableTags": [ { "tag": "server_name", "values": [ "sample-api" ] }, { "tag": "profile", "values": [ "local" ] }, { "tag": "status", "values": [ "all" ] } ] }
이런 식으로 정보를 알 수 있음
5. Custom Endpoint 생성
커스텀 앤드 포인트를 생성하는 것이 가능
@Component @Endpoint(id = "features") public class FeaturesEndpoint { private Map<String, Feature> features = new ConcurrentHashMap<>(); @ReadOperation public Map<String, Feature> features() { return features; } @ReadOperation public Feature feature(@Selector String name) { return features.get(name); } @WriteOperation public void configureFeature(@Selector String name, Feature feature) { features.put(name, feature); } @DeleteOperation public void deleteFeature(@Selector String name) { features.remove(name); } public static class Feature { private Boolean enabled; // [...] getters and setters } }
위의 경우는 /actuator/features 로 접속 가능
- @ReadOperation – HTTP GET에 매핑
- @WriteOperation – HTTP POST에 매핑
- @DeleteOperation – HTTP DELETE에 매핑
- 이 외에도 actuator 에 대한 많은 기능들이 있습니다. 엔드포인트를 확장한다거나 logger 에 관련된 것이라던가, 보안과 관련된 기능이라던가...
- 메트릭 설정을 추가하면서 맛보기로 알아본 것들을 api 문서 참고하면서 작성했기 때문에 빈약하거나, 잘못된 내용이 있을 수 있습니다.
참고
'개발 관련 > spring' 카테고리의 다른 글
HandlerMethodArgumentResolver 사용 (0) | 2022.07.14 |
---|---|
JPA 어노테이션 (0) | 2022.07.14 |
JPA 락에 대해 (0) | 2022.07.14 |
Mockito 정리 (1) (0) | 2022.07.14 |
WireMock 사용 (0) | 2022.07.14 |