본문 바로가기
  • A space that records me :)
기술/Prometheus

프로메테우스(prometheus) 란?

by yjkim_97 2021. 7. 16.

지금 유지보수 중인 시스템 중에서  .Net Framework로 개발한 것이 있는데, 이 시스템이 가끔 불안정한 모습을 보였다.

시스템에 특정 문제가 발생하면 나를 포함은 유지보수 담당자에게 SMS로 전송되고, 그 문자를 받은 사람은 바로 접속하여 확인을 하는 방식으로 진행하고 있었다.

 

그러나 우리는 SMS로 문자를 받는 것 보다 더 빠르게 실시간으로 확인을 하고 싶었고 특정 문제 뿐만 아니라 CPU 점율과 시스템이 받고 있는 실시간 패킷정보 등을 알고 싶었다.

 

팀장님께서 내게 프로메테우스 라는 것이 있고 이것을 통해 시스템 메트릭을 수집할 수 있는 것 같으니 프로메테우스가 정확인 어떤 아이이며 어떻게 동작하는 것인지, 우리가 원하는 메트릭 정보를 커스텀하여 수집 할 수 있는 것인지 알아보라고 하셨다.

 

새로운 어떤 기능을 내가 알아보다니.. 조금 두렵고 떨렸다. 제대로 알아볼 수 있을까.

하지만 이런마음을 가진다면 나는 발전할 수 없다.

왜냐?? 새롭고 더 좋은 기술들이 나오는데 이런것들을 내가 스스로 찾아서 습득해야한다. 그러기 위해서는 이런 두려움을 이겨내자!!

==> 결과. 재밌다!! 내가 해당 시스템에 내가 원하는 특정 메트릭 정보를 커스텀하여 수집 프로메테우스가 수집하게 했다!!



프로메테우스(prometheus)  란?

  • 프로메테우스는 메트릭 기반의 오픈소스 모니터링 시스템이다.
  • 이벤트 모니터링 및 경고에 사용되는 무료 소프트웨어 응용 프로그램이다.
  • PromQL 및 실시간 경고가 가능하다.
  • Go 언어로 작성되었다. 아파치2 라이선스를 사용한다.
메트릭(Metric)이란?
수집하는 시계열 데이터를 일컫는 말이다. 프로메테우스의 메트릭은 아래와 같이 수집된다.
메트릭명{필드1=값, 필드2=값} 샘플링데이터

  • 프로메테우스의 메트릭

https://prometheus.io/docs/concepts/data_model/

 

Data model | Prometheus

An open-source monitoring system with a dimensional data model, flexible query language, efficient time series database and modern alerting approach.

prometheus.io


기능 및 구성

  • 메트릭 수집, 시계열 데이터 저장
  • PromQL을 활용하여 저장된 시계열 데이터에 대한 집계 -> 성능분석 가능
  • 그라파나를 이용한 데이터 시각화
  • alertmanager를 통한 알림
그라파나(Grafana)
데이터를 시각화하여 분석 및 모니터링을 용이하게 해주는 오픈소스 플랫폼이다. 여러 데이터 소스를 연동하여 사용할 수 있으며 시각화된 데이터들을 대시보드로 만들 수 있다.

 

아키텍처

프로메테우스가 메트릭을 수집하는 방식은 push가 아닌 pull방식이다.

즉, 프로메테우스 메인 서버(Prometheus server)에서 주기적으로 클라이언트에 접속해서 메트릭을 가져오는 방식이다.

  • Service Discovery :
    DNS나 Hashicorp사의 Consul또는 쿠버네티스를 통해서, 모니터링해야 할 타겟 서비스 목록을 가지고 있다.
  • Pushgateway :
    Proxy Forwarding을 해서 접근할 수 없는 곳에 데이터가 존재하는 경우에 사용할 수 있는 대안이다.
    애플리테이션이 Pushgateway에 메트릭을 push한 후, Prometheus server가 Pushgateway에 접근하여 메트릭을 pulling한다.
  • Exporter :
    모니터링 에이전트로 타셋 시스템에서 메트릭을 읽어서, 프로메테우스가 pulling을 할 수 있도록 한다.
    또한 단순한 HTTP GET으로 메트릭을 텍스트 형태로 프로메테우스에게 리턴한다. 요청 당시 데이터를 리턴하는 것 뿐, 저장하지는 않는다.
  • Prometheus server :
    프로메테우스의 메인 서버로 메트릭 데이터를 수집하고 저장한다. Prometheus server 내부에는 Retrieval, TSDB, HTTP server 모듈이 있다.
  • Retrieval :
    Service Discovery로 부터 모니터링 대상 목록을 받아오고, Exporter로 부터 주기적으로 메트릭을 수집하는 모듈이다.
  • TSDB(Time-series Database) :
    수집된 메트릭은 Prometheus server 내의 메모리와 (default)로컬 디스크에 저장된다. (필요에 따라 원격 서버에 데이터를 저장할 수 있다.)
    데이터베이스에 별도로 저장하지 않기 때문에 대상 시스템이 늘어날 수 록 디스크를 늘려야한다. 
  • HTTP Server :
    프로메테우스에 저장된 데이터를 조회하기 위해서 필요한 서버이다. 프로메테우스는 데이터를 가져가기 위한 프로토콜로 HTTP REST API를 제공하고, 직접 API를 통해 데이터를 가져가던지, Web UI 대시보드에서 데이터를 조회하던지해서 그라파나를 통해 데이터를 시각화 할 수 있다.
  • Alertmanager : 
    프로메테우스에서 문제가 발생했다고 생각되는 시점에 slack, mail, hipchat등을 통해 알람을 보내준다. 
    알람을 거는 기준은 Rule을 작성해서 load시키는 방식으로 정할 수 있다.
    (ex. expr: job:request_latency_seconds:mean5m{job="myjob"} > 0.5 )와 같이 특정 메트릭의 값이 어느정도 선(threshold)를 넘거나, 낮아지는 것을 판단할 수 있다.

