지난 블로그(https://devocean.sk.com/blog/techBoardDetail.do?ID=163447)에서는 Prometheus를 사용하여 kubernetes를 모니터링하는 방법과 TACO의 예를 통해 실제 배포하는 예를 설명하였다. 이어서 본 블로그에서는 Prometheus에서 부족했던 부분을 채우고 다양한 통합기능을 제공하는 Thanos에 대해 설명하고자 하고 설치하는 방법을 알아본다.
Prometheus는 cloud native 환경에 defacto standard인 모니터링 시스템이고 메트릭데이터를 잘 수집하고 저장하며 이에 대한 질의를 유연하게 제공하는 것으로 그 목적을 명확히 하고 있다.
Prometheus는 단일노드에서 로컬저장소를 사용하는 간결한 구조를 갖고 있고 이에 따라 H.A.를 완벽하게 구성하기 힘들다. 더욱이 Prometheus는 서버가 주체적으로 데이터를 수집해오는 server-side pool 방식을 사용하므로 prometheus 서버가 정지된 동안에 데이터 누락이 발생하게 된다. 이러한 문제점에으로 인해 HA에 대한 요구가 초기부터 있었으나 prometheus community 진영에서는 이는 관심사항이 아님을 명확히 하고 있다.
TACO에서도 이를 지원하기위해 동일한 설정의 프로메테우스를 복제하여 앞에 서비스를 통해 접근하도록 시도해보기도 했었다. 이때, 각 클라이언트가 접근시 특정 서버에 연결되고 해당 서버가 어떤 문제에 의해 누락된 데이터를 보여주는 문제가 발생했으며 주기적으로 재시도하면 서비스에서 연결시켜주는 서버에따라 데이터누락이 보였다가 사라졌다를 반복했다. 이에따라 상용으로 사용할수 없다고불가로 판단하였고 H.A. 기능을 내렸던 경험이 있다.
일반적으로 agent-push방식을 사용하는 모니터링시스템에서는 agent에서 큐나 재시도를 통해 서버장애를 대응할수 있다.
Prometheus의 부족한 부분을 채우면서 부가적인 기능을 제공하도록 Thanos가 등장했다. 비슷한 컨셉과 기능으로 등장했던 Cortex라는 프로젝트도 있으나 현재는 Thanos진영이 더 견고하게 움직이는 것으로 보인다.
Thanos에서 이야기하는 주요 특징은 다음과 같다.
출처 - thanos.io
Thanos의 구성을 살펴보면 다음과 같다.
출처 - bitnami
다양한 컴포넌트들이 내부적으로 돌아가며 각각은 단일 소프트웨어로 배포되며 독립적인 기능을 수행한다.