Prometheus

[Prometheus] Metric 수집을 위한 Exporter

hihikiki 2023. 7. 26. 14:02

k8s 기본적으로 k8s 안에 배포된 컨테이너와 기본적인 node 관한 metric  수집하고 있습니다. 

어떻게 수집하는가? k8s 자체적으로 cluster 내의 모든 노드에 metic 수집하는 cAdvisor라는 모니터링 에이전트를 통해서 수집을  있습니다cAdvisor로도 많은 데이터를 얻을  있지만, cAdvisor에서 수집하지 않는 metric 추가적으로 scrape하기 위해 별도로 exporter 배포하곤 합니다.

어떤 exporter들이 있는지 알아봅시다.

 

Exporter 종류

1. 노드 혹은 vm의 metric 수집을 위한 node-exporter

cluster 존재하는 노드마다 하나씩 배포되어 해당 노드에서 발생하는 metric 수집하는 exporter입니다.

- node-exporter cpu, memory, disk 사용율, network bandwidth 같은 hardware단에서 발생하는 metric수집합니다.

- 노드마다 하나씩 고유하게 배포되어야 하기 때문에 보통 DaemonSet으로 배포합니다.

 

2. kubernetes의 리소스 메트릭 수집을 위한 kube-state-metrics

kubernetes  전반적인 resource 대해서   있는 metric 서버 입니다.

node-exporter 달리, kube-state-metrics k8s 이미 갖고 있는 데이터를 k8s api서버로부터 요청하여 가져오기 때문에 cluster 내에  하나의 component 배포합니다.

(kube-state-metrics Deployment 배포합니다.)

Pod, Deployment, Service 같은 리소스 타입별로 설치된 개수를 노드별로 조회해   있습니다.

Pod 사용 중인 리소스 metric 네트워크 I/O, Deployment , Pod  등등 다양한 정보를 수집합니다.

 

3. java 어플리케이션 metric수집을 위한 Actuator, jmx-exporter

Spring 어플리케이션에서 발생되는 metric 수집하는 방법은  가지 정도가 있습니다.

방법1) Actuator 사용하는 방법

Actuator Spring 어플리케이션의 내부 상태와 성능 메트릭을 수집하는데 쓰이는 모듈입니다.

pom.xml actuator 설정을 넣어 간단하게 설정할  있습니다.

Spring Boot 2.0이상부터는 어플리케이션의 metric 측정을 위해서 Micrometer 제공합니다. 

(Micrometer 범용 메트릭 라이브러리로, Java 어플리케이션의 메트릭을 수집하기 위해 사용됩니다.)

Micrometer Spring Boot 2 Actuator 포함되어 있기 때문에 'spring-boot-starter-actuator'dependency 추가해주면 쉽게 사용할  있습니다.

 

방법2)외장 jmx-exporter 사용하는 방법

jmx exporter Java Management Extensions(JMX) 통해 수집된 Java 어플리케이션의 메트릭을Proemetheus 수집할  있도록 변환해주는 도구입니다.

jmx exporter spring boot에서 사용하는 thrid party library  관해서도 metric 수집합니다. (kafka.*, hystrix.*, hicaricp.*, rabbitmq.*, cache.* )

 

4. 컨테이너의 메트릭 수집을 위한 cAdvisor

cAdvisor Contianer metric 수집하기 위한 용도로 사용됩니다.

 노드에 설치되어 해당 노드에서 동작 중인 컨테이너와 메트릭을 수집하고 모니터링 합니다.

모든 노드에는 kubelet 설치되어있고,  안에 cAdvisor kubelet 일부로 작동합니다.

(kubelet k8s 마스터로부터 받은 컨테이너 실행 요청을 처리하고 컨테이너가 노드에서 올바르게 실행되도록 관리해주는 컴포넌트입니다.)

kubelet 컨테이너들의 리소스 사용량과 성능 메트릭을 cAdvisor 통해서 수집하고, cAdvisor 수집한 메트릭을RESTful API 통해 제공해줍니다.

 

Q. 근데 kube-state-metrics가 수집하는 메트릭과 cAdvisor가 수집하는 메트릭은 어떤 차이가 있을까?

cAdvisor는 주로 컨테이너의 리소스 사용량과 성능 메트릭을 수집하는데 사용되고,

kube-state-metrics는 Kubernetes 리소스들의 상태 정보를 수집하는데 사용됩니다.