Ssoon

[4주차] CHAPTER-17 프로메테우스(Prometheus) 본문

Production Kubernetes Online Study

[4주차] CHAPTER-17 프로메테우스(Prometheus)

구구달스 2023. 3. 28. 02:37
이정훈님이 집필하신 "24단계 실습으로 정복하는 쿠버네티스" 로 진행하는 CloudNet@ 팀의 PKOS 4주차 정리입니다.

🧿 기존의 가상머신, 베어메탈 환경 모니터링과 차이점

서비스 디스커버리

  ◾ 새로운 Pod는 자동으로 모니터링 대상으로 등록, 사라진 Pod는 모니터링 대상에서 제거

애플리케이션 중신 모니터링

  ◾ 쿠버네티스 기본 단위인 Pod 자체가 애플리케이션 서비스 => 기본 단위가 애플리케이션

  ◾ 애플리케이션 중심의 마이크로 서비스 아키텍처 환경

🧿 Prometheus 특징

서비스 디스커버리

  ◾ 개별 모니터링 대상을 서비스 엔드포인트로 등록해서 자동으로 변경 내역 감지

Pull 방식

  ◾ 중앙의 Prometheus 서버가 모니터링 대상의 정보를 직접 가져오는 (Pull) 방식 사용

다양한 애플리케이션 Exporter 제공

  ◾ 애플리케이션을 추가할 때 별도의 리소스를 들이지 않고 기존으 사용 중인 exporter를 가져와 사용 

다양한 레이블 제공
  ◾ 사용자가 원하는 metric 만 필터링해서 조회

자체 검색 언어 PromQL 제공

  ◾ 다양한 레이블 사용이 가능한 metric을 조회할 수 있도록 자체 검색 언어 제공

시계열 데이터베이스 사용

  ◾ 모니터링 대상이 되는 metric 데이터를 시간에 따라 순차적으로 저장 

Helm 차트 기반의 Prometheus-stsck 설치

stack ? 여러 component 를 함께 포함

Prometheus stack ? Prometheus 관련 모니터링에 필요한 여러 요소를 함께 제공

 Prometheus stack helm chart ? 모니터링과 관련된 여러 요소를 단일 차트에서 제공 

 

Prometheus stack helm chart는 다음과 같은 기능을 제공합니다

  ◾ Prometheus: 메트릭 수집기로서의 역할을 수행합니다. 다양한 서비스 및 시스템에서 생성된 메트릭 데이터를 수집하고 저장합니다.
  ◾ Alertmanager: 알림 관리 도구로서의 역할을 수행합니다. Prometheus에서 수집한 메트릭 데이터를 기반으로 사용자가 설정한 경고 규칙에 따라 경고를 생성하고, 이를 메일, 슬랙 등 다양한 채널로 전송합니다.
  ◾ Grafana: 시각화 도구로서의 역할을 수행합니다. Prometheus에서 수집한 메트릭 데이터를 대시보드 형태로 시각화하여 모니터링 및 분석에 활용합니다.
  ◾ Node Exporter: 노드 메트릭을 수집하는 역할을 수행합니다. 서버의 하드웨어 및 운영 체제에서 생성된 메트릭 데이터를 수집합니다.
  ◾ kube-state-metrics: Kubernetes 메트릭을 수집하는 역할을 수행합니다. Kubernetes에서 생성된 메트릭 데이터를 수집합니다.
  ◾ Pushgateway: 일회성 작업 메트릭을 수집하는 역할을 수행합니다. 일시적으로 생성되는 메트릭 데이터를 수집합니다.

 

 Prometheus stack helm chart를 사용하면, 이러한 컴포넌트들을 쉽게 배포하고 구성할 수 있습니다. 또한, helm chart를 사용하면 각 컴포넌트들을 쉽게 업그레이드하거나 롤백할 수 있습니다.

 

https://github.com/prometheus-community/helm-charts/tree/main/charts/kube-prometheus-stack

 

GitHub - prometheus-community/helm-charts: Prometheus community Helm charts

Prometheus community Helm charts. Contribute to prometheus-community/helm-charts development by creating an account on GitHub.

github.com

🧿 prometheus stack helm 차트를 다운로드 받고 압축을 풀어줍니다.

🧿 변수 파일 (my-value.yaml)을 편집합니다.

NodePort 타입으로 alertmanager 서비스 지정

다른 Helm 차트의 서비스 모니터 설정을 추가하도록 false로 수정

NodePort 타입으로 Prometheus 서비스 지정

성능 데이터를 보관하는 스토리지의 저장 기간과 용량 지정

Prometheus가 사용하는 스토리지 옵션

🧿 grafana 차트의 values.yaml 파일을 수정합니다.

✔ 로드밸런서 타입의 서비스 사용

✔ 대시보드 설정 저장을 위한 PersistenceVolume 사용 활성화, StorageClass 이름 지정

🧿 네임스페이스를 생성하고 설치합니다.

