Orchestration/Kubernates (k8s)

[Mac Os] Prometheus 모니터링 시스템 (Prometheus 설치, Grafana 설치 )

chanstory 2023. 2. 27. 15:05
반응형

Prometheus 란?

1. 오픈소스 모니터링 / 알림 시스템
2. 다양한 지표(metric) 수집 및 저장
 => 이를 기반으로한 경고 알림 (alerting) 및 대시보드 작성 지원함
3. 쿠버네티스, 노드, 프로메테우스 자체를 모니터링 할 수 있음

4. 유연성과 확장성이 높아 대규모 시스템에서도 사용할 수 있음

 

 

Prometheus 구성 요소

1. 프로메테우스는 시계열 (time series) 데이터를 저장함
2. 프로메테우스 서버는 다양한 export로 부터 각 대상의 메트릭을 pull하여 주기적으로 가져오는 모니터링 시스템
     => 쿠버네티스 관련 메트릭 가져오기 - exporter
     => mongoDB 관련 메트릭 가져오기 - mongoDB exporter
3. Alert manager는 경고 및 알람을 담당
4. 사용자가 데이터를 질의할 수 있는 Web UI가 존재함
     => 이 때 질의 언어로는 PromQL(prometheus Query Language)

 

 

Prometheus 장단점

장점

1.  다양한 데이터 소스를 통합하여 지표 수집 가능
2. 대규모 시스템에서도 대응 가능한 성능과 확장성
3. 경고 알림 및 대시보드 작성 등을 지원
4. 운영 및 개발 작업에 유용
5. PromQL 이라는 강력한 쿼리 언어를 제공 - 다양한 데이터를 검색하고 분석할 수 있음

단점

1.  데이터 수집과 저장방식이 Push 방식이 아닌 Pull 방식이기 때문에, 모니터링 대상 시스템에서 Exporter를 설치하거나 수집 대상을 직접 지원해야 함
2. 시계열 데이터 저장 및 검색을 위해 특별 저장소를 사용하기 때문에, 다른 저장소 시스템과 호환성이 떨어질 수 있다.
3. 프로메테우스가 직접 데이터를 저장하기 때문에, 데이터 유실 및 저장 용량에 대한 고려가 필요
4. 대량 데이터 처리 시 성능문제가 발생할 수 있음

 

 

쿠버네티스 exporter

1. 프로메테우스에서 쿠버네티스 관련 메트릭을 가져올 수 있는 쿠버네티스 exporter가 존재함
2. Kube API를  사용함
3. 대부분의 필요한 정보 수집 가능

 

* 쿠버네티스 내 프로메테우스, 그라파나, 슬랙과 같은 메신저와의 연동 구성 예시

 

 

 

 

Q. 모니터링 시스템에는 메트릭 수집을 위한 두가지 방식의 메커니즘이 존재합니다. 바로 Pull 방식과 Push 방식입니다. 프로메테우스는 어떤 방식의 메커니즘을 사용하나요?
=> 

Q. Pull 방식과 Push 방식은 어떻게 다르며, 장단점은 무엇인지, 또한 해당 방식을 사용하는 모니터링 도구는 어떤 것들이 있는지 연구해보세요.
=> 

 


Grafana

1. Prometheus 에서 권장하는 시각화 도구
2. 데이터를 그래프, 표, 지도, 대시보드 등으로 표현 가능
3. 경고 알림 지원
     => 데이터 소스에서 가져온 데이터를 기반으로 경고 조건 설정
     => 새당 조건 추우족 시 알림 전송
4. 사용이 간편하고 다양한 플러그인 및 템플릿이 존재하여 개발자나 운영자가 쉽게 대시보드를 작성할 수 있음

 

 

Prometheus Operator를 이용하여 설치 (전 체크사항)

1. 도커 실행 및 노드 생성

  - 여러 노드 생성 시 첫번째는 master, 나머지 두개의 노드는 worker 노드로 구성됨
  - 여러 개의 노드 구성 시 실제 실행되는 어플리케이션을 배치하며, 마스터 노드는 클러스터 관리 그 자체에 집중

% open -a Docker   // Docekr 실행

% minikube start --nodes=3 

/*

1. 여러 노드 생성 시 첫번째는 master, 나머지 두개의 노드는 worker 노드로 구성됨
2. 여러 개의 노드 구성 시 실제 실행되는 어플리케이션을 배치하며, 마스터 노드는 클러스터 관리 그 자체에 집중함

*/

 

2. minikube 클러스터 상태 확인

* minikube status 명령어를 통하여 확인할 수 있는 정보

host : Minikube VM 이 실행 중인지 여부를 나타내는 상태 (Running / Stopped)
kubelet : 노드에서 실행중인 Kubernetes 컴포넌트인 kubelet이 실행 중인지 여부를 나타내는 상태 (Running / Stopped)
                => API 서버와 통신 중일 경우 communicating with API 출력
apiserver : 마스터에서 실행중인 Kubernetes 컴포넌트인 API 서버가 실행 중인지 여부를 나타내는 상태 (Running / Stopped)
kubeconfig : 현재 활성화된 Kubernetes 설정 파일 경로를 나타내는 상태 (Configured 가 됨)
% minikube status

// 응답
type: Control Plane
host: Running
kubelet: Running
apiserver: Running
kubeconfig: Configured

 

 

Prometheus Operator Quick Start

참고링크

https://prometheus-operator.dev/docs/prologue/quick-start/

 

1. kube-prometheus 클론

% git clone https://github.com/prometheus-operator/kube-prometheus.git

 

2. kube-prometheus 배포

- CRD = Custom Resource Definitions

   => 사용자 정의 리소스 유형 정의

   => kubernates API에 새로운 리소스 유형 추가 가능

   => CRD 를 사용하면 YAML 파일 형식으로 새로운 리소스 유형 정의 가능

   => API 및 컨트롤러를 쉽게 추가 할 수 있지만 복잡성이 증가할 수 있다. - API와 컨트롤러를 작성해야 하기 때문

   => 충분한 테스트 및 검증 필요

# STEP 1
kubectl create -f manifests/setup
// 네임스페이스와 CRD를 생성하고 나머지 리소스 생성 전 사용할 수 있을때 까지 대기
// manifests/setup 내 워크로드 전부 실행

# STEP 2
until kubectl get servicemonitors --all-namespaces ; do date; sleep 1; echo ""; done
// servicemonitors CRD 가 생성될 때 까지 대기 - 모든 서비스 모니터가 구동될 때 까지 대기
// No resources found 응답 시 이 컨텍스트에서의 성공을 의미함


# STEP 3
kubectl create -f manifests/
// manifest 내 워크로드 전부 실행

 

 

3. Prometheus Operator 관련 서비스 및 워크로드 실행 전 까지 대기

 

 

4. 로컬 호스트에 포트포워딩 노출

- 프로메테우스 노출

  => http://localhost:9090 로 접속해서 프로메테우스에 접속할 수 있음

% kubectl --namespace monitoring port-forward svc/prometheus-k8s 9090

 

 

- 그라파나 노출

   => http://localhost:3000 로 접속해서 그라파나에 접속할 수 있습니다. (초기 사용자 이름과 비밀번호는 admin/admin 입니다)

반응형