Actuator와 Prometheus, Grafana를 이용한 모니터링 시스템

haruceki·2024년 8월 19일

모니터링(Monitoring)은 시스템, 애플리케이션, 네트워크, 서버 등의 상태와 성능을 지속적으로 관찰하고 분석하는 과정을 말한다. 모니터링이 필요한 이유는 문제 예방, 빠른 대응, 성능 최적화, 사용자 경험 향상에 중요하기 때문이다. 모니터링의 종류로는 서버 모니터링, 애플리케이션 모니터링, 네트워크 모니터링, 로그 모니터링, 보안 모니터링 등이 있다.

모니터링의 주요 목적

모니터링의 주요 목적은 시스템이 정상적으로 작동하고 있는지 확인하고, 문제가 발생할 경우 이를 조기에 감지하여 신속하게 대응하는 것이다.

  1. 성능 관리: 시스템의 성능을 모니터링하여 리소스 사용량(CPU, 메모리, 네트워크 대역폭 등), 응답 시간, 처리량 등을 분석하고, 성능 문제를 조기에 감지할 수 있습니다.
  2. 가용성 유지: 시스템이 언제나 접근 가능하고 정상적으로 작동하도록 가용성을 모니터링합니다. 예기치 않은 다운타임이나 서비스 중단을 최소화하는 데 중점을 둡니다.
  3. 장애 감지 및 대응: 시스템 장애나 오류를 실시간으로 감지하여 빠르게 대응할 수 있습니다. 알림 시스템을 통해 관리자에게 경고를 보내어 문제를 신속히 해결할 수 있도록 합니다.
  4. 안정성 개선: 모니터링을 통해 수집된 데이터를 분석하여 시스템의 안정성을 향상시킬 수 있습니다. 이는 잠재적인 문제를 예방하고 시스템을 최적화하는 데 도움이 됩니다.
  5. 보안 관리: 보안 위협을 모니터링하여 이상한 활동이나 침입 시도를 감지하고 대응할 수 있습니다.

모니터링 도구

1. Spring Boot Actuator

Spring Boot 애플리케이션의 상태와 성능을 모니터링하고 관리할 수 있도록 다양한 엔드포인트를 제공하는 기능을 한다. 헬스 체크, 메트릭스, 환경 정보, 로그 정보 등 여러 가지 중요한 정보를 쉽게 확인할 수 있도록 도와준다. Prometheus와 주로 사용된다.

설정 파일에서 엔드포인트를 활성화하거나 비활성화 하도록 설정할 수 있으며, 보안을 위해서 필요한 엔드포인트만 노출할 필요가 있다. 엔드포인트 보호는 다른 포트를 지정하거나 spring security를 통해서 접근 제어를 함으로써 가능하다.

2. Prometheus

오픈소스 모니터링 및 경고 도구로, 주로 애플리케이션 메트릭을 수집하고 쿼리하는 데 사용된다.시계열 데이터베이스를 사용하여 시간에 따라 변하는 메트릭 데이터를 수집하고, 쿼리 및 시각화를 통해 시스템 상태를 모니터링하고 경고를 설정할 수 있다.

Prometheus의 구성 요소로는 메트릭 데이터를 수집하고 저장하는 핵심 컴포넌트인 prometheus 서버, 특정 애플리케이션이나 시스템의 메트릭 데이터를 Prometheus가 이해할 수 있는 형식으로 변환해주는 도구인 Exporter, 푸시 방식으로 메트릭 데이터를 수집하기 위해 설계된 도구인 Pushgateway, Prometheus 서버에서 발생하는 경고(alert)를 처리하고, 이메일, PagerDuty, Slack 등 다양한 방법으로 알림을 보내는 Alertmanager, Prometheus 데이터를 시각화하기 위해 자주 사용되는 대시보드 도구인 Grafana 등으로 이루어져 있다.

  • application.properties에 actuator과 prometheus 설정하기
#모든 엔드포인트 노출 설정
management.endpoints.web.exposure.include=* 

#헬스 엔드포인트에서 헬스체크 정보 항상 상세히 보이도록 설정
management.endpoint.health.show-details=always

management.endpoint.prometheus.enabled=true

http://localhost:8080/actuator/prometheus 에 가면 프로메테우스 매트릭스를 확인할 수 있다.

prometheus 실행

  • 도커를 어플리케이션과 연결하기 위한 prometheus.yml 설정
global:
  scrape_interval: 15s

scrape_configs:
  - job_name: 'spring-boot'
    metrics_path: '/actuator/prometheus'
    static_configs:
      - targets: ['host.docker.internal:8080']
  • 도커로 실행
docker run -d --name=prometheus -p 9090:9090 -v {설정파일의 경로}/prometheus.yml:/etc/prometheus/prometheus.yml prom/prometheus

3. Grafana

Grafana는 간단히 말하면 오픈소스 데이터 시각화 및 모니터링 도구로, 다양한 데이터 소스를 지원하여 데이터를 시각화하고 분석할 수 있도록 돕는다. 데이터를 시각화 할 수 있도록 대시보드를 생성하며, 다양한 데이터 소스를 지원하고, 다양한 채널을 통한 알림 기능이 있으며, 플러그인 기능을 통해 확장이 가능하며 사용자를 관리할 수도 있다.

  • grafana 컨테이너 실행
docker run -d --name=grafana -p 3000:3000 grafana/grafana

localhost:3000에서 기본 계정 (geust/geust)로 로그인 후 대시보드 확인해보기

profile
희망도 절망도 없이 매일 코딩을 한다.

0개의 댓글