이번 게시물에서는 서버 모니터링 도구인 Prometheus 를 사용하고, 서버에 부하가 발생되면 AlertManager 를 통해 Slack 으로 알림을 전송해보도록 하겠다.
1. 애플리케이션 설정
먼저 애플리케이션에 위와 같이 의존성을 추가해준다. Micrometer 에서 제공하는 Metric 정보를 Prometheus 가 읽을 수 있도록 변경해주는 역할을 하게 해준다.
yml 파일에서 Spring Actuator 의 EndPoint 를 설정해준다.
설정을 마치고 애플리케이션을 구동한 후 /actuator/prometheus 경로에 접속해보면 Micrometer에서 제공해주는 metric 정보들을 Prometheus 가 읽을 수 있도록 변환한 것을 확인할 수 있다.
2. AlertManager 설정 및 구동
별도의 alertmanager.yml 파일을 만들고 위와 같이 작성해준다. 여기서 slack_api_url 부분에는 Slack App 의 WebHook 주소 값을 넣어 주어야 한다. (Slack App 을 만들고 WebHook 을 발급하는 과정은 생략한다.)
설정 정보를 보면 처음 알림이 가고나서 30분이 지난 후에 다시 알림을 전송하도록 한 것을 확인할 수 있다.
이 yml 파일이 바로 우리가 구동시킬 AlertManager 의 설정 파일이 된다.
이제 위 커맨드를 입력하여 Docker Image 를 배포해준다. 이때, 우리가 만든 alertmanager.yml 파일을 볼륨 마운트를 통하여 전달하는 것을 볼 수 있다.
실제 서버의 9093번 포트로 접속해보면 AlertManager 의 UI 를 확인해볼 수 있다.
3. Prometheus 설정 및 구동
prometheus.yml 파일을 만들고 위와 같이 작성해주었다. (설정에 대한 자세한 내용은 생략)
first_rules.yml 파일을 만들어서 알림을 보낼 규칙을 설정해준다. 여기서는 정보를 받고 있는 서비스 중에서 하나라도 DOWN 상태가 되면 알림을 보내도록 규칙을 정의해놓았다.
(first_rules.yml 파일과 prometheus.yml 파일을 같은 경로에 두어야 한다.)
이제 docker run 명령으로 이미지를 배포해준다. (똑같이 설정 정보를 볼륨 마운트한다.)
9090번 포트로 접속해보면 Prometheus 화면이 잘 나온다.
Status -> Rules 를 클릭하면
이렇게 우리가 추가한 룰이 잘 추가된 것을 볼 수 있다.
4. Prometheus 알림 기능 사용해보기
이제 up 이라는 쿼리를 보내면 연동된 서비스들이 1 값으로 잘 구동되어 있음을 확인할 수 있는데,
이때 서비스를 한 개 이상 닫게 된다면
이렇게 PENDING 상태가 되었다가 31초가 지나면
FIRING 상태가 되고
Alertmanager 서버에 알림이 도착하게 된다. 그리고 이 알림은 Slack의 WebHook 주소를 통해 Slack 채널로 전달된다.
Slack 을 확인해보면 위와 같이 알림이 잘 오고 있는 것을 볼 수 있다.
5. 특정 API 호출에 대해 알림 설정 해보기
위 과정들을 통해 서비스가 하나라도 다운되면 Slack 으로 알림이 전송되도록 해보았다. 그렇다면 우리가 만든 특정 API 의 실패 횟수가 많아질 때 알림을 전송하도록 하려면 어떻게 해야할까?
API 호출 횟수를 기록하는 커스텀 Metric 을 만들고 이것을 Prometheus 규칙에 추가해주면 된다.
@Counted 어노테이션을 통해 API 호출 시 value 에 해당하는 metric 을 생성하도록 만들어준다.
(어노테이션에 대한 설명은 Spring Actuator 에 대해 학습해보길 추천한다.)
@Counted 을 사용하기 위해 Aspect 를 빈으로 등록해준다.
이제 해당 API 로 1회 호출을 보내준다.
그런 다음 /actuator/metrics 로 접속해보면 우리가 추가한 metric 정보가 잘 나오게 된다.
Prometheus 에서도 조회해보면 잘 나온다.
이제 아까 작성했던 Promethues의 first_rules.yml 파일을 열어 review_request 라는 이름의 새로운 규칙을 정의해준다.
1분동안 실패 요청의 비율이 0.8 을 초과한다면 알림을 전송하도록 해주었다.
restart 하여 룰이 잘 추가된 것을 확인해준다.
이제 nGridner 를 통해 해당 API에 고의적으로 실패 요청을 보내준다.
이렇게 우리가 정의한 규칙이 FIRING 상태가 되고
Slack 을 확인해보면 알림도 잘 오는 것을 볼 수 있다.
참고 자료
https://co-no.tistory.com/entry/Prometheus-Metric%EC%9D%98-Threshold%EB%A5%BC-%EC%A7%80%EC%A0%95%ED%95%98%EA%B3%A0-AlertManager%EB%A1%9C-%EC%95%8C%EB%9E%8C-%EB%B0%9B%EA%B8%B0
https://velog.io/@91savage/%ED%94%84%EB%A1%9C%EB%A9%94%ED%85%8C%EC%9A%B0%EC%8A%A4-Alertmanager
https://gurumee92.tistory.com/255
https://godekdls.github.io/Prometheus/alerting.configuration/
[Prometheus] Metric의 Threshold를 지정하고 AlertManager로 메일 통해 알람 받기
1. Prometheus의 Alertmanager 플러그인 설치 # alertmanager 설치 파일 다운로드 # cd ~/Downloads # wget https://github.com/prometheus/alertmanager/releases/download/v0.25.0/alertmanager-0.25.0.linux-amd64.tar.gz # tar -xzvf alertmanager-0.25.0.
co-no.tistory.com
[프로메테우스] Alertmanager
AlertManager Prometheus 관련 설정 Rule 관련 설정 Alertmanager 설정
velog.io
알람 파이프라인 구축하기
개요 이번 장에서는 Prometheus, Alertmanager, Slack을 연동해서, 알람 파이프라인을 구축할 것이다. 우리가 구축할 알람 파이프라인은 다음과 같다. 알람 파이프라인에 대해 간단히 설명하자면, 먼저
gurumee92.tistory.com
Alert Configuration
Alertmanager 설정 가이드
godekdls.github.io
'기타 > 관리' 카테고리의 다른 글
SpringBoot 3 에서 Zipkin 서버를 통한 분산 추적 해보기 (0) | 2024.07.05 |
---|---|
Redis 를 사용하여 성능 최적화 (0) | 2024.06.01 |
클라우드 환경에 nginx 설치하여 분산 처리(Scale-Out)하기 (0) | 2024.05.24 |
nGrinder 설치 및 사용(부하 테스트)해보기 (1) | 2024.05.22 |
[APM] Scouter 설치 및 자바 애플리케이션과 연동하기 with Docker (0) | 2024.05.17 |