-
Notifications
You must be signed in to change notification settings - Fork 0
Open
Labels
Description
Spring Boot Actuator와 Metricbeat 비교 및 통합 사용 가이드
1. Spring Boot Actuator
주요 특징
- Spring Boot 애플리케이션 내부에서 제공하는 애플리케이션 중심의 메트릭 및 상태 정보 제공.
- 애플리케이션의 헬스 체크, 메트릭, 트래픽, 상태 정보 등을
/actuator엔드포인트를 통해 노출. - Actuator는 애플리케이션 내부 로직, 사용량, 상태 등을 세부적으로 확인할 수 있는 API 제공.
- 주로 개발자 및 운영자가 애플리케이션 상태를 모니터링하고, 헬스 체크를 자동화된 도구와 연동하는 데 사용.
장점
- 애플리케이션 특화 메트릭 제공 (예: JVM 상태, DB 연결 상태, 사용자 정의 메트릭 등).
- Prometheus, Micrometer와 같은 외부 메트릭 툴과 쉽게 통합 가능.
- 개발자가 쉽게 커스터마이징하여 필요한 데이터를 노출 가능.
한계
- 애플리케이션 내부 데이터에 초점을 맞추므로, 시스템 수준의 메트릭(CPU, 메모리, 네트워크 등)을 직접 제공하지 않음.
- 별도의 수집/저장 도구(Filebeat, Metricbeat 등)가 필요.
2. Metricbeat
주요 특징
- Elastic Stack의 일부로 설계된 시스템 및 서비스 중심의 메트릭 수집 도구.
- CPU 사용량, 메모리 상태, 네트워크 트래픽 등 시스템 레벨 메트릭 및 다양한 서비스(예: MySQL, Nginx)의 상태를 수집.
- 애플리케이션 상태보다는 시스템 인프라 및 서비스 전반에 걸친 정보를 제공.
장점
- 시스템 및 인프라 모니터링에 강력함.
- 수많은 모듈(예: Docker, Kubernetes, Redis, MySQL 등)을 지원하여 다양한 소스에서 데이터를 수집.
- Elasticsearch와 기본적으로 통합되어 있어 Kibana에서 바로 데이터 시각화 가능.
한계
- Spring Boot 애플리케이션에 대한 세부적인 메트릭 제공은 불가. 애플리케이션 특화 데이터를 수집하려면 추가 작업 필요.
- 커스터마이징이 제한적이며, Spring Boot 내부 로직을 직접 모니터링할 수 없음.
3. Spring Boot Actuator와 Metricbeat의 차이점
| 특징 | Spring Boot Actuator | Metricbeat |
|---|---|---|
| 주요 초점 | 애플리케이션 내부 상태 및 로직 | 시스템 및 서비스의 리소스 사용량 및 상태 |
| 주요 데이터 | JVM, 스레드 풀, DB 연결 상태, 사용자 정의 메트릭 | CPU, 메모리, 디스크, 네트워크, Docker 컨테이너 메트릭 |
| 커스터마이징 | 애플리케이션 개발자가 필요 데이터 정의 가능 | 기본 모듈에 의존, 커스터마이징 제한적 |
| 수집 대상 | 애플리케이션 상태 및 동작 | 서버 및 서비스 리소스 |
| 수집 범위 | 특정 애플리케이션 | 전체 서버 및 관련 서비스 |
4. Actuator와 Metricbeat를 함께 사용하는 방법
두 도구는 서로 보완적으로 사용할 수 있습니다.
- Actuator는 애플리케이션 내부 메트릭과 헬스 체크를 제공합니다.
- Metricbeat는 Actuator 엔드포인트 데이터를 수집하여 Elasticsearch로 전송할 수 있습니다.
통합 사용 단계
1. Spring Boot Actuator 설정
-
application.yml에 Actuator를 활성화하고 필요한 엔드포인트를 설정합니다:management: endpoints: web: exposure: include: "*" metrics: enable: true health: details: enabled: true
-
필요에 따라 사용자 정의 헬스 인디케이터를 추가합니다:
@Component public class CustomHealthIndicator implements HealthIndicator { @Override public Health health() { boolean serviceStatus = checkCustomService(); // 사용자 정의 서비스 상태 체크 로직 if (serviceStatus) { return Health.up().withDetail("CustomService", "Available").build(); } return Health.down().withDetail("CustomService", "Unavailable").build(); } }
2. Metricbeat 설정
-
metricbeat.yml에서 HTTP 모듈을 사용하여 Actuator 데이터를 수집합니다:metricbeat.modules: - module: http metricsets: ["json"] period: 10s hosts: ["http://your-app:8080/actuator/metrics"] namespace: "actuator" json.keys_under_root: true json.add_error_key: true - module: http metricsets: ["json"] period: 10s hosts: ["http://your-app:8080/actuator/health"] namespace: "health" json.keys_under_root: true json.add_error_key: true
-
메트릭 엔드포인트와 헬스 체크 엔드포인트를 각각 수집하도록 설정합니다.
3. Elasticsearch 및 Kibana 연동
- Metricbeat에서 수집된 데이터를 Elasticsearch로 전송.
- Kibana에서
actuator및health네임스페이스의 데이터를 기반으로 대시보드 구성:- 헬스 체크 시각화: 서비스별 UP/DOWN 상태를 직관적으로 표시.
- 상태 변화 추적: 특정 서비스의 헬스 상태 변화 트렌드 분석.
4. 커스텀 메트릭 정의
-
Actuator에서 사용자 정의 메트릭을 추가합니다. 예를 들어:
@RestController public class CustomMetricsController { private final MeterRegistry meterRegistry; public CustomMetricsController(MeterRegistry meterRegistry) { this.meterRegistry = meterRegistry; } @PostMapping("/custom-metric") public void addMetric(@RequestParam String name, @RequestParam double value) { meterRegistry.gauge(name, value); } }
5. 데이터 확인 및 모니터링
- Actuator에서 제공하는 애플리케이션 메트릭과 Metricbeat에서 수집한 시스템 및 헬스 데이터를 Kibana에서 통합하여 모니터링.
5. 결론
- Actuator: 애플리케이션 내부 상태, 사용자 정의 메트릭을 노출하고 특정 API를 통해 관리.
- Metricbeat: 시스템 리소스, 컨테이너, 네트워크, 서버 레벨 정보를 수집.
- 통합 사용: Actuator의 메트릭과 헬스 체크 데이터를 Metricbeat로 수집하여 Elasticsearch와 Kibana로 시각화하면 애플리케이션과 시스템 상태를 모두 모니터링할 수 있습니다.