프로메테우스 & 그라파나
이전 글에서는 스프링 부트에 의존성 추가와 메트릭 조회로 애플리케이션의 상태를 확인할 수 있었습니다.
하지만 상태확인을 매번 조회를 실행하면서 할 순 없습니다. 그래서 프로메테우스를 활용합니다.
🦾 프로메테우스
프로메테우스(Prometheus)는 단순히 모니터링 도구의 역할뿐만 아니라 메트릭을 수집하고 저장하며 쿼리, 시각화, 알림 등의 기능 또한 제공합니다.
🍸 주요 특징
- 메트릭 수집: 프로메테우스는 설정된 간격으로 메트릭을 수집하는
풀(Pull)
모델을 사용합니다. 이는 프로메테우스 서버가 구성된 대상에서 주기적으로HTTP 요청을 통해 메트릭을 수집
하는 방식입니다. - 시계열 데이터베이스: 수집된 메트릭은 프로메테우스의 내장 시계열 데이터베이스에 저장됩니다. 이 데이터베이스는 고성능을 제공하며, 시간에 따른
메트릭의 변화를 효율적으로 추적하고 저장
합니다. - 데이터 보존: 프로메테우스는 설정된
보존 기간 동안 데이터를 유지
합니다. 이 기간이 지나면, 오래된 데이터는자동으로 삭제되어 저장 공간을 관리
합니다. - 데이터 압축과 효율적인 저장: 프로메테우스는 메트릭 데이터를
효율적으로 압축하여 저장함
으로써, 대량의 시계열 데이터를 효과적으로 관리할 수 있습니다.
스프링 부트 액추에이터와 마이크로미터를 통해 메트릭을 수집
하고 마이크로미터 프로메테우스 구현체를 통해 프로메테우스가 활용할 수 있는 포맷으로 메트릭을 생성
합니다. 이후 그라파나를 통한 효과적인 시각화를 할 수 있습니다.
🎶 프로메테우스 & 그라파나 시스템 구축
모니터링을 위한 클라우드 서비스 스펙은 Amazon Linux 2023 & t3.micro
를 선택했습니다. 서버 스펙은 상황에 맞게 선택하시면 됩니다.
스프링 부트 애플리케이션과 모니터링 서버를 분리
하는 이유는 모니터링 시스템이 리소스
를 많이 사용할 수 있으므로, 애플리케이션 성능에 영향을 미칠 수 있고 하나의 시스템의 문제가 발생해도 다른 시스템이 정상적으로 동작하도록 하기 위함
입니다.
프로메테우스와 그라파나는 도커 컨테이너를 사용하겠습니다.
Amazon Linux 2023
기준의 도커 및 도커 컴포즈 설치 명령어 입니다.
// 패키지 업데이트
sudo yum update -y
// 도커 설치
sudo yum install docker -y
// 도커 실행
sudo service docker start
// 도커 자동 시작(선택)
sudo chkconfig docker on
// sudo 없이 도커 명령어 사용(선택)
sudo usermod -a -G docker ${USER}
// 도커 버전 확인
docker --version
// 도커 컴포즈
sudo curl -L "https://github.com/docker/compose/releases/download/v2.6.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
// 실행 권한 부여
sudo chmod +x /usr/local/bin/docker-compose
// 버전 확인
docker-compose --version
그리고 프로메테우스의 메트릭 수집의 대한 설정 파일을 미리 생성 후 도커 볼륨을 이용
해 사용하겠습니다.
📌 prometheus.yml
global:
scrape_interval: 15s
evaluation_interval: 15s
scrape_configs:
- job_name: "prometheus"
static_configs:
- targets: ["localhost:9090"] # 자신의 프로메테우스에서 수집
- job_name: "Application"
metrics_path: '/actuator/prometheus'
scrape_interval: 5s
static_configs:
- targets: [ 'domain:8080' ] # 스프링부트 서버 도메인:포트
🐬 docker-compose.yml
version: '3'
services:
prometheus:
image: prom/prometheus
container_name: prometheus
volumes:
- ./prometheus.yml:/prometheus/prometheus.yml:ro
ports:
- 9090:9090
command:
- "--web.enable-lifecycle"
restart: always
networks:
- promnet
grafana:
image: grafana/grafana
container_name: grafana
volumes:
- ./grafana-volume:/var/lib/grafana
ports:
- 3000:3000
restart: always
networks:
- promnet
networks:
promnet:
driver: bridge
두 파일을 같은 위치에 생성 docker-compose up -d
명령어를 실행해 프로메테우스와 그라파나를 실행해줍니다.
모니터링서버IP:9090
으로 접근하게 되면 아래 처럼 프로메테우스에 접근 할 수 있습니다.
Status
에서 Targets
를 선택하게 되면
연결 상태를 확인
할 수 있습니다.
📈 그라파나
그라파나는 3000 포트(컨테이너 포트)
접근이 가능합니다. 그라파나의 최초 접근을 하게되면 admin, admin 으로 접근이 가능하고 PW를 변경해 주시면됩니다.
그리고 동작 중인 프로메테우스와 연결해 메트릭을 그라파나 GUI로 확인할 수 있습니다.
Home → Dashboards → Create Dashboard → Import dashboard 에서 대쉬보드
를 등록할 수 있습니다.
대쉬보드는 직접 커스텀하게 보고싶은 지표만 볼 수 있으나 이미 잘 만들어진 공유 대시보드를 등록하고 필요에 맞게 변경하는것이 좋다고 생각해 공유 대시보드를 사용하겠습니다.
🍧 공유 대시보드
저희는 공유 대시보드 중에 [Spring Boot 2.1 System Monitor](https://grafana.com/grafana/dashboards/11378-justai-system-monitor/)
를 사용하겠습니다.
Dashboard ID를 복사해주신 뒤에
다시 Import dashboard로 돌아와 Load 해주시면 됩니다.
이제 대시보드의 이름 설정과 프로메테우스를 연결하면 됩니다.
아직 생성한 Data Source가 없으므로 연결할 프로메테우스 data sources를 만들어 대쉬보드와 연결하겠습니다.
먼저 Configure a new data source
를 클릭합니다.
프로메테우스를 선택해 준 뒤
연결할 프로메테우스의 주소를 입력해주시면 됩니다. 앞에 docker-compose.yml을 사용해 그라파나와 프로메테우스를 설치해 주셨다면 Connection
을 똑같이 입력해주시면 됩니다. 만약 도커를 사용하지 않고 하셨다면 localhost:포트 를 입력해주시면 됩니다.
이후에 추가 설정은 무시하고 save & test 를 진행해 주신 뒤 다시 Import Dashboard로 넘어가 Import를 해주시면 아래 처럼 스프링부트 애플리케이션 대쉬보드가 연결되신 것을 확인하실 수 있습니다.
추가로 대쉬보드 이름 변경이나 지표를 변경하고 싶으시면 톱니바퀴를 누르신 뒤 Make editable
을 해주시고 save
를 해주시면 각 지표를 추가하거나 수정이 가능해집니다.