모니터링 시스템

Actuator, Prometheus, Grafana 기본 이론

korea-wongi 2024. 8. 16. 22:07

Spring Boot Actuator란?

  • 애플리케이션의 상태와 성능을 모니터링하고 관리할 수 있도록 다양한 엔드포인트를 제공하는 기능입니다.
  • Actuator는 헬스 체크, 메트릭스, 환경 정보, 로그 정보 등 여러 가지 중요한 정보를 쉽게 확인할 수 있도록 도와줍니다.
  • 의존성 추가
implementation 'org.springframework.boot:spring-boot-starter-actuator'
implementation 'org.springframework.boot:spring-boot-starter-web'

 

Actuator 엔드포인트

  • /actuator/health: 애플리케이션의 상태를 확인합니다.
  • /actuator/metrics: 애플리케이션의 메트릭 정보를 제공합니다.
  • /actuator/loggers: 로깅 설정을 조회하고 변경할 수 있습니다.
  • /actuator/env: 환경 변수와 설정 정보를 확인합니다.
  • /actuator/beans: 애플리케이션 컨텍스트에 있는 빈 목록을 확인합니다.
  • /actuator/threaddump: 스레드 덤프를 확인합니다.
  • /actuator/httptrace: 최근 HTTP 요청 및 응답을 추적합니다.

 

Actuator 엔드포인트 설정

  • 기본적으로 모든 엔드포인트가 활성화되어 있지 않을 수 있습니다. application.properties 파일을 사용하여 필요한 엔드포인트를 활성화하거나 비활성화할 수 있습니다.
  • 설정 옵션 설명
    • never: 헬스 체크 상세 정보를 절대 표시하지 않습니다.
    • always: 모든 사용자에게 헬스 체크 상세 정보를 항상 표시합니다.
    • when_authorized: 인증된 사용자에게만 헬스 체크 상세 정보를 표시합니다.
spring.application.name=sample

server.port=8080

#모든 엔드포인트 노출 설정
management.endpoints.web.exposure.include=* 

#헬스 체크 엔드포인트 상세 정보 표시 설정
management.endpoint.health.show-details=always # 이 설정은 /actuator/health 엔드포인트에서 헬스 체크 정보를 항상 상세히 보여주도록 설정합니다. 기본적으로, 헬스 체크 엔드포인트는 요약된 상태 정보만 제공하며, 상세 정보는 노출되지 않습니다.

 

 

주의사항 및 권장사항

  • 보안
    • 모든 엔드포인트를 노출하는 설정은 개발 및 테스트 환경에서는 유용할 수 있지만, 운영 환경에서는 보안 위험을 증가시킬 수 있습니다. 필요한 엔드포인트만 노출하는 것을 권장합니다.
    • 헬스 체크 엔드포인트에서 상세 정보를 항상 노출하는 설정 역시 운영 환경에서는 민감한 정보를 포함할 수 있으므로, show-details설정을 when_authorized 옵션을 사용하는 것이 좋습니다.
  • 엔드포인트 보호
    • actuator 접근 포트만 다른 포트로 설정하여 보호 할 수 있습니다.
# 애플리케이션의 기본 포트를 8080으로 설정
server.port=8080

# Actuator 엔드포인트를 19090 포트에서 서비스하도록 설정
management.server.port=19090
  • Spring Security를 사용하여 민감한 엔드포인트에 접근 제어를 설정하는 것이 좋습니다.
  • 예를 들어, /actuator 경로에 대한 보안 설정을 추가할 수 있습니다.
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.authorizeRequests()
            .antMatchers("/actuator/**").authenticated()
            .and()
            
            // HTTP Basic 인증 방식을 사용하도록 설정합니다. 
            // 이 방식은 사용자가 애플리케이션에 접근할 때 사용자 이름과 비밀번호를 요구하는 기본적인 인증 방식입니다.
            .httpBasic();
    }
}

 

 

