[Infra] Grafana + Prometheus로 모니터링 시스템 구축하기

다은·2025년 8월 31일
0

Infra

목록 보기
3/4
post-thumbnail

서비스를 운영하다보면, 다양한 메트릭 로그와 데이터를 수집하게 됩니다. 이 때, Grafana + Prometheus를 이용해 이 메트릭 데이터를 유연하게 다룰 수 있습니다.

서비스의 로그를 prometheus를 이용해 수집하고, 이를 grafana를 이용해 시각화해서 메트릭 데이터를 확인하는 것입니다.

간단하게 springboot + prometheus + garafana 툴을 연동하고, 특정 이벤트가 발생했을 때 개발자에게 grafana에서 slack 알림을 전송하는 실습을 진행해보겠습니다.


1. 그라파나, 프로메테우스?

1. Grafana

  • 데이터 시각화를 위한 대시보드
  • 시간에 따라 변화하는 데이터를 분석하고 시각화하는 데에 유용한 오픈소스 툴
  • 실시간 모니터링, 성능 분석 등의 유용한 기능들이 있음

2. Prometheus

  • 일정 시간 간격으로 앱에 접근해 메트릭 데이터를 수집하는 오픈소스 툴
    • 메트릭 : 시간 흐름에 따라 추이가 변경되는 데이터 (CPU 사용률)
  • PromQL이라는 언어를 이용해 데이터를 쿼리할 수 있음
  • Pull 방식을 이용해 데이터를 수집함



2. 프로메테우스 설정

1. 프로메테우스 설치

아래 링크를 통해 알맞은 프로메테우스를 다운로드합니다.

https://prometheus.io/download/


2. 프로메테우스 실행

./prometheus

localhost:9090 에 접속하면 아래와 같은 프로메테우스 초기 화면을 확인할 수 있습니다.



3. 프로메테우스 - SpringBoot 연동

1. 의존성 추가

아래와 같이 프로메테우스와 로그 수집을 위한 actuator 의존성을 추가해줍니다.

actuator에서 micrometer는 메트릭 데이터를 수집한 후, 프로메테우스가 이용할 수 있도록 micrometer-prometheus 형태로 데이터를 변환합니다.
프로메테우스는 이 형태의 메트릭 데이터를 pull하여 수집하게 됩니다.

implementation("org.springframework.boot:spring-boot-starter-actuator")
implementation("io.micrometer:micrometer-registry-prometheus")

이후, application.yml에 actuator을 위한 엔드포인트를 추가적으로 설정해줍니다.

management:
  endpoints:
    web:
      exposure:
        include: prometheus

이제 localhost:8080/actuator/prometheus 에 접속하면 아래와 같은 화면을 확인할 수 있습니다.

이는 수집한 메트릭 데이터를 프로메테우스 형식으로 변형한 데이터들이며, 프로메테우스는 해당 URL에 접근해 메트릭 데이터를 PULL해옵니다.


2. 프로메테우스 yml 수정

위에서 설정한 메트릭 수집 URL을 적용시키기 위해, 프로메테우스의 yml 파일을 수정해줍니다.

# yml 파일 오픈
vi prometheus.yml

아래와 같이, job을 새롭게 추가해줍니다.

  - job_name: "spring-application"
    metrics_path: '/actuator/prometheus'
    scrape_interval: 5s
    static_configs:
      - targets: ["localhost:8080"]

3. 연동 확인

변경 사항을 저장하고, 프로메테우스를 다시 실행해봅시다.

기존 9090 포트로 접속한 후, Status → Target health 탭에 들어가보면 새로운 target이 추가된 것을 확인할 수 있습니다.

스프링 앱 로그에서도 yml에 설정한대로 5초마다 한 번씩 해당 URI에 접속한 흔적이 있음을 확인할 수 있습니다


Query 탭에서 PromQL 쿼리를 이용해 수집한 데이터를 확인할 수 있습니다.

http_server_requests_seconds_count{uri="/actuator/prometheus"} 이라는 쿼리를 이용해 해당 URI에 request를 요청한 횟수를 알아보는 쿼리를 실행한 후 결과를 그래프로 확인할 수 있습니다!



4. 그라파나 설정

1. 그라파나 설치

https://grafana.com/grafana/download

위의 사이트에서 운영체제에 알맞는 그라파나를 설치해줍니다.

아래 명령어는 MacOS기준 그라파나 설치 명령어입니다.

curl -O https://dl.grafana.com/grafana-enterprise/release/12.1.1/grafana-enterprise_12.1.1_16903967602_darwin_amd64.tar.gz
tar -zxvf grafana-enterprise_12.1.1_16903967602_darwin_amd64.tar.gz

2. 그라파나 실행

./bin/grafana-server

localhost:3000 으로 접속하면 아래와 같은 초기 화면을 확인할 수 있습니다.
처음 접속하면 기본 정보는 admin, admin이므로, 우선 해당 정보로 로그인을 해줍니다.


3. 프로메테우스 연동

프로메테우스 연동을 위해, Home-Connections-Data sources 탭으로 이동해줍니다.

Prometheus를 클릭합니다.

아래처럼 사전에 설정한 prometheus의 서버 주소를 입력한 후 Save&Test 버튼을 클릭해 data source 추가를 완료합니다.



5. 대시보드 만들기

위에서 생성한 prometheus data source를 위한 대시보드를 구축해보겠습니다.

대시보드 구축 첫 화면입니다. 기존 다른 대시보드를 import 하는 방법도 있으며 아래 사진처럼 panel을 직접 만드는 방법도 존재합니다.

Builder 기능을 이용하면, 다양한 Metric을 커스텀해 추가할 수 있습니다. PromQL에 능숙하시다면, Code 기능을 이용해 더욱 유연하게 Metric을 편집할 수 있습니다.

각 Metric에 대한 연산도 함께 제공하니, 확인하고 싶은 지표에 따라 커스텀하면 되겠습니다.

cpu usage와 관련된 메트릭을 추가하면 아래와 같이 차트로 지표를 확인할 수 있습니다.

visualization 탭에서 다양한 뷰들을 제공하니, 지표에 따라 적절한 보기를 선택하시면 되겠습니다!


이렇게 로컬에서 Grafana + Prometheus 기반 모니터링 툴을 구축해보았습니다. 필요에 따라 대시보드를 적절히 이용해서 운영 서버의 상태를 유용하게 관리할 수 있습니다.

이어서, 그라파나의 Alerting 기능을 이용해, 특정 이벤트가 발생할 경우 Slack 알림을 전송하는 기능을 구현해보겠습니다!👇👇👇

https://velog.io/@dooo_it_ly/Infra-Grafana-Alerting-기능-이용해-슬랙-알림-받기


Reference

https://lordofkangs.tistory.com/327
https://ttl-blog.tistory.com/1366


profile
CS 마스터를 향해 ..

0개의 댓글