[Prometheus] Prometheus 구조 및 개념
l Prometheous
Prometheus(프로메테우스) 모니터링 시스템은 오픈 소스 기반의 모니터링 시스템으로 Kubernetes(쿠버네티스) 활성화 함께 많이 사용되고 있다. 물론 쿠버네티스 환경 외에도 일반적인 온프레미스 환경에서도 사용이 가능하여 많은 인기를 끌고 있다. 현재 CNCF(Cloud Native Computing Foundation)에 소속되어 있다.
프로메테우스는 구조가 간단하며, 운영이 쉽고 강력한 쿼리 기능을 가지고 있다. 간단한 텍스트 형식으로 메트릭 데이터를 쉽게 익스포트 할 수 있으며, key-value 형식의 데이터 모델을 사용한다. 수집된 데이터는 Grafana(그라파나)를 통해 시각화를 제공한다.
프로메테우스는 순전히 숫자로 된 시계열을 기록하는 데 적합하다. 기계 중심 모니터링과 고도로 동적인 서비스 지향 아키텍처 모니터링 모두에 적합하다. 프로메테우스는 중단 중에 신속하게 문제를 진단할 수 있도록 하는 시스템으로서 안정성을 위해 설계되어있으며, 각 프로메테우스 서버는 독립형으로 동작하며, 네트워크 스토리지 또는 기타 원격 서비스에 의존하지 않는다.
대부분의 모니터링 시스템은 타켓 서버(모니터링 대상 서버)에 에이전트를 설치하여 중앙의 모니터링 수집 서버로 push(푸시) 하는 방식인데, 프로메테우스는 pull(풀) 방식을 사용하여 데이터를 수집한다. 즉 모니터링 대상 서버에 exporter(익스포터)라는 에이전트가 실행되어 있으면, 주기적으로 에이전트에 접속하여 데이터를 가져오는 방식이다.
l Jobs / Exporter : 프로메테우스가 모니터링 데이터를 가져갈 수 있도록 타겟 서버에 설치되는 에이전트 이다. 서버 상태를 나타내는 Node exporter, DB의 상태를 나타내는 SQL Exporter 등 다양한 커스텀 익스포터들이 개발되어 사용되고 있다. 익스포터 자체는 특별한 기능을 수행하지 않는다. 프로메테우스의 요청이 있을 때 그 시점에 메트릭을 수집하여 http get 방식으로 리턴한다. 히스토리를 저장하지 않기 때문에 시점의 값만 알 수 있다.
l Pushgateway : Pushgateway는보안상의 이유로 프로메테우스가 직접 익스포터에 연결 할 수 없을 때, Proxy Forwarding을 사용하여 메트릭 데이터를 수집할 수 있도록 해주는 서비스이다. Application 이 pushgateway 에 메트릭 데이터를 푸쉬하면, 프로메테우스 서버가 pushgateway 에 접근해 메트릭 데이터를 풀 하는 방식으로 동작한다.
l Alertmanager: Alertmanagr는 메트릭에 대한 특정 룰을 설정하고 그 규칙을 위반하는 사항에 대해 알람을 전송하는 역할을 한다. 예를들면 “CPU 사용률이 50% 이상일때 알람을 보낸다.” 라고 룰을 설정하면, 수집된 CPU 메트릭의 값이 50 이상일때 알람을 발송한다.
l Service discovery : 프로메테우스는 기본적으로 풀 방식을 사용하여 모니터링을 하기 때문에 모니터링 대상 서버의 목록을 유지하고 있어야 한다. 쿠버네티스 환경처럼 오토스케일이 발생할 경우, 타겟 서버의 IP가 가변적이어서 수집할 서버의 목록을 확인할 수 없는 경우가 많다. 이런 경우 모니터링 대상 목록을 관리하기 위해 서비스 디스커버리를 사용하여 유지한다.
l Retrieval : 익스포터로 부터 주기적으로 메트릭을 수집하는 모듈이며, 서비스 디스커버리 시스템으로 부터 모니터링 대상 목록을 받아오는 역할도 수행하는 컴포넌트이다.
l HDD/SDD : 수집된 데이터는 프로메테우스 서버의 로컬 메모리와 디스크에 저장된다. 단순하고 사용이 쉬운 방면, 별도의 데이터베이스가 없으므로 확장이 불가능하다.
l Data visualization : 저장된 메트릭은 PromQL 쿼리 언어를 사용하여 조회가 가능하다. 또한 외부 API나 프로메테우스 웹콘솔을 사용하여 visualization 을 구성할 수 있다.
프로메테우스 서버는 독립적인 구조로 운영되기 때문에, 많은 수의 모니터링 서버에서 대량의 메트릭을 수집할 때 프로메테우스 서버의 시스템 리소스가 부족할 경우 확장이 불가능한 구조로 되어 있다. 또한 프로메테우스 서버가 다운되거나 설정 변경으로 인한 재시작시 메트릭이 저장되지 않고 유실되는 문제가 있다. 이러한 문제를 수정하기 위해 프로메테우스 서버를 다양한 형태로 구성 및 운영하기 위한 노하우가 필요 하다. 이 부분은 다른 포스트에서 다루어 본다.
참고자료 :
https://prometheus.io/docs/introduction/overview/
2023-06-28 / Sungwook Kang / https://sungwookkang.com
프로메테우스, Prometheus, 모니터링 시스템, Grafana, 그라파나, DevOps, 데브옵스, Kubernetes, 쿠버네티스
'SW Engineering > DevOps, SRE' 카테고리의 다른 글
[Prometheus] Prometheus Thanos 아키텍처 살펴보기 (0) | 2023.06.29 |
---|---|
[Prometheus] Prometheus 확장 및 내구성을 위한 다양한 구성 방법들 (0) | 2023.06.28 |
Kubernetes 장점 (0) | 2021.07.31 |
Kubernetes 마스터 노드, 워커 노드 (0) | 2021.07.29 |
SRE (Site Reliability Engineering) 역할 (0) | 2020.05.14 |