• Prometheus는 메트릭 수집, 시각화, 알림, 서비스 디스커버리 기능을 모두 제공하는 오픈 소스 모니터링 시스템
  • SoundCloud에서 Go언어로 개발하였으며, Apache 2.0 License를 따르고 있음
  • 2016년에 쿠버네티스에 이어 두 번째로 CNCF(Cloud Native Computing Foundation) 산하 프로젝트 멤버로 들어감
  • Grafana Labs에서 유지 보수를 메인으로 전담
  • Prometheus는 독립형 오픈소스 프로젝트이며 많은 회사들이 사용함
  • kubernetes에서 Prometheus를 사용하여 매트릭 수집 및 대시보드 구축하는 방식을 장려
  • Prometheus는 애초에 "스케일 아웃"을 고려하지 않고 설계
  • 데이터가 많으면 많을수록 Prometheus 클러스터링을 위한 Thanos, Cortex등 여러 오픈 소스가 개발되면서 클러스터링 구성 가능

Prometheus의 대표적인 기능

  1. 풀 방식의 메트릭 수집, 시계열 데이터 저장
  2. PromQL을 활용하여 저장된 시계열을 쿼리 및 집계
  3. 서비스 디스커버리
  4. 데이터 시각화

Prometheus 아키텍처

  • Prometheus의 아키텍쳐는 아래와 같이 구성

1. Prometheus

  • Prometheus는 시계열 데이터를 저장
  • Prometheus는 Exporter를 통해 다양한 서비스/시스템의 메트릭을 수집 → Node Exporter는 설치된 머신의 CPU, Memory 등의 메트릭 정보를 수집
  • Client Library는 애플리케이션 코드를 계측하기 위해 쓰인다.
  • Prometheus는 설정 파일(prometheus.yml)에 작성된 "Job"을 통해서 이들이 수집하는 메트릭을 가져와서 저장

2. Pushgateway

  • Pushgateway는 Polling방식이 아닌 프로메테우스에 메트릭을 매트릭을 푸시할 수 있도록 지원
  • Prometheus에서 제공하는 Pushgateway는 푸시된 매트릭을 프로메테우스에서 가져갈 수 있도록 중개자 역할을 수행
  • 즉, Pushgateway에 푸시된 매트릭을 Prometheus에서 가져갈 수 있음

3. Client Library

  • Client Library는 애플리케이션 코드를 계측하기 위해 사용됨
  • 서비스를 개발할 때 가장 좋은 방법은 프로메테우스 클라이언트 라이브러리를 사용해 메트릭을 코드 인라인 기반으로 직접 작성하고 계측함
  • 기본적으로 Go, Java(Scala), Python, Ruby 는 공식 라이브러리를 제공
  • 클라이언트 라이브러리 : https://prometheus.io/docs/instrumenting/clientlibs/

4. Exporter

  • Exporters는 실제로 매트릭을 수집하는 프로세스
  • Exporter가 매트릭을 수집하고 HTTP 통신을 통해 매트릭 데이터를 가져갈 수 있게 /metrics 라는 HTTP 엔드포인트를 제공
  • Prometheus가 Exporter의 엔드포인트로 HTTP GET 요청을 날려 매트릭 정보를 수집(Pull)함

5. Alertmanager

  • Alertmanager를 통해서 특정 메트릭이 임계치가 넘어가거나 경계에 잡혔을 때 이메일, 슬랙 등을 통해서 알림을 보내줄 수 가 있음
  • UI 기능이 있어 데이터를 시각화 가능 → 프로메테우스의 시각화 기능은 약한 편임
  • Prometheus의 Alertmanager 기능의 부족한 부분을 채우기 위해 Grafana 대시보드 툴로 Prometheus UI를 대체

6. Service Discovery

  • Service Discovery 기능을 제공
  • Service Discovery를 활용하면, 인스턴스는 다이나믹하게 스케일 인/아웃이 됨
  • Prometheus는 여러 Service Discovery와 통합 가능
  • 쿠버네티스 Service Discovery와 통합하여, 쿠버네티스 클러스터에 존재하는 모든 노드와 팟들의 메트릭을 수집 가능


Prometheus를 사용하기에 적합한 일, 적합하지 않은 일

  • Prometheus는 "메트릭"을 저장하기 위한 모니터링 시스템
  • 커널 스케줄링이나 데이터 수집 실패 같은 요소로 인해 약간의 부정확성과 레이스 컨디션을 피할 수 없는 운영 모니터링 환경을 위해 설계되었다.

1. Prometheus에 적합한 일

  1. 순수한 숫자 시계열을 기록하는 데 적합
  2. 메트릭 기반의 시계열 데이터 저장
  3. 동적인 혹은 마이크로 서비스의 인스턴스에 대한 메트릭을 수집

2. Prometheus에 적합하지 않은 일 → 다른 도구를 사용하여 Prometheus의 부족한 부분을 해결

  1. 이벤트 로그나 개별 이벤트를 저장하는 일
  2. 이메일 주소/사용자 이름과 같이 카디널리티가 높은 데이터를 저장하는 일
  3. 100%의 정확성이 요구되는 일

참고 URL : https://gurumee92.tistory.com/220
Pushgateway 참고 URL : https://kdevkr.github.io/using-pushgateway-to-monitor-private-network-instance/
Client Library 참고 URL : https://medium.com/nexclipper-io/prometheus-exporter-exporterhub-f29d63e0ae49


+ Recent posts