Prometheus 사용하는 방법
사용하는 이유
- Prometheus를 통해 Spring Boot 애플리케이션의 성능등의 상태들을 모니터링을 하기 위해 사용합니다.
1) HTTP 요청
- http_server_requests_seconds_count: HTTP 요청 총 횟수
- http_server_requests_seconds_sum: 요청 처리 시간 합계
2) 시스템 리소스
- system_cpu_usage: 시스템 CPU 사용량
- jvm_memory_used_bytes: JVM 메모리 사용량
3) 데이터베이스
- hikaricp_connections_active: 활성 DB 연결 수
- hikaricp_connections_idle: 유휴 DB 연결 수
4) 애플리케이션 상태
- process_uptime_seconds: 애플리케이션 가동 시간
- jvm_threads_live_threads: 현재 실행 중인 JVM 스레드 수
1. Prometheus 설치
1) Prometheus 바이너리 다운로드
wget https://github.com/prometheus/prometheus/releases/download/v2.47.0/prometheus-2.47.0.linux-amd64.tar.gz
2) 압축 해제 및 바이너리 이동
tar -xvzf prometheus-2.47.0.linux-amd64.tar.gz
cd prometheus-2.47.0.linux-amd64
sudo mv prometheus /usr/local/bin/
sudo mv promtool /usr/local/bin/
3) 디렉토리 생성 및 권한 설정
sudo mkdir /etc/prometheus /var/lib/prometheus
sudo mv consoles console_libraries /etc/prometheus/
sudo mv prometheus.yml /etc/prometheus/
4) Prometheus 사용자 생성
sudo useradd --no-create-home --shell /bin/false prometheus
sudo chown -R prometheus:prometheus /etc/prometheus /var/lib/prometheus
2. Prometheus 서비스 설정
1) Systemd 서비스 파일 생성
sudo nano /etc/systemd/system/prometheus.service
2) 아래 내용을 추가
[Unit]
Description=Prometheus Monitoring
Wants=network-online.target
After=network-online.target
[Service]
User=prometheus
Group=prometheus
Type=simple
ExecStart=/usr/local/bin/prometheus \
--config.file=/etc/prometheus/prometheus.yml \
--storage.tsdb.path=/var/lib/prometheus \
--web.console.templates=/etc/prometheus/consoles \
--web.console.libraries=/etc/prometheus/console_libraries
[Install]
WantedBy=multi-user.target
3) 서비스 등록 및 시작
sudo systemctl daemon-reload
sudo systemctl enable prometheus
sudo systemctl start prometheus
4) 상태 확인
sudo systemctl status prometheus
3. Prometheus 구성
1) prometheus.yml 수정
- Spring Boot와 통합하기 위해 설정 파일에 아래 내용을 추가합니다.
global:
scrape_interval: 15s
scrape_configs:
- job_name: 'spring-boot'
static_configs:
- targets: ['localhost:8082'] # Spring Boot 애플리케이션의 IP 및 포트
sudo nano /etc/prometheus/prometheus.yml
2) Prometheus 재시작
sudo systemctl restart prometheus
4. Spring Boot와 Prometheus 통합
1) Micrometer 의존성 추가
- build.gradle에 아래와 같은 의존성을 추가해줍니다.
<dependency>
<groupId>io.micrometer</groupId>
<artifactId>micrometer-registry-prometheus</artifactId>
</dependency>
2) Spring Boot 설정 파일 수정
application.yml에 아래 내용을 추가합니다.
management:
endpoints:
web:
exposure:
include: prometheus
endpoint:
prometheus:
enabled: true
3) Spring Boot 재시작
Spring Boot 애플리케이션을 재시작합니다. /actuator/prometheus 경로에서 메트릭 데이터를 확인할 수 있습니다.
5. Prometheus 대시보드 확인
1) Prometheus 웹 UI 접속
- 브라우저에서 Prometheus 서버의 IP와 포트 9090으로 접속합니다.
http://<EC2퍼블릭 IP 주소>:9090
2) Spring Boot 메트릭 확인
- Prometheus 대시보드의 "Targets" 탭에서 Spring Boot 애플리케이션이 정상적으로 등록되었는지 확인합니다.
- State가 up이면 성공 down이면 실패입니다.
프로젝트 진행시
- 위와 같이 진행하게 되면 처음에는 state가 down이 됩니다.
- 기본 경로가 /metrics 이고 주소가 localhost로 되어 있기 때문입니다.
우리 서비스는 8082에서 실행하고 ec2에 배포 하였기에
yml 설정을 바꾸어 주어야 합니다.
아래와 같이 public ip 주소와 포트번호를 입력해주시면 됩니다.
변경 후에는 아래와 같이 재시작을 해주셔야 적용이 됩니다.
sudo systemctl restart prometheus
적용이 완료된 경우 http://ip 주소:9090/targets 주소로 확인 해주시면 됩니다.
State가 Up으로 되어 있어야 성공입니다!