프로메테우스(Prometheus)는 모니터링 및 알람 관련 오픈 소스이다. 2012년 등장이래로 활발한 커뮤니티를 가지고 있으며 현재는 독립적인 오픈 소스 프로젝트로 관리되고 있다.
(참고로, CNCF에서 Kubernetes 이어 2 번째로 호스팅 프로젝트이다.)
프로메테우스의 특징을 간추려보면 다음과 같다.
- PromQL 이라는 내부 Query
- 내장 Gateway를 통한 Pushing time series
- 다양한 대시보드(Dashboard)
- 다양한 데이터 모델
추가로 Golang으로 개발되었으며, 내부 컴포넌트들은 바이너리로서 빌드 및 배포하기 쉽게 되어 있다.
그림 1. Prometheus Architecture
그림 1에서 확인 할 수 있듯이 프로메테우스의 아키텍처는 여러개의 컴포넌트들로 구성되어 있다. 간략히 확인해보면
- Push gateway
Metrics를 프로메테우스에 전달 할 수 있도록 한다. 즉, Scraping* 할 수 없는 Metrics를 Push gateway를 통해 전달
* 프로메테우스는 Pulling 대신 Scraping 이라는 단어를 사용
- Prometheus server
time series 데이터를 저장하고 가져오는(Scraping) 메인 서버
- Exporter
서드 파티 시스템에서 Metrics을 가져오는 라이브러리 집합 (공식적으로 여러 시스템을 지원한다.)
참고로, 직접 Metrics를 가져 올 수 없을 때 유용하다.
- Alertmanager
Email, Slack 등등에 경고(알림)를 전달
이렇듯 다양한 역할을 수행할 수 있지만, 만능은 아니기에 프로메테우스를 상황에 따라 적절하게 사용해야 한다. 이와 관련해서는 공식 문서에서 간략히 소개하고 있듯이, 적절한 상황은 Metric 데이터가 숫자로 구성되어 있거나 중앙 및 SOA(Service-Oriented Architecture)를 모니터링 할 때 (현재는 MSA) 프로메테우스가 효과적으로 사용 될 수 있다 반면, 비용과 같은 100% 정확한 데이터에 대해서는 수집되는 데이터가 완전하지 않을 수도 있기 때문에 다른 데이터를 수집하는 것이 낫다.
본격적으로 프로메테우스를 실행해보기 전에 비슷한 용도를 가진 몇몇 서비스와 비교해보면 다음과 같다.
1) CloudWatch
그림 2. AWS CloudWatch Architecture
AWS CloudWatch는 AWS의 내장 모니터링 서비스로 AWS의 서비스의 Metric 및 로그를 수집한다. (AWS 서비스에서 CloudWatch로 Metrics를 전달)
프로메테우스와 비교했을 때, CloudWatch는 AWS SQS를 사용하여 알람을 전달 할 수 있지만 프로메테우스는 다른 시스템과 결합해서 사용하기 보다 손쉽다. (이미 제공하고 있는 라이브러리 + webhook 적용) 또한 Dashboard를 적용하기 위해서는 CloudWatch는 비용이 추가로 든다. 반면 프로메테우스는 Grafana를 사용하여 CloudWatch 보다 더 나은 그리고 PromQL을 활용하여 더 다양하게 그려낼 수 있다.
(추가로 아래 참조)
그림 3. Why do developers choose CloudWatch or Prometheus
2) Kibana
그림 4. Kibana
Kibana와 프로메테우스를 직접 비교하기에는 무리가 있으나 Dashboard를 지원한다는 면에서 프로메테우스의 Grafana와 비교하려 한다.
그림 5. Grafana
Kibana는 ELK 스택 중 Elasticsearch에 저장된 로그 데이터를 기반으로 하는 분석 플랫폼이다. Grafana와 비교 할 부분이 Query, Data 등등 여러 가지가 있겠지만 가장 큰 부분은 Kibana를 로그 데이터를 기반으로 하고 Grafana는 time series mertric 데이터를 기반으로 하는 것이 가장 큰 차이라 할 수 있다.
그럼 프로메테우스 튜토리얼 중 하나인 node_exporter를 통해 Metrics을 Scraping 하겠다.
- node_exporter는 docker로 실행
- 프로메테우스에서 9100 포트를 타겟으로 Scraping
그림 6. Prometheus Web page
프로메테우스에서 제공해주는 Web page를 보면 위와 같이 Query를 선택할 수 있으며 출력되는 결과를 Console 및 Graph로 설정 할 수 있다.
그림 7. Grafana
다이나믹한 구간 및 Metrics가 별로 없어서 단순하게 보이지만 위의 결과는 프로메테우스에서 Scraping한 결과를 Grafana에 출력한 것이다.
위에서 여러 가지를 확인 할 수 있었듯이, 프로메테우스는 컴포넌트간의 연결을 통해 다양한/사용자 정의 Metrics를 한 눈에 볼 수 있도록 한다.
Reference
https://stackshare.io/stackups/amazon-cloudwatch-vs-prometheus
https://www.infracloud.io/prometheus-vs-cloudwatch/
'IT > Framework' 카테고리의 다른 글
Apache Mesos (0) | 2019.09.23 |
---|---|
Apache Airflow (0) | 2019.09.16 |
댓글