📚 Study

Prometheus, Grafana로 Springboot 서버 모니터링하기

date
Nov 9, 2023
slug
grafana-prometheus-monirotring
author
status
Public
category
📚 Study
tags
Server
Monitoring
summary
모니터링 서버를 구축해보자!
type
Post
thumbnail
스크린샷 2023-11-10 오후 5.30.41.png
 
notion image
 
 
 
💡
개발환경
  • EC2 서버1 : 스프링부트 어플리케이션 서버
  • EC2 서버2 : 서버1을 모니터링하는 모니터링 서버
    • prometheus, grafana는 docker로 돌리지 않음!
 

🤔 Monitoring이 왜 필요한가요?

  • 이상 징후 탐지 : 서버 모니터링을 통해 시스템의 이상 징후를 감지할 수 있습니다.
    • 예를 들어, CPU나 메모리 사용량의 급격한 상승, 서버 다운타임, 네트워크 트래픽의 이상 동작 등을 신속하게 발견할 수 있습니다.
  • 성능 최적화 : 서버 모니터링을 통해 애플리케이션 및 인프라 구성의 성능 병목 현상을 식별할 수 있습니다.
    • 이를 통해 성능 최적화와 확장이 가능하며, 사용자 경험을 향상시킬 수 있습니다.
  • 장애 예방 : Prometheus와 같은 도구를 사용하여 장애를 예방할 수 있습니다.
    • 사전에 경고 및 알림을 설정하면 시스템 문제가 심각해지기 전에 조치를 취할 수 있습니다.
  • 용량 계획 : 서버 모니터링은 인프라 리소스 사용률을 추적하는 데 도움을 줍니다.
    • 이를 통해 향후 인프라 확장 또는 축소를 계획할 때 필요한 용량을 더 정확하게 예측할 수 있습니다.
  • 효율적인 리소스 관리 : 모니터링을 통해 리소스의 효율적인 사용을 보장할 수 있습니다.
    • 불필요한 서버 인스턴스를 종료하거나 리소스가 부족한 경우 추가 인스턴스를 시작하여 비용을 절감할 수 있습니다.
 
 
 

🍃 Springboot Actuator 설정

Spring Boot Actuator는 Spring Boot 프레임워크의 기능 중 하나로, 애플리케이션 실행 중에 애플리케이션의 상태와 모니터링 정보를 노출하는 엔드포인트(Endpoints)를 제공합니다. 개발, 운영 및 모니터링 도구에서 애플리케이션의 내부 상태를 확인하고 문제 해결을 돕는 데 이용됩니다.
  1. 애플리케이션 정보 엔드포인트: 애플리케이션의 정보를 표시하는 엔드포인트로, 애플리케이션 버전, 환경 설정, 속성 및 다른 정보를 제공합니다.
  1. Health 엔드포인트: 애플리케이션의 건강 상태를 나타내는 엔드포인트로, 애플리케이션이 실행 중인지, 모든 종속성이 올바르게 작동하는지 확인하는 데 사용됩니다.
  1. Metrics 엔드포인트: 애플리케이션의 메트릭 데이터(예: CPU 사용률, 메모리 사용률, HTTP 요청 수 등)를 제공하는 엔드포인트로, 모니터링 시스템과 연동하여 성능 데이터를 수집할 수 있습니다.
  1. Environment 엔드포인트: 애플리케이션의 환경 속성 및 설정을 나열하는 엔드포인트로, 설정된 속성 값을 확인하는 데 사용됩니다.
  1. Logging 엔드포인트: 로깅 레벨을 동적으로 변경하거나, 로그 파일의 내용을 확인할 수 있는 엔드포인트로, 로깅 관리에 도움이 됩니다.
 

1) Dependencies 설정

// gradle.build.kts implementation ("org.springframework.boot:spring-boot-starter-actuator:2.7.2") implementation ("io.micrometer:micrometer-registry-prometheus")

2) application.properties 설정

management.endpoints.web.exposure.include=prometheus management.endpoint.prometheus.enabled=true
  • 위 설정 후 http://{server}:{port}/actuator 접속 시 주소리스트
{ "_links":{ ... "prometheus":{ "href":"http://{{스프링부트서버}}:8080/actuator/prometheus", "templated":false }, ... } }
 
 

💻 Monitoring Server 세팅

1) 인스턴스 생성

  • 탄력적IP 연결

2) 보안그룹 Port 열기

  • 9090(Prometheus)
  • 3000(Grafana)
notion image
 
 

🔥 Prometheus 설치 및 실행

(Monitoring Server에서 진행)

1) Prometheus 설치

sudo apt-get update sudo apt-get install -y prometheus prometheus-node-exporter prometheus-pushgateway prometheus-alertmanager

2) Prometheus 실행

sudo systemctl start prometheus sudo systemctl enable prometheus // 실행 상태 확인 sudo systemctl status prometheus

3) prometheus.yml 설정

  • /etc/prometheus/prometheus.yml
- job_name: "{서버 별칭}" metrics_path: "{내 서버의 Actuator 경로}/prometheus" scrape_interval: 10s static_configs: - targets: ["{스프링 서버 IP}:{스프링 서버 포트}"]
  • prometheus 재실행
sudo systemctl restart prometheus

4) 연동 확인

{프로메테우스가 설치된 EC2 IP}:9090 접속하여 확인 (Status > Targets)
notion image
 
 

📈 Grafana 설치 및 실행

(Monitoring Server에서 진행)

1) Grafana 레포지토리 추가

sudo apt-get update sudo apt-get install wget curl gnupg2 apt-transport-https software-properties-common -y wget -q -O - https://packages.grafana.com/gpg.key | sudo apt-key add - echo "deb https://packages.grafana.com/oss/deb stable main" | sudo tee -a /etc/apt/sources.list.d/grafana.list

2) Grafana 설치

sudo apt-get update sudo apt-get install grafana -y // 설치 확인 grafana-server -v

3) Grafana 실행

sudo systemctl start grafana-server sudo systemctl enable grafana-server // 실행 상태 확인 sudo systemctl status grafana-server

4) Prometheus Data source 추가

{모니터링 서버}:3000 접속하면 Grafana Dashboard 접속 가능
  • id : admin
  • pwd : admin
Configuration > Add Data source > Prometheus 추가
  • url : http://localhost:9090
 

5) Dashboard 생성(import)

notion image
 
 
 

reference