이 글에서는 상세한 설명이나 구축 방법은 작성하지 않았습니다. Prometheus의 개념을 간단히 정리하고자 한 글입니다. 

 

Prometheus 란?

Prometheus는 그리스 신화에서 불을 인간에게 주고 문명을 선사한 티탄 신입니다.

위처럼 그 의미 그대로 오픈소스 모니터링 시스템 Prometheus는 개발자 닌간의 예지력과 지성을 상승시켜주는 유용한 도구입니다.

이 도구를 통해 개발자는 웹, 서버, DB 등 다양한 시스템의 상태를 쉽게 분석할 수 있고 특정 조건이 발생하면 경고를 보내게 하여 미리 장애를 예방할 수도 있습니다.

※ Prometheus는 Apache2 라이선스를 가진 완전한 오픈소스입니다.

 

Prometheus 구조

구조는 일반적인 모니터링 시스템과는 다릅니다.

대부분의 솔루션은 메트릭을 수집할 때 대상서버에서 중앙서버로 데이터를 전송해주는 Push 구조로 되어있지만, Prometheus는 중앙서버에서 메트릭을 대상서버로부터 Pull하여 가져오는 구조로 되어있습니다.

 

Prometheus는 왜 이러한 방식을 채택했고, 이러한 방식을 사용하는 Prometheus가 가장 인기가 많은 것일까요?

 

바로 모니터링 대상서버들의 부하 문제 때문입니다. 모니터링 대상서버에서 만약 부하가 높은 상황일 때 메트릭 정보를 전송하고자 한다면 이는 실제 어플리케이션에 문제를 발생시킬 수 있는 포인트가 될 수 있습니다. 모니터링을 하는 주체가 원할 때만 가져갈 수 있도록 할 수 있어 대상서버의 부하 부담을 줄여줄 수 있는 점이 Prometheus의 점유율을 높이는 요소가 되지 않았나 싶습니다. 물론 다른 편의 기능을 손쉽게 연동할 수 있다는 점도 큰 매력 포인트입니다.

 

물론 이러한 Pull 방식에는 단점도 있기에 아래와 같은 대안이 있기도 합니다.

 

- 단점 예시1 : 모니터링 대상이 가변적으로 변경될 경우, 모니터링 대상의 IP주소들을 알 수 없는 문제가 있습니다.

=> Service discovery : 특정 시스템이 현재 기동중인 서비스들의 목록과 IP 주소를 가지고 있게 하면 됩니다. VM들을 내부 DNS에 등록해놓고 새로운 VM이 생성될 때에도 DNS에 등록을 하도록 하면, DNS에서 현재 기동중인 VM 목록을 얻어와서 그 목록의 IP들로 풀링을 하면 되는 구조입니다. Prometheus는 서비스 디스커버리 시스템 솔루션 Consul, Kubernetes를 통해서 타겟 서비스의 목록을 가지고 올 수 있습니다.

 

- 단점 예시2 : 사설망에 있는 대상서버는 내부 IP만 할당되어 있고, 이 경우 Prometheus에서는 그 대상서버의 주소를 입력할 수 없는 상황이 있을 수 있습니다.

=> Pushgateway : Prometheus에 메트릭을 Push 할 수 있도록 하는 방안입니다. 대상서버에 설치된 에이전트가 휘발성 데이터를 배치 잡으로 Pushgateway에 보내게 하고 이를 Prometheus가 Pull 방식으로 가져올 수 있게 하는 방식입니다.

 

Grafana 란?

Grafana는 데이터를 시각화 하여 분석 및 모니터링을 용이하게 해주는 오픈소스 분석 플랫폼입니다.

다양한 시스템의 대시보드 템플릿을 받아 쉽게 구축을 할 수 있고, 그 무엇보다 정말 디자인이 멋집니다.

이 멋진 디자인을 보고 Grafana를 한번 배워보고 싶다라는 생각을 가지기도 했습니다. 

대시보드를 특정 용도게 맞게 커스텀하여 사용하려면 여러 시행착오를 겪으며 만들어야 하기도 하겠지만, https://grafana.com/grafana/dashboards/ 사이트에서 정말 잘 만들어진 템플릿을 다운로드 받거나 ID를 복사해 손쉽게 그라파나에서 import 할 수 있습니다.

 

Alert Manager 란?

모니터링 시스템이므로 문제가 발생하면 이를 알람으로 보내주는 역할도 있어야 합니다. 보통 알람 수단으로는 slack, hipchat, email 등이 있습니다. 간단 원리는 Alert Manager가 alert에 대한 queue를 제공하고, Prometheus는 prometheus.yml 파일 내 등록된 rule 조건에 해당하게 되면 queue에 alert를 집어 넣는 방식입니다.

Rule 규칙은 expression을 작성하여 복잡한 조건을 걸 수 있는데 Grafana에서 쉽게 알람을 설정할 수 있기 때문에 간단한 로직의 알람 경고는 Grafana를 이용하는 것도 좋아보입니다.

복사했습니다!