서비스를 운영하다보면, 다양한 메트릭 로그와 데이터를 수집하게 됩니다. 이 때, Grafana + Prometheus를 이용해 이 메트릭 데이터를 유연하게 다룰 수 있습니다.
서비스의 로그를 prometheus를 이용해 수집하고, 이를 grafana를 이용해 시각화해서 메트릭 데이터를 확인하는 것입니다.
간단하게 springboot + prometheus + garafana 툴을 연동하고, 특정 이벤트가 발생했을 때 개발자에게 grafana에서 slack 알림을 전송하는 실습을 진행해보겠습니다.
아래 링크를 통해 알맞은 프로메테우스를 다운로드합니다.
https://prometheus.io/download/
./prometheus
localhost:9090 에 접속하면 아래와 같은 프로메테우스 초기 화면을 확인할 수 있습니다.
아래와 같이 프로메테우스와 로그 수집을 위한 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해옵니다.
위에서 설정한 메트릭 수집 URL을 적용시키기 위해, 프로메테우스의 yml 파일을 수정해줍니다.
# yml 파일 오픈
vi prometheus.yml
아래와 같이, job을 새롭게 추가해줍니다.
- job_name: "spring-application"
metrics_path: '/actuator/prometheus'
scrape_interval: 5s
static_configs:
- targets: ["localhost:8080"]
변경 사항을 저장하고, 프로메테우스를 다시 실행해봅시다.
기존 9090 포트로 접속한 후, Status → Target health
탭에 들어가보면 새로운 target이 추가된 것을 확인할 수 있습니다.
스프링 앱 로그에서도 yml에 설정한대로 5초마다 한 번씩 해당 URI에 접속한 흔적이 있음을 확인할 수 있습니다
Query
탭에서 PromQL 쿼리를 이용해 수집한 데이터를 확인할 수 있습니다.
http_server_requests_seconds_count{uri="/actuator/prometheus"}
이라는 쿼리를 이용해 해당 URI에 request를 요청한 횟수를 알아보는 쿼리를 실행한 후 결과를 그래프로 확인할 수 있습니다!
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
./bin/grafana-server
localhost:3000 으로 접속하면 아래와 같은 초기 화면을 확인할 수 있습니다.
처음 접속하면 기본 정보는 admin, admin이므로, 우선 해당 정보로 로그인을 해줍니다.
프로메테우스 연동을 위해, Home-Connections-Data sources 탭으로 이동해줍니다.
Prometheus를 클릭합니다.
아래처럼 사전에 설정한 prometheus의 서버 주소를 입력한 후 Save&Test 버튼을 클릭해 data source 추가를 완료합니다.
위에서 생성한 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