Information Security Study

프로메테우스 페더레이트 설정하기 + 알람 등록하기 본문

네트워크 캠퍼스/3차 프로젝트

프로메테우스 페더레이트 설정하기 + 알람 등록하기

gayeon_ 2024. 8. 13. 14:42

프로메테우스 페더레이트 설정하기

Prometheus Federate

: 여러 Prometheus 서버에서 데이터를 수집하여 중앙에서 통합된 메트릭을 조회할 수 있도록 해주는 기능

 

 

프로메테우스 페더레이트를 사용하는 이유

1) 중앙집중화된 메트릭 조회

- 페더레이트 기능으로 개별적으로 데이터를 수집하고 보관하는 각 프로메테우스를 중앙 서버에 통합해서 조회할 수 있다.

- 여러 지역이나 데이터 센터에 분산된 프로메테우스 인스턴스를 한 곳에서 관리하고 모니터링 할 수 있다.

 

2) 리소스 절약

- 프로메테우스 인스턴스 간의 데이터 복제 없이 각 인스턴스의 데이터를 페더레이트 서버에서 직접 가져오기 때문에 중복 저장을 방지하고 리소스를 절약할 수 있다.

 

3) 간편한 데이터 집계

- 페더레이트 서버를 통해 여러 인스턴스에서 수집된 데이터를 쉽게 집계하고 분석할 수 있다.

- 예) 여러 클러스터의 CPU 사용량을 합산하거나 평균을 구하는 등의 작업

 

4) 확장성

- 프로메테우스는 하나의 인스턴스에서 수집 가능한 데이터의 양에 제한이 있지만 페더레이트 기능은 여러 프로메테우스 인스턴스를 배포하고 중앙에서 데이터를 통합하여 관리하기 때문에 확장성이 높아진다.

 

5) 고가용성 및 장애 복구

- 개별 프로메테우스 인스턴스에 장에 발생 시 다른 인스턴스에서 데이터를 수집하고 중앙에서 조회할 수 있기 때문에 서비스의 연속성을 보장할 수 있다.

 

6) 다양한 환경 지원

- 개발, 테스트, 프로덕션 등 서로 다른 환경에서 수집된 메트릭을 중앙 서버에서 통합해서 조회할 수 있기 때문에 다양한 환경을 쉽게 관리할 수 있다.

 

 

먼저 모니터링 인스턴스와 가용영역 a의 두 app 인스턴스의 프로메테우스 서버를 실행시킨다.

 

 

프로메테우스, 그라파나 사전 설정은 이전 게시글을 참고하면 된다.

 

https://gayeon-l.tistory.com/440

 

240725 인그레스 엔진엑스 설정하기, 프로메테우스와 그라파나로 모니터링하기, 그라파나로 메일

인그레스 엔진엑스 설정하기 현재 vpc에 두 가용영역 a, b가 있는데각 가용영역에 엔진엑스가 있다.원래는 로드밸런서로 두 엔진엑스를 부하분산하려고 했지만엔진엑스를 하나 더 생성해서 인

gayeon-l.tistory.com

 

 

 

모니터링 프로메테우스 서버

 

 

 

app1 프로메테우스 서버

 

 

 

app2 프로메테우스 서버

 

 

 

그리고 모니터링 서버에서 각 앱 인스턴스들의 데이터를 중앙 집중식으로 수집하기 위해서는 프로메테우스 설정 파일을 수정해야 한다.

모니터링 인스턴스의 prometheus.yml에 위와 같이 federate job을 등록한다.

 

이렇게 하면 하나의 모니터링용 Prometheus 서버에서 전체 애플리케이션 서버의 메트릭을 확인할 수 있다.

 

 

 

 

설정 파일 수정 후 적용을 하기 위해서는 프로메테우스 서버 종료 후 재시작을 해줘야 한다.

 

 

ps -ef | grep prom

 

프로메테우스 문자열을 포함하는 프로세스 실행 목록을 찾는 명령어다.

이 명령어로 프로메테우스의 PID를 찾고 kill 명령어로 해당 프로세스를 종료한 뒤 nohup으로 다시 백그라운드 실행을 해준다.

 

 

 

재시작을 하고 나서

모니터링 인스턴스의 플로팅 ip:9090

으로 접속하면 federate job이 추가된 것을 확인할 수 있다.

endpoint로 두 애플리케이션 서버의 주소도 잘 저장되었다.

 

 

 

이제 그라파나에서 수집된 데이터를 시각화할 것이다.

새 대시보트를 생성하고 데이터 소스는 prometheus-monitoring으로 선택한다.

 

