Prometheus 모니터링

황세호·2021년 2월 26일
0

Promethues란?

프로메테우스는 시계열 데이터를 처리하는 것이 주 목적인 Time-series DB다.
주로 CPU, 메모리 사용량과 같은 Metircs 데이터에 대한 APM(애플리케이션 성능 관리) 구축을 목적으로 하기에 MSA 형태의 컨테이너 서비스, 대규모 서버 클러스터 모니터링 등에 사용된다.

ex) HTTP 응답 데이터, 컨테이너 서비스 단위의 리소스 사용량, 서버 클러스터 전체 가용률 모니터링

Why Promethus?

Prometheus에는

  • 다차원 데이터 모델
  • 데이터 모델을 활용할 수 있는 유연한 쿼리 언어 (PromQL)
  • Vertical - Horizontal Federation (상위 - 하위 구조를 통한 Aggregation 가능)

과 같은 장점들이 많지만 가장 큰 장점은 바로 Pull 방식으로 Metrics를 가져온다는 것이다.

push vs pull

push :

  • 일반적으로 push 방식은 Host -> Data Backend로 전송하기 때문에, Data Backend를 변경할 시 Host마다 설정 파일을 모두 바꿔야한다.

  • Data Backend에 장애가 발생했을 때에도 아무 소영없는 push가 이루어지기에 트래픽에 과부하가 걸린다.

pull :

  • 대상 애플리케이션의 Exporter Endpoint로부터 데이터를 scrape 해오는 방식이다.

  • 모니터링 설정이 Data Backend에서 관리되기 때문에 변경이 쉽다.

  • Prometheus에 장애가 발생해도 애플리케이션 자체에 지장이 가지 않는다.

Prometheus의 한계점

프로메테우스는 좋은 모니터링 시스템이긴 하지만 결정적인 문제점들이 있다. DB 다중화는 Replicas 간에 Discovery를 수행한 뒤, 데이터 샤딩, HA 보장, 데이터 손실 방지 및 서비스 무중단을 보장하는 것을 의미한다.
하지만 프로메테우스는 각 Region마다 배치한 뒤 이를 Master에서 합치는 구조이기 때문에 클러스터링과는 거리가 있다.
이럴 경우,

  • 프로메테우스 인스턴스를 여러개 기동한 다음에, 중앙에 다른 프로메테우스로 부터 메트릭을 수집하는 프로메테우스를 놓는 방식

  • 가용성 확보를 위해 프로메테우스 인스턴스를 두 개 이상을 띄우는 방식

으로 해결을 할 순 있겠으나, 아키텍쳐가 마음에 들지 않는다. 이런 문제를 해결하기 위한 오픈소스에 타노스가 있다. 다음 기회에 타노스에 대해 알아보는 시간을 가져보도록 해야겠다.

모니터링 메트릭의 분류

  • 인프라 수준의 메트릭
    • 호스트 레벨에서의 메트릭
    • 호스트에서 사용 중인 파일 디스크립터의 갯수, 디스크 사용량, NIC에서의 패킷 전송량
    • node-exporter는 인프라 수준의 메트릭 도구
  • 컨테이너 수준의 메트릭
    • 컨테이너 레벨에서의 메트릭
    • 컨테이너별 CPU와 메모리 사용량, 컨테이너 프로세스의 상태, 컨테이너에 할당된 리소스 할당량
    • Cadvisor는 컨테이너 수준의 메트릭 도구
  • 애플리케이션 수준의 메트릭
    • 인프라, 컨테이너를 제외한 메트릭
    • 마이크로서비스에서 발생하는 트레이싱 데이터, 애플리케이션 로직에 종속적인 데이터, 서버 프레임워크에서 제공하는 모니터링 데이터

Prometheus Architecture

Prometheus Server 내부 모듈

Retrieval

메트릭을 수집할 대상 서버에 접근해서 메트릭을 가져오거나, Pushgateway를 통해서 접근할 수 없는 곳에 있는 데이터(inner server, firewall 내부의 metrics 등)를 가져오는 등의 역할을 한다.

TSDB(Time-series Database)

수집한 데이터를 저장하고, 이를 시계열 데이터로 저장할 수 있는 저장소다.

  • 데이터 이름 : Metrics를 구분하기 위한 고유한 이름

  • 라벨 : 동일한 데이터에서 종류를 구분하기 위한 식별자

  • 데이터 값 : Scalar(샘플링 데이터)

HTTP Server

Prometheus에 저장된 데이터를 조회하려면 내부적으로 HTTP Server가 필요하다. 따라서 Prometheus는 데이터를 가져가기 위한 프로토콜로 HTTP REST API를 제공하고, 직접 API를 통해 데이터를 가져가던지, Web UI 대시보드에서 데이터를 조회한다던지, Grafana를 통해 더욱 깔끔한 데이터 시각화를 할 수 있다.

profile
Developer

0개의 댓글