모니터링 시스템
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는 플러그인 아키텍처를 지원하여, 다양한 플러그인을 통해 기능을 확장할 수 있습니다. 예를 들어, 새로운 데이터 소스나 시각화 유형을 추가할 수 있습니다.
- 사용자 관리
- 사용자를 관리하고, 대시보드와 데이터 소스에 대한 접근 권한을 설정할 수 있습니다. 이를 통해 팀 내에서 협업을 강화하고 데이터 보안을 유지할 수 있습니다.