프로메테우스-app은 애플리케이션에 있는 프로메테우스

프로메테우스-self는 모니터링 인스턴스에 있는 프로메테우스

 

 

 

각 애플리케이션용 인스턴스의 프로메테우스가 모니터링 대상의 상태를 확인하는지 보기 위해 up 메트릭을 사용했다.

 

 

up 메트릭은 애플리케이션 인스턴스가 현재 Prometheus에 의해 성공적으로 스크랩되고 있는지를 보여준다.

값이 1이면 해당 타겟이 정상적으로 응답하고 있음을 의미하며 Prometheus가 데이터를 수집할 수 있음을 나타낸다다.

만약 값이 0이라면 해당 타겟이 응답하지 않거나 문제가 있음을 의미하며 Prometheus가 데이터를 수집할 수 없다는 것을 나타낸다.

 

 

metric과 label filters를 선택한 뒤 run queries를 누르면 up 값이 그래프로 뜬다. 이것으로 페더레이트 잡이 인식되는 것을 확인했다.

up 말고도 cpu 등 각 애플리케이션의 사용량을 통합해서 볼 수 있다.

 

 

 

대시보드를 저장했다.

 

 

 

app2 애플리케이션 인스턴스의 프로메테우스 서버를 종료시킨 뒤 그라파나 대시보드에서 그래프가 어떻게 변화하는지 확인할 것이다.

 

 

 

app1은 정상 실행중이므로 1 값을 유지하고 있다.

 

 

 

프로메테우스 서버를 종료시킨 app2의 up 값은 0으로 변화했다.

 

 

 

프로메테우스/targets 페이지에서도 federate job이 두 개중에 하나만 정상 실행중임을 확인할 수 있다.


두 서버 중 하나의 서버에 문제가 있을 경우 알람 등록하기

 

알람 설정 및 자세한 설명은 이전 게시글에 작성했다.

 

https://gayeon-l.tistory.com/446

 

그라파나-프로메테우스로 인스턴스가 종료됐을 경우 알람 받기

그라파나-프로메테우스로 인스턴스가 종료됐을 경우 알람 받기퍼블릭 서브넷에 있는 모니터링 인스턴스에 있는 프로메테우스가 프라이빗 서브넷에 있는 app1 인스턴스의 애플리케이션의 상태

gayeon-l.tistory.com

 

 

모니터링 인스턴스에 federate로 연결된 두 서버 중 한 서버 상태에 문제가 생길 경우 이메일로 알람이 오도록 설정할 것이다.

 

 

Home > Alerting > Alert rules

으로 들어가서 새 알람 규칙을 생성한다.

알람명은 자유롭게 작성하고 Define query and alert condition에서 알람을 트리거할 쿼리를 정의하고 알람 조건을 설정한다.

쿼리는 대시보드에서 사용했던 up 메트릭을 사용했다. 

Add queries로 여러개의 쿼리를 등록할 수 있다.

두 서버를 관리해야 하므로 add queries로 app1, app2 모두 작성했다.

 

 

 

그리고 알람 발생 조건을 정의해야 한다.

Add expression으로 Threshold를 추가해서 A 또는 B의 결과가 1 미만일 경우 알람을 발생시키도록 했다.

여기서 A는 위에서 정한 첫번째 쿼리이고 B는 두번째 쿼리다.

 

 

 

Set evaluation behavior에서는 알람 조건을 얼마나 자주 평가할지, 설정된 조건이 얼마나 오랫동안 지속되어야 알람 상태를 변경할지 등을 정의한다.

설정된 조건이 1분 동안 지속된다면 알람을 보내도록 했다.

 

 

 

알람 메일을 받을 contack point를 선택한다.

 

 

 

이제 저장하면 알람 규칙 목록에 새로 추가된 것을 확인할 수 있다.

 

 

 

app2의 프로메테우스 서버를 종료시켰더니 알람 폴더의 그룹이 pending 상태로 변경되었다.

 

 

알람 조건이 처음으로 만족되었을 때(즉 문제가 발생했을 가능성이 있을 때) 그룹이 펜딩 상태가 된다.

이 상태에서는 Grafana가 문제가 일시적인 것인지 확인하기 위해 설정된 시간 동안 알람 조건을 계속 평가한다.

만약 펜딩 상태 동안 조건이 다시 정상으로 돌아오면 상태가 초기화되고 알람이 발송되지 않는다.

 

 

 

 

pending 상태가 1분 지속되니 Firing으로 상태가 변하면서

 

 

 

알람이 발송되었다.