[Prometheus] Metric 수집을 위한 Exporter
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 리소스들의 상태 정보를 수집하는데 사용됩니다.