본문 바로가기
클라우드/Prometheus

Kubernetes MultiCluster 환경에서 Prometheus metric 데이터 수집하기

by 정권이 내 2022. 12. 14.

img

 

 

k8s MultiCluster 환경에서 Prometheus metric 데이터 수집하기

 

클라우드 환경에서 멀티클러스터를 구성하게 된다면 Prometheus에서 수집하는 메트릭 데이터들을 한곳으로 모으는 작업이 필요하게 됩니다. 각 클러스터에서 수집하는 메트릭 데이터들을 Grafana에서 따로따로 모니터링 해도 되긴 하겠지만 효율적인 방법은 아니라고 생각합니다.

 

Prometheus 설치는 아래글을 참고하시면 됩니다.

 

Kubernetes 에서 Prometheus Stack 설치하기(Grafana, Node Exporter)

Kubernetes 에서 Prometheus 설치하기(Helm) 클라우드 환경에서 시스템 모니터링을 할때 주로 사용하는 오픈소스 툴인 Prometheus 설치방법에 대해 설명 해보겠습니다. Prometheus 공식 Github에서 helm chart를 제

ksr930.tistory.com

 

scrape_config & remote_write

다행히도 Prometheus에서는 멀티클러스터 환경에서 메트릭데이터를 한곳으로 모을수있도록 기능을 제공하고 있습니다.

  • scrape_config
  • remote_write

 

두 방법 공통적으로 사용시 주의할점이 있는데 Prometheus에서는 멀티 클러스터상에 설치된 Prometheus, nodeExporter의 버전을 동일하게 맞추는것을 권장하고 있습니다.

 

scrape_config 설정은 메인 클러스터의 Prometheus에서 타 클러스터의 Prometheus 메트릭 데이터 뿐만 아니라 시스템 메트릭을 제공하는 node_exporter 외에 다른 오픈소스 exporter 에서도 메트릭 데이터를 수집할수있는 기능을 제공합니다.

 

remote_write 설정은 메인 클러스터를 제외한 타 클러스터에서 메인 클러스터의 Prometheus의 주소를 지정하여 메트릭 데이터를 전송할수있는 방법입니다. scrape_config 와 마찬가지로 Prometheus에서는 여러 오픈소스들로부터 remote_write를 받을수 있습니다.

오픈소스 목록 : https://prometheus.io/docs/operating/integrations/#remote-endpoints-and-storage

 

img

metric 데이터 수집 구성도

 

제가 사용한 방법은 remote_write를 사용한 방법입니다. scrape_config 방식도 해보려고 했지만 잘 되지 않았습니다. 원인은 확실하지 않지만 메인 클러스터의 scrape_config 를 설정하는 부분에 url을 입력할때 타 클러스터의 Prometheus 엔드포인트 주소 형식을 지원하지 않는듯 했습니다.

 

Prometheus 에서 remote_wirte 설정하기

편의상 메트릭데이터가 모이는 클러스터를 메인 클러스터, 자신의 메트릭 데이터를 보내주는 클러스터를 서브 클러스터라고 명명하겠습니다. remote_write 설정을 사용하기 위해서는 메인, 서브클러스터의 Prometheus 모두 설정 변경이 필요합니다.

 

메인 클러스터는 values.yaml 에서 외부에서 들어오는 remote_write를 허용하기 위한 enableRemoteWriteReceiver 값을 true로 변경해야 합니다.

prometheus:
  ...
  ...
  prometheusSpec:
    ...
    ...
    enableRemoteWriteReceiver: true

 

서브 클러스터는 values.yaml 에서 remoteWrite 옵션을 설정해야 합니다. 메인 클러스터의 Prometheus 주소에 /api/v1/write 경로를 추가하여 설정합니다.

prometheus:
  ...
  ...
  prometheusSpec:
    ...
    ...
    remoteWrite:
      - url: http://[MAIN_CLUSTER_IP]:[PROMETHEUS_NODE_PORT]/api/v1/write

 

메인과 서브클러스터 모두 values.yaml 를 수정했다면 helm으로 업그레이드를 해줍니다.

$ helm upgrade prometheus . -n monitoring

 

메트릭 데이터 확인

메인클러스터의 Grafana에 접속하여 서브 클러스터에서 보내고있는 메트릭 데이터를 모니터링 할수 있는지 확인 해보겠습니다.

 

img

xxx.xxx.106.153 ~ 106.158은 메인 클러스터 내부에 있는 6개의 노드에 대한 정보이고 192.168.49.2 는 제가 minikube로 만들어놓은 서브 클러스터의 IP입니다.

서브 클러스터의 메트릭 데이터가 메인 클러스터의 Prometheus로 잘 전달이 되는것을 확인할수 있습니다.

 

 

참고 사이트

https://prometheus.io/docs/prometheus/latest/configuration/configuration/#scrape_config

https://prometheus.io/docs/prometheus/latest/configuration/configuration/#remote_write

https://grafana.com/docs/grafana-cloud/data-configuration/metrics/metrics-prometheus/

https://prometheus.io/docs/prometheus/latest/feature_flags/#remote-write-receiver

https://prometheus.io/docs/prometheus/latest/storage/#remote-storage-integrations

반응형

댓글