데보션앱 소개페이지 바로가기
로그인 선택

신고하기

CLOSE
신고사유 (대표 사유 1개)
상세내용 (선택)
0/200
  • 신고한 게시글은 더 이상 보이지 않습니다.
  • 이용약관과 운영정책에 따라 신고사유에 해당하는지 검토 후 조치됩니다.
  • 허위 신고인 경우, 신고자의 서비스 이용이 제한될 수 있으니 유의하시어 신중하게 신고해 주세요.
(이 회원이 작성한 모든 댓글과 커뮤니티 게시물이 보이지 않고, 알림도 오지 않습니다.)

미리보기

커뮤니티

      1,234

      badge 23.06.15

      글 등록

      카테고리를 선택해주세요.

      DEVOTEE를 활성화 시키면
      지금 작성한 커뮤니티 글에 대해 1개의 댓글을 달아줍니다.

      버튼을 누르면 글 수정 시 ChatGPT가 작성한 댓글이 수정됩니다.

      임시저장함에 저장되었습니다. 저장일시 : 2022.5.17 14:29:08

      임시저장함

      제목을 선택하시면 이어서 작성이 가능하며,
      최대 20건까지 저장합니다.
      컨텐츠 유형, 제목, 저장일시, 삭제로 이뤄진 임시저장 목록
      컨텐츠 유형 제목 저장일 삭제

      데보션 블로그 게재 요청

      CLOSE
      • *
      • *

      본인인증

      효율적인 데보션 서비스 이용 및
      고객님의 소중한 개인정보보호를 위해
      본인인증을 진행해주세요. 본인인증 미 진행 시 로그인이 제한됩니다.
      본인인증 실패

      본인인증 로그인에 실패하였습니다.
      회원이 아니시거나 본인인증 등록이
      완료되지 않은 사용자입니다.

      회원정보 연결

      Thanos를 이용한 멀티클러스터 모니터링

      sungil 21.11.10
      16,697 8 2

      지난 블로그(https://devocean.sk.com/blog/techBoardDetail.do?ID=163447)에서는 Prometheus를 사용하여 kubernetes를 모니터링하는 방법과 TACO의 예를 통해 실제 배포하는 예를 설명하였다. 이어서 본 블로그에서는 Prometheus에서 부족했던 부분을 채우고 다양한 통합기능을 제공하는 Thanos에 대해 설명하고자 하고 설치하는 방법을 알아본다.

      Prometheus의 H.A. 문제

      Prometheus는 cloud native 환경에 defacto standard인 모니터링 시스템이고 메트릭데이터를 잘 수집하고 저장하며 이에 대한 질의를 유연하게 제공하는 것으로 그 목적을 명확히 하고 있다.

      H.A. Problem

      Prometheus는 단일노드에서 로컬저장소를 사용하는 간결한 구조를 갖고 있고 이에 따라 H.A.를 완벽하게 구성하기 힘들다. 더욱이 Prometheus는 서버가 주체적으로 데이터를 수집해오는 server-side pool 방식을 사용하므로 prometheus 서버가 정지된 동안에 데이터 누락이 발생하게 된다. 이러한 문제점에으로 인해 HA에 대한 요구가 초기부터 있었으나 prometheus community 진영에서는 이는 관심사항이 아님을 명확히 하고 있다.

      TACO에서도 이를 지원하기위해 동일한 설정의 프로메테우스를 복제하여 앞에 서비스를 통해 접근하도록 시도해보기도 했었다. 이때, 각 클라이언트가 접근시 특정 서버에 연결되고 해당 서버가 어떤 문제에 의해 누락된 데이터를 보여주는 문제가 발생했으며 주기적으로 재시도하면 서비스에서 연결시켜주는 서버에따라 데이터누락이 보였다가 사라졌다를 반복했다. 이에따라 상용으로 사용할수 없다고불가로 판단하였고 H.A. 기능을 내렸던 경험이 있다.

      일반적으로 agent-push방식을 사용하는 모니터링시스템에서는 agent에서 큐나 재시도를 통해 서버장애를 대응할수 있다.

      Thanos?

      Prometheus의 부족한 부분을 채우면서 부가적인 기능을 제공하도록 Thanos가 등장했다. 비슷한 컨셉과 기능으로 등장했던 Cortex라는 프로젝트도 있으나 현재는 Thanos진영이 더 견고하게 움직이는 것으로 보인다.

      주요 특징

      Thanos에서 이야기하는 주요 특징은 다음과 같다.

      출처 - thanos.io

      출처 - thanos.io

      • Golobal Query View

        • 다수의 prometheus 서버들과 클러스터들에 걸친 질의를 지원한다.

      • Unlimited Retention

        • Public cloud의 객체 저장소를 포함한 다양한 저장소에 메트릭을 저장할 수 있게 되었고 데이터 보관주기의 제약이 없어졌다.

      • Prometheus Compatible

        • Prometheus의 인터페이스와 거의 완벽하게 호환되는 API를 제공하여 기존 Prometheus 환경에 쉽게 적용가능하다.

      • DownSampling & Compaction

        • 데이터의 시간주기별 데이터를 생성하여 통합데이터 조회의 성능을 높히고 데이터별 상세 저장주기 설정을 통해 저장소를 효율적으로 활용할 수 있다.


      구성

      Thanos의 구성을 살펴보면 다음과 같다.

      출처 - bitnami

      출처 - bitnami

      다양한 컴포넌트들이 내부적으로 돌아가며 각각은 단일 소프트웨어로 배포되며 독립적인 기능을 수행한다.

      • Compactor

        • 수집된 데이터를 기준에 따라 장기보관용 데이터로 변환 (rollout)

        • aggregated 데이터를 준비 (rollover)

        • 비 동기로 동작하므로 cron 또는 daemon으로 실행시키는 것이 일반적

        • Store (Store API), Sidecar, Query와 연동하여 기능을 수행

      • Query (Querier)

        • PromQL을 처리하는 부분으로 필요한 Prometheus의 sidecar와 연결하여 필요한 데이터를 수집해 통합후 결과 리턴

        • 질의를 Store (Store API), Sidecar등으로 전달하고 수집

      • Query Frontend

        • PromQL을 처리하는 사용자로부터 최초 진입점으로 캐시나 효율적인 쿼리 분배등을 처림

        • Query로 질의를 전달하고 결과를 받아 요청자에게 반환

      • Receiver

        • Remote write API를 사용하여 prometheus가 데이터를 보낼때 이를 받아 처리할때 사용

        • 실시간으로 prometheus 데이터를 object storage로 저장하기 위한 기능

        • pull 방식으로 부족한 경우를 대비하기 위해 만든 것으로 생각되는 기능 (push gateway와도 같은 맥락)

      • Rule

        • Thanos에의해 연동된 모든 prometheus 대상의 룰을 정의하고 처리

        • Prometheus의 rule과 동일한 문법사용

        • Query를 통해 실시간 룰체크

      • Sidecar

        • Prometheus서버와 함께 하나의 POD로 구성되어 배포

        • Query의 요청을 처리

      • Store (StoreAPI)

        • 저장소를 사용하는 모든 작업은 이 컴포넌트를 통과하고 하단의 Object Storage를 접근하는 단일포인트임

        • Sidecar도 이 기능을 수행

      • 기타 Tools: 다양한 tool들이 존재

        • Object storage(bucket)를 다루는 명령 행

      위 그림상에서 보여지는 Minio의 경우는 Object store로 사용하기 위한 임시 컴포넌트로 테스트등으로만 사용하고 실사용에서는 S3등 public cloud의 object storage를 사용하는 것을 가장 추천한다.

      활용방법

      Thanos는 다음과 같이 활용가능하다.

      • 멀티 Prometheus 연동

        • Global query view기능을 통해 다수의 prometheus를 하나의 인터페이스를 통해 조회하고 활용가능하다.

        • 예를들어 container와 service mesh를 위한 별도의 용도별 Prometheus 들이 별도 존재하는 경우에도 thanos를 사용하면 container 상태와 service mesh 상태를 조합한 알람을 정의하고 실시간 감시할 수 있다.

      • Prometheus H.A.

        • 동일한 설정을 갖은 다수의 Prometheus를 운영하고 thanos를 통해 연동하면 prometheus 서버가 장애가 발생하더라도 서비스의 단절이나 데이터의 누락을 방지할 수 있다.

        • 이는 Global query view 기능과 메트릭 deduplication 기능을 통해 가능하다.

      • 데이터 저장능력 향상

        • Object storage를 통한 데이터 무한 확장이 가능하고 저장소 분리 및 Rollover 기능등을 통해 데이터의 증가에따른 성능지연에 대응할 수 있다.


      Thanos의 설치

      Thanos를 설치하는 방법은 여러가지가 있다. Go로 개발된 코드로부터 빌드하고 각각의 모듈을 실행하고 연결하는 방법부터 패키지저장소의 모듈들을 받아와 쓰는 방법까지 다양하다. 본 블로그에서는 간단하게 kubernetes상에 helm chart를 사용하여 배포하는 방법을 설명하겠다. 현재 Thanos 진영에서 배포하는 정식 helm chart는 존재하지 않고 bitnami나 Banzai Cloud (cisco)에서 제공하는 챠트가 있다. 더 먼저 시작되었고 높은 성숙도를 보이는 bitnami를 기준으로 설명하도록 하겠다.

      Helm chart로 Thanos 설치해보기

      코드와 부가적인 설명이 필요하면 다음 링크(https://github.com/bitnami/charts/tree/master/bitnami/thanos/)를 참조하도록 하자.

      별도의 설정없이 기본 설치시 query와 query-frontend가 생성되는 것을 확인할 수 있다.

      siim@u20-dev:~$ helm repo add bitnami 
      "bitnami" has been added to your repositorie
      
      siim@u20-dev:~$ helm install my-release bitnami/thanos
      NAME: my-release
      LAST DEPLOYED: Fri Nov  5 11:54:43 2021
      NAMESPACE: default
      STATUS: deployed
      REVISION: 1
      TEST SUITE: None
      NOTES:
      CHART NAME: thanos
      CHART VERSION: 7.0.5
      APP VERSION: 0.23.1** Please be patient while the chart is being deployed **
      
      Thanos chart was deployed enabling the following components:
      - Thanos Query
      
      Thanos Query can be accessed through following DNS name from within your cluster:
      
          my-release-thanos-query.default.svc.cluster.local (port 9090)
      
      To access Thanos Query from outside the cluster execute the following commands:
      
      1. Get the Thanos Query URL by running these commands:
      
          export SERVICE_PORT=$(kubectl get --namespace default -o jsonpath="{.spec.ports[0].port}" services my-release-thanos-query)
          kubectl port-forward --namespace default svc/my-release-thanos-query ${SERVICE_PORT}:${SERVICE_PORT} &
          echo ":${SERVICE_PORT}"
      
      2. Open a browser and access Thanos Query using the obtained URL.
      
      siim@u20-dev:~$ kubectl get all -n default
      NAME                                                    READY   STATUS    RESTARTS   AGE
      pod/my-release-thanos-query-6cd8c6ff57-nrtkg            1/1     Running   0          103s
      pod/my-release-thanos-query-frontend-847f4c59cb-79pjr   1/1     Running   0          103s
      
      NAME                                       TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)              AGE
      service/kubernetes                         ClusterIP   10.233.64.1              443/TCP              7d1h
      service/my-release-thanos-query            ClusterIP   10.233.94.10             9090/TCP,10901/TCP   103s
      service/my-release-thanos-query-frontend   ClusterIP   10.233.119.221           9090/TCP             103s
      
      NAME                                               READY   UP-TO-DATE   AVAILABLE   AGE
      deployment.apps/my-release-thanos-query            1/1     1            1           103s
      deployment.apps/my-release-thanos-query-frontend   1/1     1            1           103s
      
      NAME                                                          DESIRED   CURRENT   READY   AGE
      replicaset.apps/my-release-thanos-query-6cd8c6ff57            1         1         1       103s
      replicaset.apps/my-release-thanos-query-frontend-847f4c59cb   1         1         1       103s

      대부분의 thanos 컴포넌트없이 최소사양으로 설치된 것으로 실제 사용에는 무리가 있다. 일단 위에서 설치한 내용을 삭제하자.

      siim@u20-dev:~$ helm delete my-release 
      release "my-release" uninstalled


      실제 동작을 확인하기 위한 구성

      실제로 사용하기 위해서는 컴포넌트간 연동을 위한 설정이 반영되어야 한다. 여기서는 vanilla kubernetes에서부터 prometheus와 minio(object storage)를 구성한후 이에 연동하는 thanos를 구성하는 방법에 대해 설명하도록 한다.

      사전준비

      1. kubernetes v1.16.x 이상이 준비되어 있는 상태에서 local-path를 설치한다.

        siim@u20-dev:~/.kube$ kubectl apply -f 
        namespace/local-path-storage created
        serviceaccount/local-path-provisioner-service-account created
        clusterrole.rbac.authorization.k8s.io/local-path-provisioner-role created
        clusterrolebinding.rbac.authorization.k8s.io/local-path-provisioner-bind created
        deployment.apps/local-path-provisioner created
        storageclass.storage.k8s.io/local-path created
        configmap/local-path-config created
        siim@u20-dev:~/.kube$ kubectl get sc
        NAME         PROVISIONER             RECLAIMPOLICY   VOLUMEBINDINGMODE      ALLOWVOLUMEEXPANSION   AGE
        local-path   rancher.io/local-path   Delete          WaitForFirstConsumer   false                  12s
        
      2. object store 연동을 위한 설정 생성한다.

        siim@u20-dev:~/blog$ cat < objstore.yml
        type: s3
        config:
          bucket: thanos
          endpoint: thanos-minio:9000
          access_key: taco
          secret_key: password
          insecure: true
        EOF
        
        siim@u20-dev:~/blog$ kubectl create secret generic taco-objstore-secret --from-file=objstore.yml 
        secret/taco-objstore-secret created
        
      3. 앞의 블로그(https://devocean.sk.com/blog/techBoardDetail.do?ID=163447)를 참조하여 prometheus를 설치한다. 블로그 내용에 추가적으로 thanos sidecar를 활성화 시켜야한다. value override 파일에 다음의 내용을 추가한 후 설치한다.

        siim@u20-dev:~/blog$ cat < value-override-thanos-sidecar.yaml
        prometheus:
          prometheusSpec:
            thanos:
              minTime: -3h
              objectStorageConfig:
                key: objstore.yml
                name: taco-objstore-secret
        	    version: v0.18.0
          thanosService:
            annotations: {}
            clusterIP: ""
            enabled: true
            labels: {}
            port: 10901
            portName: grpc
            targetPort: grpc
            type: ClusterIP
        EOF
        
        siim@u20-dev:~/blog$ helm repo add prometheus-community 
        "prometheus-community" has been added to your repositories
        
        siim@u20-dev:~/blog$ helm repo update
        
        siim@u20-dev:~/blog$ helm install prometheus prometheus-community/kube-prometheus-stack --version 19.2.2 -f value-override.yaml -f value-override-thanos-sidecar.yaml
        NAME: prometheus
        LAST DEPLOYED: Sat Nov  6 05:09:15 2021
        NAMESPACE: default
        STATUS: deployed
        REVISION: 1
        NOTES:
        kube-prometheus-stack has been installed. Check its status by running:
          kubectl --namespace default get pods -l "release=prometheus"
        
        Visit  for instructions on how to create & configure Alertmanager and Prometheus instances using the Operator.
        
      4. 수분이 지나면 prometheus 설치가 완료되고 이때 서비스를 확인하여 thanos에서 연동에 사용할 endpoint를 확인한다.

        • prometheus sever - lma-prometheus:9090

        • manager - lma-manager:9093

        • thanos sidecar - lma-thanos-discovery:10901

        siim@u20-dev:~/blog$ kubectl get svc
        NAME                    TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)                      AGE
        manager-operated   ClusterIP   None                    9093/TCP,9094/TCP,9094/UDP   36m
        kubernetes              ClusterIP   10.233.0.1              443/TCP                      9d
        lma-manager        ClusterIP   10.233.46.132           9093/TCP                     36m
        lma-operator            ClusterIP   10.233.21.210           443/TCP                      36m
        lma-prometheus          NodePort    10.233.18.122           9090:30008/TCP               36m
        lma-thanos-discovery    ClusterIP   10.233.22.240           10901/TCP,10902/TCP          36m
        prometheus-grafana      ClusterIP   10.233.1.107            80/TCP                       36m
        prometheus-operated     ClusterIP   None                    9090/TCP                     36m
        
      5. 앞에 설치한 prometheus의 구조에 의해 label이 하나 필요하다.

        siim@u20-dev:~/blog$ kubectl label ns default name=lma
        namespace/default labeled


      Thanos helm chart 값 설정

      vanilla kubernetes설정을 적용하여 thanos를 구성하는 예제를 설명하겠다. minio thanos chart의 values.yaml 구조를 통해 반영할 수 있는 설정 및 적용방법을 유추할수 있는데, 실제 값(https://github.com/bitnami/charts/blob/master/bitnami/thanos/values.yaml)을 확인하여 각 컴포넌트들에 대한 설정이 분리되어 있는 것을 확인해보자. 각 컴포넌트는 기본적으로 해당 컴포넌트를 설치할지 여부(enabled)를 설정하도록 되어있으며 고유의 설정을 갖고있다. 정상적인 동작을 위해 설정해야 하는 부분은 다음을 참조하자.

      • query

        • 연동할 backend (prometheus)를 설정한다. 다양한 방식의 설정을 지원하지만 본 예제에서는 직접적으로 IP:Port형태로 연결하는 방식을 사용한다. 주소는 앞에 prometheus 설치시 확인한 sidecar의 endpoint(lma-thanos-discovery:10901)을 사용한다.

        stores: 
        - lma-thanos-discovery:10901
        
      • queryFrontend

      • cache는 메모리를 사용하도록 설정한다.

        • 설치 완료후 브라우저를 통한 확인을 위해 NodePort를 설정한다.

        • 나머지 설정은 필요에 따라 변경가능하지만 본 예제에서는 기본값을 사용한다.

        config: |-
          type: IN-MEMORY
          config:
            max_size: 512MB
            max_size_items: 100
            validity: 100s
        service:
          type: NodePort
        	nodePort:
        		http: 30030
        
      • bucketweb

        • object storage의 연동시 저장소를 확인할 수 있는 유틸리티 이지만 본 예제에서는 사용하지 않는다.

      • compactor

        • compactor의 동작을 지정하고 주기설정 등이 가능하다.

        • 데이터별 저장주기와 compaction 실행주기를 설정하자.

        retentionResolutionRaw: 30d
        retentionResolution5m: 30d
        retentionResolution1h: 10y
        # Compaction 실행주기 설정 
        consistencyDelay: 30m
        
      • storegateway

        • compactor나 query가 object storage의 데이터를 참조할때 거치는 기능을 설정할수 있다.

        • 메모리 캐시를 사용하도록 설정하고, query 연동을 위한 포트만 설정하자.

        config: |-
          type: IN-MEMORY
          config:
            max_size: 250MB
            max_item_size: 125MB
        
      • ruler

        • 발생 알람을 처리하기위해 manager에 대한 설정이 필요하다. - 주소와 레이블 'thanos'

        • 또한 처리할 룰(예시에서는 metamonitoring그룹의 PrometheusDown)과 수행주기를 정의할 수 있다.

        managers: 
        - 
        evalInterval: 1m
        clusterName: thanos
        config: |-
          groups:
            - name: "metamonitoring"
              rules:
                - : "PrometheusDown"
                  expr: absent(up{prometheus="monitoring/prometheus-operator"})
        
      • receive

        • 외부 데이터를 직접적으로 받을때 쓰는 것으로 본 예제에서는 사용하지 않는다.

      • metrics

        • 자체 모니터링을 위한 메트릭을 발생시킬 것인가를 설정하는데 본 예제에서는 사용하지 않는다.

      • objstoreConfig

        • object storage에 대한 설정을 입력한다. 자세한 내용은 링크(https://thanos.io/tip/thanos/storage.md/)를 참조하자.

        • 자체적인 minio를 통해 object storage를 사용하는 설정은 아래와 같다.

        type: s3
        config:
          bucket: thanos
          endpoint: thanos-minio:9000
          access_key: taco
          secret_key: password
          insecure: true
        
      • minio

        • bitnami의 helm chart를 통해 minio 설치하여 object store로 활용한다.

        • 접근을 위한 계정이나 사용할 디스크에 대한 정의를 한다.

        auth:
        	rootuser: taco
        	rootPassword: password
        defaultBuckets: thanos
        

      마지막으로 앞에서 설치한 local-path를 사용하기 위해 global에 다음 항목을 지정해야 한다.

      global:
        storageClass: local-path

      Object stroage 연동을 위한 설정은 앞에서 prometheus의 sidecar에서 사용한 'taco-objstore-secret' 사용하겠다.

      existingObjstoreSecret: taco-objstore-secret

      그 외 부분은 일반적인 helm chart에서 지정하는 값들이고 별도로 설정하지 않아도 본 블로그의 내용을 이해하는데 문제가 없다.

      전체적으로 override할 값들 정리하면 아래와 같다.

      # thanos.vo.simple.yaml
      global:
        storageClass: local-path
      clusterDomain: dev
      commonLabels: 
        appGroup: lma
        app: thanos
      existingObjstoreSecret: taco-objstore-secret
      query:
        enabled: true
        stores: 
        - lma-thanos-discovery:10901
      queryFrontend:
        enabled: true
        config: |-
          type: IN-MEMORY
          config:
            max_size: 512MB
            max_size_items: 100
            validity: 100s
        extraFlags: 
        - --query-range.split-interval=24h
        - --query-range.max-retries-per-request=3
        - --query-frontend.log-queries-longer-than=60s
        service:
          type: NodePort
          ports:
            http: 9090
          nodePorts:
            http: 30007
      bucketweb:
        enabled: false
      compactor:
        enabled: true
        retentionResolutionRaw: 30d
        retentionResolution5m: 30d
        retentionResolution1h: 10y
        # Compaction 실행주기 설정 
        consistencyDelay: 30m
      storegateway:
        enabled: true
        config: |-
          type: IN-MEMORY
          config:
            max_size: 250MB
            max_item_size: 125MB
      ruler:
        enabled: true
        managers: 
        - 
        evalInterval: 1m
        clusterName: thanos
        config: |-
          groups:
            - name: "metamonitoring"
              rules:
                - : "PrometheusDown"
                  expr: absent(up{prometheus="monitoring/prometheus-operator"})
      receive:
        enabled: false
      metrics:
        enabled: false
      volumePermissions:
        enabled: false
      minio:
        enabled: true
        auth:
          rootUser: taco
          rootPassword: password
        defaultBuckets: thanos

      위 설정을 이용해서 다음과 같이 설치하자.

      siim@u20-dev:~$ helm install thanos bitnami/thanos --version 7.0.5 -f my/site-value/thanos.vo.simple.yaml 
      NAME: thanos
      LAST DEPLOYED: Mon Nov  8 06:51:04 2021
      NAMESPACE: default
      STATUS: deployed
      REVISION: 1
      TEST SUITE: None
      NOTES:
      CHART NAME: thanos
      CHART VERSION: 7.0.5
      APP VERSION: 0.23.1** Please be patient while the chart is being deployed **
      
      Thanos chart was deployed enabling the following components:
      - Thanos Query
      - Thanos Compactor
      - Thanos Ruler
      - Thanos Store Gateway
      
      Thanos Query can be accessed through following DNS name from within your cluster:
      
          thanos-query.default.svc.dev (port 9090)
      
      To access Thanos Query from outside the cluster execute the following commands:
      
      1. Get the Thanos Query URL by running these commands:
      
          export SERVICE_PORT=$(kubectl get --namespace default -o jsonpath="{.spec.ports[0].port}" services thanos-query)
          kubectl port-forward --namespace default svc/thanos-query ${SERVICE_PORT}:${SERVICE_PORT} &
          echo ":${SERVICE_PORT}"
      
      2. Open a browser and access Thanos Query using the obtained URL.

      아래와 같이 설치된 내역을 확인할 수 있고 브라우저를 통해 query frontend로 설정한 노드포트인 30007번 포트를 사용(http://CLUSER_IP:30007)하면 아래와 같이 PromQL 사용가능한 웹페이지에 접근할 수 있다.

      siim@u20-dev:~$ kubectl get all
      NAME                                        READY   STATUS    RESTARTS   AGE
      pod/manager-lma-manager-0         2/2     Running   0          13m
      pod/lma-operator-84556c46dc-lfjnf           1/1     Running   0          14m
      pod/prometheus-grafana-5b96fb5467-t62np     2/2     Running   0          14m
      pod/prometheus-lma-prometheus-0             3/3     Running   0          13m
      pod/thanos-compactor-74f67f4ccc-cxpkh       1/1     Running   2          2m53s
      pod/thanos-minio-694bbf98d6-v7n5l           1/1     Running   0          2m53s
      pod/thanos-query-5cfd555bbc-wnp4r           1/1     Running   0          2m53s
      pod/thanos-query-frontend-d96f4bdc8-d2p7b   1/1     Running   0          2m53s
      pod/thanos-ruler-0                          1/1     Running   0          2m53s
      pod/thanos-storegateway-0                   1/1     Running   2          2m53s
      
      NAME                            TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)                      AGE
      service/manager-operated   ClusterIP   None                    9093/TCP,9094/TCP,9094/UDP   13m
      service/kubernetes              ClusterIP   10.233.0.1              443/TCP                      12d
      service/lma-manager        ClusterIP   10.233.33.165           9093/TCP                     14m
      service/lma-operator            ClusterIP   10.233.42.200           443/TCP                      14m
      service/lma-prometheus          NodePort    10.233.8.139            9090:30008/TCP               14m
      service/lma-thanos-discovery    ClusterIP   10.233.54.237           10901/TCP,10902/TCP          14m
      service/prometheus-grafana      ClusterIP   10.233.63.194           80/TCP                       14m
      service/prometheus-operated     ClusterIP   None                    9090/TCP,10901/TCP           13m
      service/thanos-compactor        ClusterIP   10.233.11.10            9090/TCP                     2m53s
      service/thanos-minio            ClusterIP   10.233.16.189           9000/TCP,9001/TCP            2m54s
      service/thanos-query            ClusterIP   10.233.7.226            9090/TCP,10901/TCP           2m54s
      service/thanos-query-frontend   NodePort    10.233.44.175           9090:30007/TCP               2m54s
      service/thanos-ruler            ClusterIP   10.233.16.80            9090/TCP,10901/TCP           2m53s
      service/thanos-storegateway     ClusterIP   10.233.4.177            9090/TCP,10901/TCP           2m54s
      
      NAME                                    READY   UP-TO-DATE   AVAILABLE   AGE
      deployment.apps/lma-operator            1/1     1            1           14m
      deployment.apps/prometheus-grafana      1/1     1            1           14m
      deployment.apps/thanos-compactor        1/1     1            1           2m53s
      deployment.apps/thanos-minio            1/1     1            1           2m53s
      deployment.apps/thanos-query            1/1     1            1           2m53s
      deployment.apps/thanos-query-frontend   1/1     1            1           2m53s
      
      NAME                                              DESIRED   CURRENT   READY   AGE
      replicaset.apps/lma-operator-84556c46dc           1         1         1       14m
      replicaset.apps/prometheus-grafana-5b96fb5467     1         1         1       14m
      replicaset.apps/thanos-compactor-74f67f4ccc       1         1         1       2m53s
      replicaset.apps/thanos-minio-694bbf98d6           1         1         1       2m53s
      replicaset.apps/thanos-query-5cfd555bbc           1         1         1       2m53s
      replicaset.apps/thanos-query-frontend-d96f4bdc8   1         1         1       2m53s
      
      NAME                                             READY   AGE
      statefulset.apps/manager-lma-manager   1/1     13m
      statefulset.apps/prometheus-lma-prometheus       1/1     13m
      statefulset.apps/thanos-ruler                    1/1     2m53s
      statefulset.apps/thanos-storegateway             1/1     2m53s

      스크린샷 2021-11-08 오후 3.52.42.png

      데이터를 확인해보면 prometheus에 잘 연결되어 돌아가는 것을 확인할 수 있다. (위 prometheus, 아래 thanos)

      4.png

      5.png


      마치며

      본 블로그에서는 다수의 prometheus 서버들을 통합하는 thanos에 대한 소개와 이를 실제로 작동가능하도록 설치해보는 내용을 다루었다. TACO에서는 kubernetes 서비스를 개발하면서 클러스터들을 통합모니터링 하기위해 thanos를 사용하고 있다. 이를 위한 개발을 진행하면서 다양하게 적용할 수 있는 thanos 컴포넌트들의 효율적인 설계를 위해 컴포넌트 상세를 조사하고 튜닝포인트를 잡아서 배포시 활용하는 작업을 수행하였다. 다음 블로그에서는 thanos의 컴포넌트별 상세를 살펴보고 적용하면 사용한 튜닝가능한 포인트들을 정리할 예정이다. 

      https://youtu.be/-sfWvPqiIrU

      https://heavenly-part-d73.notion.site/Thanos-b07b40943e8e423696c47a64badcae61

      댓글 0

      DEVOTEE를 활성화 시키면
      지금 작성한 댓글에 AI가 댓글을 달아줍니다.

      sungil 님의 최신 블로그

      더보기
      동영상 기고하기