- Prometheus는 메트릭 수집, 시각화, 알림, 서비스 디스커버리 기능을 모두 제공하는 오픈 소스 모니터링 시스템
- SoundCloud에서 Go언어로 개발하였으며, Apache 2.0 License를 따르고 있음
- 2016년에 쿠버네티스에 이어 두 번째로 CNCF(Cloud Native Computing Foundation) 산하 프로젝트 멤버로 들어감
- Grafana Labs에서 유지 보수를 메인으로 전담
- Prometheus는 독립형 오픈소스 프로젝트이며 많은 회사들이 사용함
- kubernetes에서 Prometheus를 사용하여 매트릭 수집 및 대시보드 구축하는 방식을 장려
- Prometheus는 애초에 "스케일 아웃"을 고려하지 않고 설계
- 데이터가 많으면 많을수록 Prometheus 클러스터링을 위한 Thanos, Cortex등 여러 오픈 소스가 개발되면서 클러스터링 구성 가능
Prometheus의 대표적인 기능
- 풀 방식의 메트릭 수집, 시계열 데이터 저장
- PromQL을 활용하여 저장된 시계열을 쿼리 및 집계
- 서비스 디스커버리
- 데이터 시각화
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에 적합한 일
- 순수한 숫자 시계열을 기록하는 데 적합
- 메트릭 기반의 시계열 데이터 저장
- 동적인 혹은 마이크로 서비스의 인스턴스에 대한 메트릭을 수집
2. Prometheus에 적합하지 않은 일 → 다른 도구를 사용하여 Prometheus의 부족한 부분을 해결
- 이벤트 로그나 개별 이벤트를 저장하는 일
- 이메일 주소/사용자 이름과 같이 카디널리티가 높은 데이터를 저장하는 일
- 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
'Opensource(오픈 소스) > Prometheus' 카테고리의 다른 글
Prometheus Alertmanager 설치 (0) | 2022.07.10 |
---|---|
blackbox-exporter를 프로메테우스와 그라파나 연동 -> 서버 프로세스 포트 모니터링 (0) | 2022.07.09 |
node-exporter를 프로메테우스와 그라파나 연동 -> 서버 자원 모니터링 (0) | 2022.07.09 |
Prometheus를 docker로 설치 및 Prometheus 관리 스크립트 (0) | 2022.07.09 |
Prometheus를 systemd로 관리 (0) | 2022.07.09 |