본문 바로가기
개발/DevOps

[정리] prometheus vs graphite

by ny0011 2021. 3. 3.
반응형

logz.io/blog/prometheus-vs-graphite/

 

Prometheus vs Graphite: Comparison of Metrics Solutions | Logz.io

Looking into time series monitoring solutions? Here's our comparison of Prometheus vs Graphite, two of the most popular open source solutions.

logz.io

모니터링 툴 중에 뭘 쓰면 좋을지 찾아보다가 grafana와 prometheus는 알게 되었는데 graphite라는 것도 있길래

어떤 차이점이 있는지 궁금해졌다.

위의 블로그에서 분석을 해둔 것 같아서 번역 겸 공부해볼까한다.


Prometheus, Graphite는 time series data를 사용한 open source monitoring tool이다.

Prometheus는 "time series DBMS와 monitoring system"
Graphite는 "time series data를 위한 data logging과 graphing tool"

둘 다 open source고 system monitoring에 사용되지만 Prometheus가 할 수 있는 일이 더 있다.

둘을 비교해보고 올바른 선택을 하기 위한 기준을 제공해주려고 한다.

 

어떤 parameter나 data 관점을 시간에 따라 수행할 지가 시스템의 중요한 퍼포먼스 지표가 될 수 있다

예를 들어 새 커뮤니티 프로세스나 문서의 영향력이 얼마나 되는지,

특정 sw를 고친 게 얼마나 DB의 지연율에 영향을 주었는지 등을 알고 싶으면

현재 value와 변하기 전의 과거 value를 비교하는 것이 유용하다.

이런 것을 "time series data"(시계열) value라고 한다.

 

시계열 데이터로 구축된 모니터링 도구는 다음과 같은 높은 transaction volume을 필요로 한다

1. 시간 정보가 있는 이벤트를 수집한다(or 최소한 listen이라도 한다)

2. volumn에 이벤트를 효율적으로 저장한다

3. 이 이벤트들의 query를 지원한다

4. 시간별로 추세를 따라갈 수 있게 유용한 시각적인 모니터링을 제공한다

 

1) Graphite(그래파이트)

Graphite는 Prometheus보다 간단하다. 공식 Docs에 따르면 두 가지를 할 수 있다

 

1. 시계열 데이터를 저장

2. 이 데이터를 그래프로 변환

 

Graphite가 데이터를 모아주지 않지만

Carbon수동적으로 시계열 데이터를 listen한다.

데이터는 Whisper에 저장된다.

그래프는 간단한 Django 웹 앱에 보여질 수 있게 그래프가 변환된다.

 

Graphite는 데이터 수집이 "수동"으로 일어난다.

=> 데이터를 제공하는 앱이 Graphite의 carbon에 데이터를 보내도록 설정해야한다는 뜻

Graphite의 구조

 

2) Prometheus(프로메테우스)

Prometheus는 Graphite보다 포괄적이고 서비스 모니터링 "system"이다.(Graphite는 "tool")

더 많은 기능이 있으면서 더 구체적인 애플리케이션임.

-> 유연한 query 언어(PromQL), push gateway(짧고 일괄 실행되는 job에서 데이터를 수집) 등등을 지원한다

 

Prometheus는 능동적으로 데이터를 수집하고 저장하고 query, graph, 알림 등을 지원한다.

Grafana나 Graphite에서 처럼 다른 API 사용자에게 endpoint를 제공해준다(endpoint? API를 제공한다는 말일까)

Prometheus는 다음과 같은 component를 갖고 있다.

 

  1. Client libraries – (이벤트를 생성하기 위해) 측정하는 App 코드
  2. Prometheus server – 이벤트를 수집하고 시계열 데이터로 저장
  3. Pushgateway – job을 import해서 단기간에 생성되었다가 사라지는 데이터를 지원
  4. Data exporters – HAProxy, StatsD, Graphite와 같은 서비스로 보냄
  5. Alertmanager – 알람 조절

 

prometheus의 구조

다른 모니터링 시스템과의 차이점 - 공식 문서를 참고했음

  • 다차원 데이터 모델(시계열 데이터가 측정 이름, key-value차원으로 정의됨)
  • 유연한 쿼리 언어
  • storage와 의존성 없는 autonomous single server node(자율 단일 서버 노드)
  • HTTP을 사용해 pull model로 데이터를 수집
  • 시계열 데이터가 중간 gateway를 통해 데이터를 필요로 하는 목적지로 push
  • service discovery나 static configuration을 통해 target을 찾음
  • 다양한 graph나 dashboard를 지원

위의 구조를 보면 prometheus는 다양한 third-party 앱들을 지원하기 때문에 

관리자가 가장 적합한 것을 골라서 적용할 수 있음

 

High-Level Comparison

Feature Prometheus Graphite
What it is Fully integrated time series DBMS and monitoring system Time series data logging and graphing tool
What it does Scraping, storing, querying, graphing, and alerting based on time series data. Provides API endpoints for the data it holds Stores numeric time series data and provides graphs of that data
Implemented in Go Python
Data types handled Numeric Numeric
Year released 2012 2006
Website prometheus.io github.com/­graphite-project/­graphite-web
Technical documentation prometheus.io/docs graphite.readthedocs.io
APIs and access methods RESTful HTTP and JSON HTTP API Sockets
XML support? Yes (can be imported) No
Server Operating Systems Linux, Windows Linux, Unix
Supported programming languages .NET, C++, Go, Haskell, Java, JavaScript (Node.js), Python, Ruby JavaScript (Node.js), Python, (although you can push metrics to it from virtually any language)
Partitioning supported? Yes, sharding Yes, via consistent hashing
Replication supported? Yes, by federation Not by default, but tools exist to support clustering
Data collection Active or pull (configurable) Passive or push

 

 

 

 

 

댓글