k8s MultiCluster 환경에서 Prometheus metric 데이터 수집하기
클라우드 환경에서 멀티클러스터를 구성하게 된다면 Prometheus에서 수집하는 메트릭 데이터들을 한곳으로 모으는 작업이 필요하게 됩니다. 각 클러스터에서 수집하는 메트릭 데이터들을 Grafana에서 따로따로 모니터링 해도 되긴 하겠지만 효율적인 방법은 아니라고 생각합니다.
Prometheus 설치는 아래글을 참고하시면 됩니다.
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
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에 접속하여 서브 클러스터에서 보내고있는 메트릭 데이터를 모니터링 할수 있는지 확인 해보겠습니다.
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
'클라우드 > Prometheus' 카테고리의 다른 글
[Helm] kube-prometheus-stack 모니터링 시스템 구축하기 (Grafana, exporter, monitoring) (2) | 2023.07.03 |
---|---|
쿠버네티스 Prometheus, Thanos 연동하기 (1) | 2023.06.27 |
Kubernetes 에서 Prometheus Stack 설치하기(Grafana, Node Exporter) (0) | 2022.12.13 |
Grafana - Loki - Promtail 연동 대시보드 로그보기 (1) | 2021.06.09 |
댓글