이쿠의 슬기로운 개발생활

함께 성장하기 위한 보안 개발자 EverNote 내용 공유

클라우드/Kubernetes

45. Kubernetes Monitoring : Prometheus 개념

이쿠우우 2020. 11. 7. 13:39
반응형

 

 

 

Prometheus (프로메테우스)

 


[Kubernetes Monitoring 관련 글 목록]

Kubernetes Monitoring : Metrics
Kubernetes Monitoring : HAP

Kubernetes Monitoring : Prometheus 개념

Kubernetes Monitoring : Prometheus 설치

Kubernetes Monitoring : Grafana


 

Kubernetes를 사용하다가 Console 환경이 아닌 

GUI로 한눈에 Kubernetes Cluster 상태를 확인할 수 있는 Tool이 있나 확인하던 중

Prometheus를 알게됨.

 


 

Prometheus 란?

 

SoundCloud에서 최초 개발한 오프소스 프로젝트이며 

CNCF(Cloud Native Computing Foundation)에 속해 있는

Monitoring 솔루션임.

 

다양한 Kubernetes Monitoring 솔루션이 있지만

Kubernetes에서 공식적으로 Metric 수집 및 대시보드 모니터링 구축은

Prometheus를 사용하라고 권장하고 있음.

 

Prometheus는 범용 모니터링 솔루션임으로 

Prometheus는 Kubernetes 뿐만 아니라

Application, Server, OS 등 다양한 대상에 대해서 모니터링을 할 수 있는 솔루션임.

 

 


 

Prometheus 특징

 

Metric 수집 종류

Prometheus는 Metrics Data중 

System, Service Metrics Data를 모두 확인할 수 있음

 

Metric 수집 방법

Monitoring pipeline (Full Metric Pipeline) 방법으로 Metrics를 수집함.

Monitoring pipeline 의 경우 별도의 외부 서드파티(3rd-party) 모니터링 시스템과 연계해서 

Metrics Data를 가져오는데 그때 사용할 수 있는 Agent 중 하나가 바로 Promtheus 임.

 

Data 수집 모델

Data수집 모델 종류로 Push 와 Pull 방식이 있는데

Prometheus의 경우 Pull 방식으로 동작함.

모니터링 대상이 되는 Metric을 저장하고 있는 모듈이 Prometheus로 Metric을 보내는 것이 아니라 

Prometheus가 주기적으로 모니터링 대상에서 Metric Data를 가져옴.

 

시각화 모니터링

수집한 Metric Data를 Prometheus Web Console 또는 Grafana와 같은 GUI tool을 이용해서

시각화하여 확인할 수 있음.

 

알람 기능 제공

Prometheus에 사용자가 알람 설정을 해놓은 후 

모니터링을 하다 알람 설정 조건이 매칭되면

Slack, Email 등으로 알람내용을 전달할 수 있음.

 

모니터링 대상 자동 인지

Autoscaling으로 Pod가 증가하거나 

Public Cloud 환경에서 Worker Node가 증가하면 

이를 Service Discovery 기능을 통해서 실시간으로 인식하여 

모니터링 대상을 추가 또는 제거 할 수 있음.

 

 


 

 

Prometheus Architecture

 

Prometheus Architecture는 사용자에 따라 다양하게 구성할 수 있는데

공식 Prometheus 사이트에서 레퍼런스로 제공되는 구조는 다음과 같음.

 

 

모든 Kuberentes Node에 Node-Exporter가 구동되고 있으며, 

Node-Exporter와 kube-state-metrics를 통해 Prometheus Server가 Metric Data를 Pull 방식을 통해 주기적으로 수집함.

수집된 Metric Data는 Grafana에 전송되어 모니터링 대쉬보드로 현황 모니터링이 가능하며, 

특정 이벤트 발생 시에는 AlertManager로 전송되어 Slack을 통해 알람이 전송됨. 

 

 

 

 

Prometheus Server

Prometheus의 Main Component로

시계열 데이터(Time Series Data)를 수집해와서 저장하는 Server.

여기서 말하는 Data는 System, Service Metric 임.

 

[시계열 데이터(Time Series Data)란?]

일정한 시간 간격으로 배치된 데이터를 의미함.

즉 시간을 기준으로 생성(발생)된 데이터를 의미함.

 

 

 

Service Discovery

Kubernetes Cluster는 Autoscaling으로 Pod가 증가할 수 도 있고

Public Cloud 환경에서는 Worker Node가 증가할 수도 있음.

이와 같이 Kubernetes Cluster의 모니터링 대상은 굉장히 유동적임.

