logz.io/blog/prometheus-vs-graphite/
모니터링 툴 중에 뭘 쓰면 좋을지 찾아보다가 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에 데이터를 보내도록 설정해야한다는 뜻
2) Prometheus(프로메테우스)
Prometheus는 Graphite보다 포괄적이고 서비스 모니터링 "system"이다.(Graphite는 "tool")
더 많은 기능이 있으면서 더 구체적인 애플리케이션임.
-> 유연한 query 언어(PromQL), push gateway(짧고 일괄 실행되는 job에서 데이터를 수집) 등등을 지원한다
Prometheus는 능동적으로 데이터를 수집하고 저장하고 query, graph, 알림 등을 지원한다.
Grafana나 Graphite에서 처럼 다른 API 사용자에게 endpoint를 제공해준다(endpoint? API를 제공한다는 말일까)
Prometheus는 다음과 같은 component를 갖고 있다.
- Client libraries – (이벤트를 생성하기 위해) 측정하는 App 코드
- Prometheus server – 이벤트를 수집하고 시계열 데이터로 저장
- Pushgateway – job을 import해서 단기간에 생성되었다가 사라지는 데이터를 지원
- Data exporters – HAProxy, StatsD, Graphite와 같은 서비스로 보냄
- Alertmanager – 알람 조절
다른 모니터링 시스템과의 차이점 - 공식 문서를 참고했음
- 다차원 데이터 모델(시계열 데이터가 측정 이름, 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 |
'개발 > DevOps' 카테고리의 다른 글
docker docs 따라하기 - Docker Registry 다루기 (0) | 2021.08.10 |
---|---|
Docker 내용, 기반 기술 정리 (0) | 2021.06.21 |
Docker docs 따라하기 - 4. bind mount를 사용하기 (0) | 2021.02.09 |
Docker docs 따라하기 - 3. DB를 고정하기(named volume 사용) (0) | 2021.02.09 |
Docker docs 따라하기 - 2. online에서 docker 실행하기 (0) | 2021.02.09 |
댓글