Infra Data / AI

K8s 클러스터에 설치된 Prometheus를 Thanos와 연동하기

K8s 사용시 프로메테우스의 확장성과 내구성을 향상시키기 위한 Thanos 연동에 대해 알아봅니다.

8 min read
K8s 클러스터에 설치된 Prometheus를 Thanos와 연동하기

급하신 분들은 설치로 바로 가시면 됩니다.

Prometheus의 저장소 및 HA 문제

Prometheus는 remote storage에 저장하는 기능을 제공하긴 하지만, 어디까지나 ‘제공’하는 정도입니다. 기본적으로는 Adapter를 이용해 Third-party Storage에 저장하도록 권장하고 있습니다.

아래 이미지는 remote-storage-integrations에서 가져온 이미지입니다.

그래서 통합할 수 있는 Adapter들을 소개하는 문서도 따로 있습니다.

이번에 소개할 것은 메트릭을 Third-party Storage에 저장하고, HA구성을 도와주는 Thanos 입니다. (물론 Prometheus에서도 HA[Prometheus HA] 와 Scaling[Prometheus scaling] 을 제공하긴 합니다.)

언제 Thanos가 필요한가요?

퍼블릭 클라우드를 사용하면 보통 CSP에서 모니터링을 지원하기 때문에 Prometheus를 사용 할 필요가 없습니다. 직접 클러스터를 구축하는 경우에도 Google Cloud의 Anthos 같은 서비스를 이용하면 모니터링이 되기 때문에 직접 모니터링 툴을 세팅 할 필요가 없습니다. (Anthos의 도입이 필요하시다면 클라우드메이트로 컨설팅 요청 하실 수 있습니다. 국내 첫 Anthos 사례를 보유하고 있으며, 2021년부터 지금까지 프로젝트를 운영하고 있습니다.)

그러나 보안상 필요에 의해 혹은 클러스터를 직접 운영하고 싶은 경우에는 모니터링을 위해 Prometheus를 사용하게 됩니다. 그런 경우에 Prometheus의 메트릭을 장기 저장하고, HA구성을 하기 위해 Thanos를 사용하면 좋습니다.

Thanos가 뭔가요?

Thanos는 Prometheus의 메트릭을 장기 저장하고, HA구성을 도와주는 오픈소스 프로젝트입니다. 홈페이지에 들어가보시면 소개 문구에도 Open source, highly available Prometheus setup with long term storage capabilities. 라고 소개되어 있습니다.

Prometheus의 Adapter 리스트와 CNCF(Cloud Native Computing Foundation) 프로젝트 리스트를 보면 Thanos도 있습니다.

설치

이 핸즈온에서는 Argo CD를 사용해서 설치합니다.
Argo CD의 설치는 Argo를 사용해보자의 설치를 참고해주세요.

Thanos 설치

여기서는 minio를 사용하지만, 다른 것을 사용하셔도 됩니다.

kube-prometheus-operator 설치

crds 설치

kube-prometheus-operator 설치

objstore.yaml 을 secret으로 설정해야만 thanos와 연동이 가능합니다.
thanos sidecar(thanos-discovery)가 해당 설정으로 작동합니다.

values

prometheus:
  prometheusSpec:
    thanos:
      objectStorageConfig:
        key: objstore.yaml
        name: objstore-secret

thanos 설정 변경

설정을 변경한 뒤 다시 sync를 누르고 터미널에 아래 명령어를 입력합니다.

kubectl get services --namespace monitoring

thanos-query-frontend 의 External IP를 확인합니다.
작성자인 저의 경우엔 http://20.196.235.108:9090 으로 들어가겠습니다.

해당 페이지에 들어가신 뒤 상단에 있는 Status > Targets를 누릅니다.

Targets 페이지가 아래와 같이 나오면 성공입니다.

Grafana 세팅

Grafana는 kube-prometheus-operator를 설치할 때 같이 설치가 됩니다.
서비스 조회하는 명령어를 입력했을 때 kube-prometheus-stack-grafana 가 나오는 것을 보셨을 겁니다.

접속을 위해 아래 명령어를 입력해주세요.
(프로덕션 환경에선 이렇게 하지 마시고, 'ingress를 이용'해야 합니다.)

kubectl patch service kube-prometheus-stack-grafana --namespace monitoring --patch '{"spec": {"type": "LoadBalancer"}}'

저의 경우엔 http://20.214.65.32 로 들어가면 되겠군요. 여러분도 출력된 IP를 입력해서 접속하세요.
기본 계정 정보는 아래와 같습니다.

접속 후 좌측 메뉴를 눌러 Connections > Your connections 를 클릭합니다.

그 후 Add new data source 를 클릭하고 Prometheus 를 선택합니다.
정보는 아래와 같습니다.

추가를 완료하셨으면 좌측 메뉴를 눌러 Dashboards를 클릭합니다.

그 후 New 버튼을 눌러 Import를 선택하세요.

원하시는 대시보드의 ID를 입력하고 Load 버튼을 누르시면 됩니다.
저의 경우엔 17900을 입력했습니다.
한국어로 되어있기도 하고 보여주는 지표도 많아서 추천 드립니다.

Data source는 Thanos를 선택하고 완료하면 아래와 같은 대시보드가 나옵니다.

데이터 장기저장 확인

Thanos가 데이터를 잘 저장하고 있는지 궁금하실 수 있습니다.
이번 핸즈온에서는 minio를 사용하였으니, 아래 명령어를 넣어서 minio에 External IP를 부여합니다.

kubectl patch service thanos-minio --namespace monitoring --patch '{"spec": {"type": "LoadBalancer"}}'

해당 IP의 9001 포트로 들어가시면 minio 웹페이지가 나옵니다.

로그인 해서 들어가보시면 아래와 같이 잘 저장이 되고 있는 것을 보실 수 있습니다.

참고 URL

Share This Post

Check out these related posts

Amazon EKS, 커뮤니티 애드온 살펴보기

Amazon S3 콘솔, 모든 버킷 외부 액세스 요약 표시

Database Insights, 메트릭 대시보드 사용자 정의 지원 추가