이렇게 유동적인 Kubernets Cluster 환경에서 모니터링 대상을 인지할 수 있는 기능이 필요한데

그 역할을 담당하는것이 바로 Service Discovery임.

Service Discovery는 모니터링 대상이 등록되어 있는 저장소인 

Kubernetes의 etcd 또는 Core-DNS(kube-DNS)와 같은 서비스와 연동하여 

모니터링 대상이 변경되는것을 탐지할 수 있음.

 

 

 

Exporters

Data 수집을 Pull 방식으로 할 경우

모니터링 대상이 Prometheus Data format을 지원하면 바로 읽어올 수 있지만

지원하지 않는다면 별도의 Agent를 설치해서 metric을 읽어와야함.

이 Agent를 exporters 라고 함.

 

Kubernetse Cluster 환경에서 

System Metric의 경우 Worker Node의 cAdvisor를 통해서 Data를 수집할 수 있지만

Service Metric와 같은 Container에서 구동되는 사용자 어플리케이션에 대한 정보는

Prometheus Client library를 사용해서 만든 Exporter를 통해서 수집해야함.

모든 Node에 Node-Exporter를 설치해서 Service Metric을 수집함.

100개가 넘는 다양한 exporter들이 있어서 

거의 대부분의 어플리케이션에서 데이터를 수집할 수 있는게 프로메테우스의 장점임.

 

또한 exporter는 HTTP 통신을 통해 Prometheus Server가 Metric Data를 가져갈 수 있게 

/metrics 라는 HTTP 엔드포인트를 제공함.

exporter가 해당 엔드포인트를 제공하고 있어서

Prometheus Server가 exporter의 엔드포인트로 HTTP GET 요청을 날려 Metric Data를 Pull방식으로 수집함.

 

 

 

Pushgateway

모니터링 대상이 배치 또는 스케줄 작업과 같이 필요한 경우에만 잠시 생성되어있다가 사라지기는 경우가 있는데 

이런 경우는 Pull방식으로 Metric Data 수집이 어려움.

이를 해결하기 위해 Pushgateway가 존재함.

 

위에서 설명한 잠시 생성되어었다가 사라지는 서비스들이 사라지기 전에 

Push 방식으로 Pushgateway에 Metric Data를 보내주면, 

Push gateway는 Metric Data를 보관하고 있다가 

Prometheus 서버가 Pull 작업을 하면, 

보관하고 있던 Metric Data를 리턴하는 역할을 수행함.

 

 

 

AlertManager

Prometheus에 설정된 알람발생조건이 매칭 되면 Slack, Email 등으로 알람 내용을 전달할 수 있는데

해당 기능을 AlertManager가 수행함.

알람의 중복처리, 그룹핑등과 알람을 어디로 보낼지를 관리함.

 

 

 

PromQL

Prometheus Server에 시계열 데이터(Time Series Data)를 수집해와서 저장하고 있는데

해당 Data를 데이터 시각화 할 수 있어야함.

그때 사용되는 것이 PromQL이라는 쿼리 언어임.

PromQL을 통해 수집한 데이터를 시각화하여 

Promtheus에 내장된 Web UI를 이용할 수도 있고 Grafana와 연계하는 것도 가능해짐.

 

 

 

Grafana

수집한 정보를 Prometheus가 제공하는 간단한 Web UI를 통해 

테이블 및 그래프 형태의 GUI로 확인할 수 있지만

보다 더 나은 GUI Tool을 사용하기 위해 일반적으로 Grafana라는 Data Visualization tool을 이용하여 시각화함.

Grafana는 시계열 데이터를 시각화하는데 가장 최적화된 대시보드를 제공해주는 오픈소스 Toolkit.

다양한 DB를 연결해서 DB의 Data를 가져와 시각화하는 것도 가능함.

 

 

 

 

 

 


제 글을 복사할 시 출처를 명시해주세요.
글에 오타, 오류가 있다면 댓글로 알려주세요! 바로 수정하겠습니다!


 

 

 

Prometheus 참고

https://prometheus.io/docs/introduction/overview/

https://github.com/prometheus/prometheus

https://bcho.tistory.com/1270

https://arisu1000.tistory.com/27857

https://it-ist.tistory.com/125

https://medium.com/finda-tech/prometheus%EB%9E%80-cf52c9a8785f

https://blog.naver.com/alice_k106/221521978267

 

 

Prometheus Exporter 종류 참고

https://prometheus.io/docs/instrumenting/exporters/

 

 

Prometheus 설치 참고

https://twofootdog.tistory.com/17

https://bcho.tistory.com/1270

 

 

 

 

 

 

 

 

반응형