Ssoon
[4주차] CHAPTER-17 프로메테우스(Prometheus) 본문
이정훈님이 집필하신 "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
🧿 prometheus stack helm 차트를 다운로드 받고 압축을 풀어줍니다.
🧿 변수 파일 (my-value.yaml)을 편집합니다.
✔ NodePort 타입으로 alertmanager 서비스 지정
✔ 다른 Helm 차트의 서비스 모니터 설정을 추가하도록 false로 수정
✔ NodePort 타입으로 Prometheus 서비스 지정
✔ 성능 데이터를 보관하는 스토리지의 저장 기간과 용량 지정
✔ Prometheus가 사용하는 스토리지 옵션
🧿 grafana 차트의 values.yaml 파일을 수정합니다.
✔ 로드밸런서 타입의 서비스 사용
✔ 대시보드 설정 저장을 위한 PersistenceVolume 사용 활성화, StorageClass 이름 지정
🧿 네임스페이스를 생성하고 설치합니다.
✅ Prometheus 아키텍처
✔ 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 대시보드에서 위의 내용을 포함한 다양한 쿼리를 통해 정보를 확인할 수 있습니다.
'Production Kubernetes Online Study' 카테고리의 다른 글
[4주차] CHAPTER-19 얼럿매니저(alertmanager) (0) | 2023.03.30 |
---|---|
[4주차] CHAPTER-18 그라파나(Grafana) (0) | 2023.03.29 |
[4주차] CHAPTER-16 쿠버네티스 모니터링 도구 (0) | 2023.03.27 |
[3주차] CHAPTER-15 ArgoCD 를 활용한 GitOps (0) | 2023.03.23 |
[3주차] CHAPTER-14 깃랩을 이용한 로컬 Git 소스 저장소 (0) | 2023.03.22 |