[Thanos]프로메테우스의 스케일링 tool

Prometheus: 오픈소스 모니터링 tool - 3

Posted by owin2828 on 2020-03-13 18:19 · 4 mins read

들어가기 앞서

프로메테우스는 좋은 모니터링 툴이지만, 앞선 글에서 언급했듯이 클러스터링 구조를 지원하지 않기 때문에 다음과 같은 결정적인 두 가지 문제점을 지닌다.

  • 확장성의 어려움
  • 가용성의 어려움

이 중 확장성의 문제는 디스크를 사서 붙이는 것으로 어느 정도 해결이된다. 하지만 데이터의 양이 방대해지고 많아질 경우, 이러한 방식으로 매 번 증축할 수 없고 결국 하나의 프로메테우스 인스턴스로는 감당이 되지 않는 문제가 발생한다.

이러한 문제를 해결하기 위해 프로메테우스에서는 Federation이라는 방법을 권장한다. 프로메테우스 인스턴스를 여러개 만들어 Master-Slave 구로조 관리를 하여 계층적으로 관리를 하는 방법이다. 약간은 지저분하고 또 복잡해 보이지만, 위의 구조를 사용함으로써 어느정도 보완이 되었다. 하지만 여전히 이러한 구조는 단점을 지닌다.

가용성의 문제가 바로 그것인데, 프로메테우스는 기본적으로 하나의 서버로 기동된다. 따라서 실행중인 서버가 다운되거나 장애 및 재시작 등의 업무로 인해 생기는 공백의 기간동안은 메트릭을 수집할 수 없다. 클러스터링 기능이 존재하지 않기 때문에 이러한 문제점을 해결하기 위해서는 다음의 그림과 같이 프로메테우스 인스턴스를 두 개 띄우고 같은 대상으로부터 메트릭을 수집해야 한다.

여전히 마음에 들지 않는다.

1. Thanos란


위와 같은 문제를 해결하기 위해 등장한 것이 바로 Thanos이다.

타노스의 기본 구조는 위와 같다. 여러개의 프로메테우스에서 메트릭 정보를 받아 전체적인 정보를 제공해준다. 또한 수집된 메트릭을 스케일이 가능한 스토리지에 저장해서 특정 프로메테우스 인스턴스가 다운이 되더라도, 그 인스턴스가 담당하는 메트릭을 조회할 수 있도록 해준다.

2. Thanos 아키텍처


타노스의 전반적인 이해를 돕기 위해 타노스의 아키텍처를 살펴본다.

2-1. Thanos Side car & Querier

 타노스는 프로메테우스 서버에 타노스 에이전트(Thanos Sidecar)를 설치하여 데이터를 조회할 수 있도록 한다. 프로메테우스는 수집된 메트릭 데이터를 로컬 디스크에 저장하기 때문에 타노스 에이전트는 디스크에 저장된 내용을 읽어 필요시 쿼리 엔진에게 전달한다. 이러한 구조로 이루어져 있기 때문에 사용자가 관리하고 바라보는 것은 Thanos Query 하나로 줄어들게 된다.

2-2. HA 지원

타노스의 HA(High Availability, 서버 이중화)는 기존과 동일하다. 프로메테우스 인스턴스를 두 개 띄워서 같은 대상을 모니터링 하는 것이다. 기존 방식에서는 프로메테우스 인스턴스를 각각 모니터링 해야하지만, 타노스는 특정 그룹의 프로메테우스 인스턴스들을 하나로 처리해서 메트릭을 보여준다. 즉, 두 인스턴스에서 수집된 메트릭을 합쳐서 보여줄 수도 있고, 중복값을 제거해주는 De-duplication 기능을 지원한다.

2-3. 오래된 값 저장

프로메테우스는 로컬에 데이터를 저장하기 때문에 일정 기간이 지난 데이터는 삭제된다. 따라서 기간이 오래된 데이터는 조회가 불가능하다. 이 문제는 여러 대의 프로메테우스를 모니터링하게 되므로 타노스에서도 발생하는데, 메모리와 로컬디스크의 용량 문제로 여러 프로메테우스 모니터링이 불가능하게 된다. 이를 해결하기 위해 타노스는 외부 스토리지를 사용한다.

프로메테우스에서 수집된 데이터는 2시간 정도 메모리에 저장된 후, 로컬 디스크로 덤프되어 저장된다. 이 데이터를 타노스 에이전트가 수집하여 외부 스토리지에 저장한다. 외부 스토리지는 Ceph와 같은 분산형 파일 시스템 혹은 Google Cloud Storage, AWS S3와 같은 클라우드 스토리지를 사용한다.

즉 쿼리 엔진에서 최근의 데이터를 조회할 때는 타노스 에이전트를 통해서 가져오고, 오래된 데이터는 Thanos Sotrage Gateway를 통해 조회한다. 이 게이트웨이는 외부 스토리지에 저장된 데이터를 Storage API를 통해 쿼리 엔진과 통신하는 역할 및 캐싱 기능을 제공한다.

데이터가 많이 축적되게 되면, 오래된 데이터를 조회하는 경우 많은 양을 조회하기 때문에 성능에 문제가 발생한다. 이러한 문제를 피하기 위해 Compactor가 존재하는데, 데이터 파일을 압축하고 다운 샘플링을 한다.

다운 샘플링: 1분단위로 저장된 데이터를 10분이나 1시간 단위로 샘플링 기준을 낮춰서(해상도 낮춤) 전체 데이터 저장용량을 낮추는 방법

끝마치며

본 포스팅은 조대협님의 블로그 글을 참조하여 학습용으로 작성된 글임을 밝힙니다.

katacoda 타노스 튜토리얼