저장된 메트리 정보는 PromQL 쿼리 언어를 이용해서 조회 가능하고, 이를 외부 API나 프로메테우스 웹 콘솔 또는 웹에서 대쉬보드를 통해 조회가 가능하다.

 


장/단점

장점

  1. 모든 메트릭에 대한 데이터를 중앙서버로 보내지 않아도 된다. (부하가 높은 상황에서 메트릭을 수집하기 위해 전송한다면, 부하와 더불어 실제 어플리케이션에 문제를 유발할 수 있다.)
  2. 모든 데이터를 수집하지 않고, 일정 주기(default 15s)로 발생하는 메트릭을 수집하기 때문에 어플리케이션에 무리가 없다.
  3. 구조가 복잡하지 않고 간단하기 때문에 특정 솔루션에 대한 export가 어렵지 않다.
  4. Linux, Window 등의 다양한 OS 메트릭 expoter를 제공한다.

단점

  1. 클러스터링(Clustering)이 안된다. 프로메테우스를 여러대에 구성하려면 Hierarchy구조를 만들어서 사용해야한다.
  2. 모든 메트릭을 수집하지 않기 때문에 사실상 "추리"를 보는데에는 좋지만 APM(Application Performance Monitoring)과 같이 모든 로그를 추적하기에는 적합하지 않다. polling하는 그 순간의 스냅샷 정보만 알수 있다.
  3. 싱글 호스트 아키텍처이기 때문에 저장용량이 부족하면 디스트 용량을 늘리는 방법 뿐이다.
  4. Prometheuse server가 다운도거나, 설정 변경 등의 위해서 재시작할 경우 그동안의 메트릭은 유실된다.

프로메테우스(prometheus)  사용법

  • 프로메테우스 설치

2021.07.17 - [IT story] - 프로메테우스(Prometheus) 설치 및 사용

 

프로메테우스(Prometheus) 설치 및 사용

설치 환경 linux (MacOs) docker 1. Configuration 파일 작성 파일명은 prometheus.yml 이다. $ vi {path}/prometheus.yml 작성 예시는 아래와 같다. Prometheus에서 제공하는 기본 샘플이다. # my global config..

yjkim97.tistory.com

  • 프로메테우스 설정

2021.07.17 - [IT story] - 프로메테우스(Prometheus) Configuration

 

프로메테우스 Configuration

Configuration 파일 구성 Main configuration key type default 설명 global.scrape_interval 정규식 1m 타겟 시스템으로 부터 메트릭을 수집하는 주기 How frequently to scrape targets by default. global.scra..

yjkim97.tistory.com


https://velog.io/@ckstn0777/prometheus%ED%94%84%EB%A1%9C%EB%A9%94%ED%85%8C%EC%9A%B0%EC%8A%A4%EB%9E%80

 

🎵 prometheus(프로메테우스)란?

초보개발자가 배우는 단계에서의 포스트 글입니다. 부족한 점이 많이 있을 수 있습니다. 이해해주세요..😂😂프로메테우스는 메트릭 기반의 오픈소스 모니터링 시스템이다.모니터링 하면 아마

velog.io

https://prometheus.io/docs/introduction/overview/

 

Overview | Prometheus

An open-source monitoring system with a dimensional data model, flexible query language, efficient time series database and modern alerting approach.

prometheus.io