📚 Study
Prometheus, Grafana로 Springboot 서버 모니터링하기
🤔 Monitoring이 왜 필요한가요?🍃 Springboot Actuator 설정1) Dependencies 설정2) application.properties 설정💻 Monitoring Server 세팅1) 인스턴스 생성2) 보안그룹 Port 열기🔥 Prometheus 설치 및 실행1) Prometheus 설치2) Prometheus 실행3) prometheus.yml 설정4) 연동 확인📈 Grafana 설치 및 실행1) Grafana 레포지토리 추가2) Grafana 설치3) Grafana 실행4) Prometheus Data source 추가5) Dashboard 생성(import)reference
개발환경
- EC2 서버1 : 스프링부트 어플리케이션 서버
- EC2 서버2 : 서버1을 모니터링하는 모니터링 서버
- prometheus, grafana는 docker로 돌리지 않음!
🤔 Monitoring이 왜 필요한가요?
- 이상 징후 탐지 : 서버 모니터링을 통해 시스템의 이상 징후를 감지할 수 있습니다.
- 예를 들어, CPU나 메모리 사용량의 급격한 상승, 서버 다운타임, 네트워크 트래픽의 이상 동작 등을 신속하게 발견할 수 있습니다.
- 성능 최적화 : 서버 모니터링을 통해 애플리케이션 및 인프라 구성의 성능 병목 현상을 식별할 수 있습니다.
- 이를 통해 성능 최적화와 확장이 가능하며, 사용자 경험을 향상시킬 수 있습니다.
- 장애 예방 : Prometheus와 같은 도구를 사용하여 장애를 예방할 수 있습니다.
- 사전에 경고 및 알림을 설정하면 시스템 문제가 심각해지기 전에 조치를 취할 수 있습니다.
- 용량 계획 : 서버 모니터링은 인프라 리소스 사용률을 추적하는 데 도움을 줍니다.
- 이를 통해 향후 인프라 확장 또는 축소를 계획할 때 필요한 용량을 더 정확하게 예측할 수 있습니다.
- 효율적인 리소스 관리 : 모니터링을 통해 리소스의 효율적인 사용을 보장할 수 있습니다.
- 불필요한 서버 인스턴스를 종료하거나 리소스가 부족한 경우 추가 인스턴스를 시작하여 비용을 절감할 수 있습니다.
🍃 Springboot Actuator 설정
Spring Boot Actuator는 Spring Boot 프레임워크의 기능 중 하나로, 애플리케이션 실행 중에 애플리케이션의 상태와 모니터링 정보를 노출하는 엔드포인트(Endpoints)를 제공합니다. 개발, 운영 및 모니터링 도구에서 애플리케이션의 내부 상태를 확인하고 문제 해결을 돕는 데 이용됩니다.
- 애플리케이션 정보 엔드포인트: 애플리케이션의 정보를 표시하는 엔드포인트로, 애플리케이션 버전, 환경 설정, 속성 및 다른 정보를 제공합니다.
- Health 엔드포인트: 애플리케이션의 건강 상태를 나타내는 엔드포인트로, 애플리케이션이 실행 중인지, 모든 종속성이 올바르게 작동하는지 확인하는 데 사용됩니다.
- Metrics 엔드포인트: 애플리케이션의 메트릭 데이터(예: CPU 사용률, 메모리 사용률, HTTP 요청 수 등)를 제공하는 엔드포인트로, 모니터링 시스템과 연동하여 성능 데이터를 수집할 수 있습니다.
- Environment 엔드포인트: 애플리케이션의 환경 속성 및 설정을 나열하는 엔드포인트로, 설정된 속성 값을 확인하는 데 사용됩니다.
- 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)
🔥 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)
📈 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