Prometheus 란?

  • Prometheus는 오픈소스 시스템 모니터링 및 경고 도구입니다.
  • SoundCloud에서 시작되어 현재는 Cloud Native Computing Foundation(CNCF)에서 호스팅하고 있습니다.
  • Prometheus는 시계열 데이터베이스를 사용하여 메트릭 데이터를 수집하고, 쿼리 및 시각화를 통해 시스템 상태를 모니터링하고 경고를 설정할 수 있습니다.

 

Prometheus의 주요 구성 요소

  • Prometheus 서버
    • 메트릭 데이터를 수집하고 저장하는 핵심 컴포넌트입니다. 각 타겟으로부터 데이터를 주기적으로 스크랩(scrape)하여 시계열 데이터베이스에 저장합니다.
    • 시계열 데이터베이스(Time Series Database, TSDB)는 시간에 따라 변화하는 데이터를 효율적으로 저장하고 조회할 수 있도록 최적화된 데이터베이스입니다.
  • Exporters
    • Prometheus는 기본적으로 애플리케이션에서 메트릭 데이터를 수집합니다.
    • Exporter는 특정 애플리케이션이나 시스템의 메트릭 데이터를 Prometheus가 이해할 수 있는 형식으로 변환해주는 도구입니다.
    • 예시: Node Exporter (서버의 시스템 메트릭 수집), PostgreSQL Exporter (PostgreSQL 메트릭 수집), Spring boot의 micrometer-registry-prometheus 디펜던시
  • Pushgateway
    • 짧은 수명의 작업(job)에서 메트릭을 수집하여 Prometheus 서버에 푸시(push)할 수 있습니다.
    • 일반적으로 지속적으로 실행되지 않는 작업에서 사용됩니다. 예를 들어 배치 작업, 스크립트 실행, 크론 작업 등이 있습니다.
  • Alertmanager
    • Prometheus 서버에서 발생하는 경고(alert)를 처리하고, 이메일, PagerDuty, Slack 등 다양한 방법으로 알림을 보낼 수 있습니다.
  • Grafana
    • Prometheus 데이터를 시각화하기 위해 자주 사용되는 대시보드 도구입니다.
    • Grafana를 사용하면 Prometheus에서 수집한 메트릭 데이터를 대시보드 형태로 시각화할 수 있습니다.

 

그라파나(Grafana)란?

  • Grafana는 오픈소스 데이터 시각화 및 모니터링 도구입니다.
  • 다양한 데이터 소스를 지원하여 데이터를 시각화하고 분석할 수 있도록 돕습니다.
  • Grafana는 대시보드를 생성하고, 데이터를 그래프나 차트 형태로 표현하며, 알림 기능을 제공하여 모니터링을 강화할 수 있습니다.

 

그라파나 주요기능

  • 대시보드 생성
    • Grafana는 사용자가 데이터를 시각화할 수 있는 대시보드를 생성할 수 있도록 합니다. 여러 가지 그래프, 차트, 게이지 등을 사용하여 데이터를 시각적으로 표현할 수 있습니다.
  • 다양한 데이터 소스 지원
    • Prometheus, InfluxDB, Graphite, Elasticsearch, MySQL, PostgreSQL 등 다양한 데이터 소스를 지원합니다. 이를 통해 여러 시스템과 애플리케이션의 데이터를 통합하여 시각화할 수 있습니다.
  • 알림 기능
    • 조건을 설정하여 조건이 충족되면 이메일, Slack, PagerDuty 등 다양한 채널을 통해 알림을 보낼 수 있습니다. 이를 통해 시스템 상태를 실시간으로 모니터링하고 문제가 발생했을 때 즉시 대응할 수 있습니다.
  • 플러그인 지원
    • Grafana는 플러그인 아키텍처를 지원하여, 다양한 플러그인을 통해 기능을 확장할 수 있습니다. 예를 들어, 새로운 데이터 소스나 시각화 유형을 추가할 수 있습니다.
  • 사용자 관리
    • 사용자를 관리하고, 대시보드와 데이터 소스에 대한 접근 권한을 설정할 수 있습니다. 이를 통해 팀 내에서 협업을 강화하고 데이터 보안을 유지할 수 있습니다.