Prometheus 아키텍처

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

 alertmanager

  ◾ 사전에 정의한 정책 기반으로 시스템 경고 메시지 생성 -> aletmanager로 전달 -> 중복제거, 메시지 그룹화, 일시 중지 들의 사후 처리 작업 -> 지정된 email, slack 등으로 경보 알림

 grafana

  ◾ 별도의 시각화 솔루션으로 다양한 그래프와 차트를 생성합니다. PromQL 으로 metric 정보를 조회

prometheus-0

  ◾ prometheus Pod는 statefullset으로 배포

  ◾ 모니터링 대상 Pod는 'exporter'라는 별도의 사이드카 형식의 container로 metric을 노출

  ◾ metric을 prometheus 에서 pull 방식으로 가져와 내부의 시계열 데이터베이스 TSDB 에 저장

  ◾ 저장된 정보는 그래프 형태로 조회, 시스템 경고는 alertmanager로 전달

node-exporter

  ◾ demonset으로 설치되어 모니터링 대상 전체 node에 자동으로 설치

  ◾ 물리 node에 대한 자원사용량 정보를 metric 형태로 노출

promethus-operator

  ◾ 시스템 경고 메시지 정책, 애플리케이션 모니터링 대상 추가등의 작업을 위한 Custom Resource를 지원

kube-state-metric

  ◾ 쿠버네티스의 상태를 metric으로 변환

  ◾ 쿠버네티스 API 서버와 통신해서 각 오브젝트의 상태를 metric 형태로 변환

  ◾ 클러스터 전반에 관한 사항을 확인

 

(Nodus--Exporter) <--(pull방식/HTTP Get사용)-- (Prometheus 서버) 

✔ Prometheus Pod는 node-exporter 서비스로 접속해 해당 metric을 확인합니다.

 

🧿 localhost에서 port-forward 기능을 이용해 원격의 node-exporter Pod에 접속해 metric 확인

port-forward

  ◾ ClusterIP 타입의 서비스를 임시로 외부에서 접속하는 경우 사용

  ◾ k port-forward [원하는 서비스 대상] [로컬호스트 포트]:[원격 서비스 포트] 

✔ 해당 metric 정보를 Prometheus에서 가져와 사원 사용량을 파악할 수 있습니다. 

📢 모니터링 대상이 되는 서비스는 자체 웹 서버의 /metric 엔드포인트 경로에 metric 정보를 노출 -> Prometheus는 해당 경로에 HTTP Get 방식으로 metric 정보를 가져와 => 내부 스토리지에 시계열 데이터베이스 (TSDB) 형식으로 저장

Prometheus 웹 UI 활용

🧿 웹 서버 정보 확인 -> NodePort 30090포트로 외부 노출

🧿 NodeIP:30090으로 접속합니다.

Alert

  ◾ 사전에 정의한 시스템 경고 정책에 대한 상황

Graph

  ◾ PromQL을 이용해 metric 정보를 그래프로 조회 -> 단순 그래프만 지원

Status

  ◾ 경고 메시지 정책, 모니터 대상등 다양한 Prometheus 설정 내역 확인

 

🧿 모니터링 대상에 관한 설정 - [Status] - [Configuration] = /etc/prometheus/config_out/promethus.env.yaml

🧿 설정 파일을 확인합니다.

global:

  ◾ job_name 별 옵션이 지정되지 않을 경우 기본 설정으로 사용

scrape_interval: , scarape_timeout:

  ◾ metric을 가져오는 주기와 타임아웃 시간, 30초간격으로 metric정보를 가져오고 10초동안 응답이 없으면 종료

jab_name

  ◾ node-exporter 등 모니터링 대상을 작업으로 지정

metrix_path: , scheme:

  ◾ metric 경로와 해당 정보를 가져오는 방법 정의, http방식을 이용해 /metric경로에 위치한 metric정보를 가져옵니다.

kubernetes_sd_config: -role: endpoints

  ◾ 쿠버네티스 service discovery(sd) 방식을 이용해서 추가/삭제되는 Pod 의 변경 정보르 endpoint 리소스로 자동갱신

naesapces: names: monitoring

  ◾ 서비스 endpoint가 속한 namespace 이름 지정, prometheus는 서비스의 namspace가 속한 포트번호로 구분 

 

🧿 설정 파일에 등록된 모니터링 대상은 [Targets] 메뉴에서 확인할 수 있습니다. 

🧿 metric 정보를 그래프 형태로 조회합니다.

🧿 1 - avg(rate(node_cpu_seconds_total{mode="idle"}[1m]))

 1- 유휴 CPU 사용량

  ◾ 전체 CPU 사용량을 구하기 위해 '1'에서 유휴(mode="idle") 사용량 퍼센트 수치를 제외

avg(rate(..)[1m]

  ◾ []시간 동안 결과를 조회합니다. 해당시간동안의 변화량

node_cpu_seconds_total{mode="idle"}

  ◾ node가 사용한 전체 CPU 사용량 중에서 mode="idle" metric 변수로 필터리한 결과만 조회

 

📢 Grafana 대시보드에서 위의 내용을 포함한 다양한 쿼리를 통해 정보를 확인할 수 있습니다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Comments