탑신병자 듀오 팀 티모입니다.
오늘은 Prometheus와 Thanos에 대해서 알아보겠습니다.
Prometheus는 SoundCloud 사에서 만든 오픈 소스 기반 모니터링 툴입니다.
여러 종류의 메트릭 데이터를 수집하며 이를 로컬 스토리지에 시계열 형태로 저장합니다.
따라서 응답 시간이 매우 빠르며, 단일 서버에 설치하며 구조도 간단해 사용하기 쉽습니다.
또한 쿼리 기능을 갖추고 있으며, Grafana(그라파나)를 연계해 시각화를 지원하기도 합니다.
오픈 소스를 기반으로 하다 보니 다양한 시스템을 모니터링할 수 있는 플러그인 생태계가 잘 구축되어 있습니다.
위의 여러 장점들을 토대로 쿠버네티스 환경에서의 메인 모니터링 시스템으로 주로 이용되고 있습니다.
Prometheus의 기본 아키텍처 및 특징입니다.
- Target
: 수집 대상을 의미하며 VM, MySQL 등 다양한 자원들입니다. - Exporter
: Target에서 메트릭을 전송하기 위해 설치하는 모니터링 에이전트입니다.
Prometheus로부터 온 HTTP GET 요청에 따라 수집한 것을 리턴할 뿐, 자체적으로 저장하는 기능은 없습니다. - Pulling
: 일반적인 모니터링 프로그램은 클라이언트가 모니터링 서버로 데이터를 push해주는 방식이지만,
Prometheus는 Exporter에게 요청 후 필요한 데이터를 전달받는 pull 방식을 사용합니다.
이렇게 되면 클라이언트에서는 서버의 주소를 알 필요 없이 오는 http GET 요청에 따라 처리하기만 하면 됩니다.
하지만 모니터링 대상이 오토스케일링 등으로 인해 가변적인 경우, 추가되는 대상은 모니터링할 수 없습니다.
이를 해결하기 위해 service discovery 방식을 추가적으로 사용합니다. - Service discovery & Retrieval
: 특정 시스템이 현재 가동 중인 서비스들의 목록과 IP 주소를 갖고, 추가로 생성될 때도 자동으로 등록되게 합니다.
DNS, 쿠버네티스 등을 통해 목록을 가져올 수 있습니다.
Retrieval은 Service discovery로부터 모니터링 대상 목록을 가져오며, Exporter에게 그 대상에 대한 메트릭을 주기적으로 수집하는 Prometheus 내 컴포넌트입니다. - 저장 방식
: 요청을 통해 수집한 메트릭은 Prometheus가 설치된 로컬 스토리지에 저장됩니다.
이 방식은 설치 및 운영을 쉽게 해준다는 장점은 있지만 반대로 스케일링이 불가능하다는 단점이 있습니다.
수집할 Target이 많아질수록 저장할 공간 역시 늘어나야 하는데, 이를 해결하기 위해선 단순히 스토리지를 늘려야만 합니다. - 서빙
: 저장된 메트릭은 PromQL 쿼리 언어를 이용해 조회할 수 있고, 외부 API나 Prometheus 웹 콘솔을 이용해 서빙이 가능합니다.
Grafana와 통합해 대시보드를 구성하여 시각화하는 것도 마찬가지입니다.
여러 장점을 갖고 있는 Prometheus지만, 확장성과 가용성 면에서 분명한 한계점이 있습니다.
이에 대한 해결방안이 바로 Thanos입니다.
Thanos는 Prometheus의 확장성, 가용성을 향상시키기 위한 오픈 소스 툴입니다.
여러 개의 Prometheus로부터 메트릭 정보를 받고 전체 정보를 다시 제공해줍니다.
뿐만 아니라 수집된 메트릭을 스케일링이 가능한 스토리지에 따로 저장해 일부 인스턴스가 다운되더라도 그 인스턴스가 담당하는 메트릭을 조회할 수 있도록 해줍니다.
Prometheus와의 연동 구조는
1. Prometheus 서버에 Thanos 에이전트를 설치 후 실행해 데이터를 받거나,
2. Thanos를 별도의 서버로 실행시킨 후 Prometheus로부터 따로 전송받는 방식으로 구현합니다.
Thanos의 아키텍처 및 특징입니다.
- Thanos Side car & Querier
: Prometheus 서버에 설치되는 에이전트이며, 각 Prometheus 로컬 스토리지에 저장된 내용을 읽어 필요할 때마다 쿼리 엔진인 Thanos Query에게 전달하는 구조입니다.
따라서 사용자는 Thanos Query 하나만으로 전체 모니터링 대상의 메트릭을 쉽게 조회할 수 있습니다. - HA 지원
: 고가용성을 위해 Prometheus 인스턴스를 여러 개로 세팅하더라도 각각 모니터링할 필요 없이 사용자가 특정 그룹의 인스턴스들을 하나로 처리한 후의 메트릭을 볼 수 있습니다. - Long-term Storage
: 앞서 언급했듯, Thanos는 로컬에 저장된 데이터들을 외부, 클라우드 스토리지(S3 등)에 따로 저장할 수 있습니다.
즉, 쿼리 엔진에서 최근의 데이터를 조회할 때는 Side car에서 가져오고, 오래된 데이터는 따로 저장한 외부의 스토리지에서 가져옵니다.
또한 데이터가 많이 축적된 상태에서 많은 양의 데이터를 조회할 때 성능 문제를 해결하기 위해 데이터 파일을 압축하고 다운 샘플링을 합니다.
지금까지 Prometheus와 Thanos에 대해 간단히 알아보았습니다.
감사합니다.
'Programming' 카테고리의 다른 글
[Magento] Magento (0) | 2023.08.29 |
---|---|
[Vue] watch 속성과 옵션 (0) | 2023.08.28 |
CORS (0) | 2023.08.18 |
React Native란? (0) | 2023.08.08 |
[Java]싱글톤 패턴 깨트리는 방법 및 대응 방법 (0) | 2023.08.07 |
댓글