기존에 진행했었던, 프로젝트를 바탕으로 모니터링 툴을 적용하고 부하를 걸어 어떤 지점에서 병목이 발생하는 지
확인해보려 한다.
스프링 설정
우선, 모니터링 툴을 적용하기위해 프로젝트에 스프링 actuator를 적용하고, 메트릭 수집 도구로는 프로메테우스를 사용할 것이니 이 둘을 모두 gradle에 추가해주자.
//actuator
implementation 'org.springframework.boot:spring-boot-starter-actuator'
implementation 'io.micrometer:micrometer-registry-prometheus'
그리고, 확인하고 싶은 지표들을 골라 설정해준다. (난 거의 대부분을 활성화하고 (기본적으로 대부분 활성화는 되어 있다.) 노출되게끔 설정했다.) 스프링 공식문서 를 참고해서 원하는 endpoint에 대해서만 활성화, 노출을 할 수 있다.
그 후, /actuator경로에 들어가게 되면
이런식으로 여러 상태를 표시해주는 actuator들이 활성화 되어 있는 것을 알 수 있다.
(각 경로마다 표현해주는 정보는 다르기에, 공식문서를 참고해서 확인하길 바란다.)
프로메테우스 설정
지표 수집 도구는 prometheus를 사용할 것이고 프로메테우스가 잘 활성화 되어 있는 것을 확인했으니, 프로메테우스 설정을 하고 프로메테우스를 동작시켜보자.
scrape_configs:
# The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
- job_name: "prometheus"
static_configs:
- targets: ["localhost:9090"]
- job_name: "ES-monitor"
metrics_path: "/actuator/prometheus"
scrape_interval: 1s
static_configs:
- targets: ["localhost:8081"]
prometheus.yml파일에 scrape_configs 하위에 위 처럼 (정확히는, 2번째 job만) 설정해주면 된다.
job_name은 원하는대로 적으면 되고, path는 현재 서버에서 프로메테우스 지표의 경로, interval은 메트릭을 수집할 주기를 의미하고, static_config의 targets은 서버의 도메인을 의미한다.
이제 터미널을 켜 프로메테우스를 실행하게 되면 9090포트에 ( 폴더형식인 경우 폴더 내부에서 ./prometheus로 실행할 수 있고, brew로 설치한 경우 아마 brew service start prometheus로 실행할 수 있을 것이다)
이렇게 프로메테우스가 서버에서 나오는 지표를 잘 수집하고 있는 것을 확인할 수 있다.
그라파나 설정
그라파나를 설치한 곳에서 먼저 실행을 시켜준다. ( 나는, 폴더를 받아 설치한 경우기에 bin폴더 내의 grafana-server로 실행했다. )
./grafana-server
3000번 포트로 접속해보면 이렇게 잘 실행되는 것을 확인 할 수 있다.
그 후, Add your first datasource -> Prometheus를 눌러 연동할 프로메테우스 정보를 입력해준다.
다른건 만질 필요 없이, 프로메테우스 서버 주소와 데이터 소스 이름만 정해주고 생성해주자.
그 후, build dashboard를 눌러 직접 visualization을 추가해주면 된다 (pannel이라고도 한다)
근데, https://grafana.com/grafana/dashboards/?search=spring 그라파나 공식 홈페이지에서 이미 잘 만들어진 템플릿을 받을 수 있으니 이걸 활용해보자.
공홈에서 원하는 패널의 ID를 복사한 후, DashBoard->Import로 들어가서 복사한 ID를 넣어주고 생성해주면 된다.
이름, 데이터소스 등등 시키는 것만 설정 해주면 된다.
그러면, 이렇게 멋진 모니터링 툴을 가질 수 있게 된다.
사실 서비스를 로컬에서 구동하고 프로젝트 또한 모놀리딕 구조이기에 핀포인트까지 쓸 필요는 없지만..
그래도, 이왕 모니터링 툴을 구축하는 김에 핀포인트도 써보려고한다. (뭐, 쿼리를 추척하는 기능도 있다고해서..)
다음편에 계속..
'Spring' 카테고리의 다른 글
부하 테스트 하기(3) -핀포인트 오류 잡기 (1) | 2023.07.13 |
---|---|
부하 테스트 하기 (2) (0) | 2023.07.12 |
왜 Spring Scheduler를 사용할 때 트랜잭션이 정상적으로 수행되지 않을까? (0) | 2023.05.10 |
Jsoup으로 로그인 후 웹 사이트 크롤링 하기 (1) | 2023.05.09 |
웹소캣이란? (0) | 2023.05.04 |