kubernetes 운영을 하다보면 클러스터가 여러개인 환경을 운영하게 된다.

이러한 multi-cluster 환경에서 하나의 대시보드를 통해 모든 지표를 확인할 수 있는 방법은 여러가지가 있다.

 

prometheus에서 멀티 클러스터 모니터링을 지원하는 방법은 다음과 같다.

 

1. Prometheus federation

- https://prometheus.io/docs/prometheus/latest/federation/

- prometheus에서 도입한 첫번째 집계 기능이다.

- 각각의 서비스 클러스터에 prometheus(child)를 설치하고 /federate 엔드포인트에서 지표들을 수집/병합하기 위한 prometheus(parent)를 별도의 클러스터에 설치하여 지표를 수집한다.

- 수집해야 하는 자식 prometheus의 수가 증가하게 되면, 성능문제가 발생할 수 있으므로 주의하여 사용한다.

 

 

2. Thanos 

- https://thanos.io/

- 프로메테우스의 가용성, 확장성 등의 문제를 보완하기 위해 나온 오픈소스

- 특징

  • Global Query View : Prometheus Server 및 Cluster에서 Prometheus Metric Query를 활성화하여 Prometheus 설정을 확장
  • Unlimited Retention : 원하는 Scale이 가능한 Object Storage System을 통해 Metirc을 무제한으로 저장 가능
  • Prometheus Compatible(프로메테우스 호환) :  Prometheus와 거의 완벽하게 호환되는 API 제공
  • DownSampling & Compaction : Object Storage에 저장되어 있는 Data를 DownSampling하여 집계된 Data Query의 성능을 높이고, Data 압축/삭제를 통해 저장공간을 관리

 

그림 참고 : https://accordions.co.kr/it_trend/prometheus-%EB%B0%8F-thanos%EB%A1%9C-%EB%8C%80%EA%B7%9C%EB%AA%A8-%ED%81%B4%EB%9D%BC%EC%9A%B0%EB%93%9C-%ED%99%98%EA%B2%BD-%EB%AA%A8%EB%8B%88%ED%84%B0%EB%A7%81/

- Thanos Sidecar : 서비스 클러스터에 thanos를 sidecar로 포함한 프로메테우스 서버 배포. query의 요청 처리

- Thanos Query : thanos sidecar와 연결하여 promQL을 처리. 메트릭을 쿼리하여 메트릭을 집계하고 중복을 제거함. 

- Thanos Ruler : Thanos에 의해 연동된 모든 프로메테우스의 룰을 정의하고 처리.

- Thanos Compactor : 수집된 데이터를 기준에 따라 장기 보관용 데이터로 변환

 

3. Prometheus Agent 모드(Prometheus Remote Write)

 

- Remote Write : Prometheus에서 수집한 모든 지표 또는 일부 지표를 원격 위치로 전달(스트리밍)

  • Cortex, Thanos, OpenTelemetry 및 Amazon, Google, Grafana, Logz.io 등과 같은 클라우드 서비스는 모두 원격 쓰기를 통한 데이터 수집을 지원하게 됨
  • 안정적이고 효율적인 Remote Write 구현 : 안정적이고 확장 가능한 WAL(write-ahead-log) 구현.  내부 대기열, 샤딩, 스마트 백오프 등을 추가

- Prometheus Agent 모드

  • 프로메테우스 v2.32.0 버전 이상에서 사용 가능
  • 프로메테우스 서버에 내장되어 --enable-feature=agent 플래그 설정 변경으로 사용가능
  • 에이전트 모드는 원격 쓰기 사용 사례에 대해 Prometheus를 최적화
  • 쿼리, 경고 및 로컬 스토리지를 비활성화하고 이를 사용자 정의된 TSDB WAL로 대체(스크래핑 로직, 서비스 검색 및 관련 구성과 같은 다른 모든 것은 동일하게 유지)
  • 장점
    • 효율성 :  agetn TSDB WAL은 성공적인 쓰기 직후 데이터를 제거함. remote endpoint 에 도달할 수 없는 경우에는 remote endpoint이 다시 온라인 상태가 될 때까지 데이터를 디스크에 임시로 유지(서버 모드 설정과 동일). 즉agent 모드는 일반 Prometheus 서버가 유사한 상황에서 사용하는 리소스의 일부만 사용하게 됨.
    • 확장 가능성 : 메트릭 대상의 양과 대상이 노출하는 메트릭의 수를 기반으로 자동 확장이 가능해야 함.  서버 모드의 Prometheus에서는 수집된 모든 것이 한곳에 있는 그대로 유지되어야 하고(stateful) 모든 인스턴스(예: Thanos Query 또는 Promxy)에서 모든 샘플을 집계할 수 있는 전역 보기 쿼리가 필요하게 됨. agent 모드는 검색, 스크래핑 및 원격 쓰기를 별도의 마이크로 서비스로 이동하여 수집에만 집중된 운영 모델이 가능함.(stateless) Prometheus 기반 스크래핑의 손쉬운 수평적 자동 확장 기능을 활성화하여 지표 대상의 동적 변화에 반응 가능.

https://prometheus.io/blog/2021/11/16/agent/

 

 

 

 

'k8s' 카테고리의 다른 글

prometheus agent 사용(EKS환경)  (0) 2023.01.16
CKA 취득 후기 및 공부 방법  (0) 2023.01.03