Skip to content

Spring Boot Actuator와 Metricbeat 비교 #40

@since1909

Description

@since1909

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에서 actuatorhealth 네임스페이스의 데이터를 기반으로 대시보드 구성:
    • 헬스 체크 시각화: 서비스별 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로 시각화하면 애플리케이션과 시스템 상태를 모두 모니터링할 수 있습니다.

Metadata

Metadata

Assignees

Labels

백엔드질문 리스트의 직무 구분을 위한 라벨인프라질문 리스트의 직무 구분을 위한 라벨쿠버네티스

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions