본문 바로가기
서비스 머니터링

Devops Day 62 (6.2) 서비스 모니터링_Prometheus + Grafana

by Jackykim 2023. 6. 4.

Prometheus 모니터링 시스템
프로메테우스는 오픈소스 모니터링/알림 시스템입니다. 프로메테우스는 쿠버네티스, 노드, 프로메테우스 자체를 모니터링할 수 있습니다. CNCF에서 프로메테우스 역시 관리하고 있으며, 이 두 도구를 비롯해 시각화를 담당하는 Grafana와 함께 세 도구 조합은 정석적으로 널리 사용되고 있습니다.

프로메테우스 구성 요소

·         프로메테우스는 시계열(time series) 데이터를 저장합니다.

·         프로메테우스 서버는 다양한 exporter로부터 각 대상의 메트릭을 pull하여 주기적으로 가져오는 모니터링 시스템입니다.

o    예를 들어, 쿠버네티스 관련 메트릭을 가져오고 싶다면 쿠버네티스 exporter를, mongoDB 관련 메트릭을 가져오고 싶다면, mongodb exporter를 사용하면 됩니다.

·         Alert manager는 경고 및 알람을 담당합니다.

·         사용자가 데이터를 질의할 수 있는 Web UI가 존재합니다.

o    이때 질의 언어로는 PromQL(Prometheus Query Language)을 사용합니다.

 

프로메테우스 아키텍처

 

프로메테우스는 언제 사용하는가?

프로메테우스는 순수한 숫자 시계열을 기록하는 데에 잘 작동합니다. 기계 중심의 모니터링과 높은 동적 서비스 아키텍처의 모니터링에 모두 적합합니다. 마이크로서비스 환경에서는 다차원 데이터 수집과 질의를 지원하는 데 특히 강점을 가지고 있습니다. 프로메테우스는 신뢰성을 위해 설계되었으며, 장애 발생 시 빠르게 문제를 진단할 수 있는 시스템으로 사용됩니다. 각 프로메테우스 서버는 독립적이며, 네트워크 저장소나 다른 원격 서비스에 의존하지 않습니다.

 

사용하면 안될 때
프로메테우스는 신뢰성을 중요시합니다. 시스템의 통계 정보를 항상 확인할 수 있으며, 장애 조건에서도 조회할 수 있습니다. 요청 당 청구와 같이 100% 정확성이 필요한 경우, 프로메테우스는 수집된 데이터가 충분히 자세하고 완전하지 않을 가능성이 있으므로 좋은 선택이 되지 않을 수 있습니다. 이러한 경우, 청구에 대한 데이터 수집과 분석을 위해 다른 시스템을 사용하고, 프로메테우스를 나머지 모니터링에 사용하는 것이 가장 좋습니다.

 

쿠버네티스 Exporter
프로메테우스에서 쿠버네티스 관련 메트릭을 가져올 수 있는 쿠버네티스 exporter가 존재합니다. 이때 프로메테우스 exporter는 Kube API를 사용합니다.


쿠버네티스에서 프로메테우스와 그라파나, 그리고 슬랙과 같은 메신저와의 연동은 보통 다음 그림과 같이 구성합니다.

 

Grafana
Grafana 오픈 소스 소프트웨어는 저장된 메트릭, 로그 및 추적 데이터를 쿼리하고 시각화하며 경고를 설정하고 탐색할 수 있게 해줍니다. Grafana OSS는 시계열 데이터베이스(TSDB) 데이터를 통찰력있는 그래프와 시각화로 변환하는 도구를 제공합니다. Grafana OSS 플러그인 프레임워크를 통해 NoSQL/SQL 데이터베이스, Jira 또는 ServiceNow와 같은 티켓 처리 도구, GitLab과 같은 CI/CD 도구와 같은 다른 데이터 소스에 연결할 수도 있습니다.

 

메트릭, 로그 및 추적 데이터 탐색

임시 쿼리와 동적 드릴다운을 통해 데이터를 탐색하세요. 분할 보기를 사용하여 서로 다른 시간 범위, 쿼리 및 데이터 소스를 나란히 비교하고 탐색하세요.

 

알림

Grafana 경고를 사용하고 있다면 PagerDuty, SMS, 이메일, VictorOps, OpsGenie 또는 Slack과 같은 여러 경고 알림 도구를 통해 알림을 받을 수 있습니다.

 

대시보드 변수

템플릿 변수를 사용하면 다양한 용도에 재사용할 수 있는 대시보드를 만들 수 있습니다. 이러한 템플릿으로 값이 하드코딩되지 않으므로, 예를 들어 프로덕션 서버와 테스트 서버가 있다면 동일한 대시보드를 두 서버에 모두 사용할 수 있습니다.

 

인증

Grafana는 LDAP 및 OAuth와 같은 다양한 인증 방법을 지원하며 사용자를 조직에 매핑할 수 있습니다.

 

자동 구성

단일 대시보드를 만드는 데 클릭, 드래그 및 드롭하는 것은 쉽지만, 여러 대시보드가 필요한 고급 사용자는 스크립트를 사용하여 설정을 자동화하고자 할 것입니다. Grafana에서는 모든 것을 스크립트로 처리할 수 있습니다.

예를 들어, 새로운 Kubernetes 클러스터를 생성하고자 할 때, 서버, IP 주소 및 사전 설정된 데이터 소스가 있는 스크립트를 사용하여 Grafana를 자동으로 생성할 수 있으며, 사용자가 이를 변경할 수 없도록 잠금 설정할 수 있습니다.

 

Prometheus Operator를 이용하여 설치하기
minikube를 이용해 클러스터를 생성합니다. --nodes 옵션을 이용하여 여러 개의 노드를 만들 수 있습니다. minikube start --nodes=3
여러 개의 노드를 만들면, 첫 번째는 master, 나머지 두 개의 노드는 worker 노드로 구성됩니다. 여러 개의 노드를 구성할 경우, 워커 노드에는 실제로 실행되는 애플리케이션을 배치하며, 마스터 노드는 클러스터 관리 그 자체에 집중하게 합니다.
Q. 모니터링의 관점에서 워커 노드에 애플리케이션을 별도로 배치하는 것이 유리할까요
?

 

실습 tip
Q. 노드를 여러 개 만들었더니 너무 느려졌어요.
A. 이 실습에서 노드를 굳이 여러 개 만들 필요는 없습니다. 하나만 만들어도 괜찮아요.

Q. 윈도우 사용자인데, 너무 느려요.
A. 윈도우에서는 WSL 상에서 쿠버네티스를 설치하지 말고, 윈도우용 minikube를 설치해서 명령 프롬프트 또는 PowerShell에서 kubectl 명령을 이용하세요. WSL의 경우 가상화 수준이 하나 더 추가되면서 퍼포먼스가 저하될 수 있습니다.

 

Prometheus Operator Quick Start
1. kube-prometheus를 클론하세요.
git clone https://github.com/prometheus-operator/kube-prometheus.git

2. 해당 디렉토리로 이동하여 kube-prometheus를 배포하세요.

# STEP 1

kubectl create -f manifests/setup

# STEP 2

until kubectl get servicemonitors --all-namespaces ; do date; sleep 1; echo ""; done

# STEP 3

kubectl create -f manifests/
a. manifests/setup 안의 워크로드를 전부 실행합니다.

b. 일단 모든 모든 서비스 모니터(servicemonitor)가 구동될 때까지 기다립니다.

c. manifest/ 안의 워크로드를 전부 실행합니다.

 

3. Prometheus Operator 관련 서비스 및 워크로드가 실행되기 전까지 기다립니다.

 

4. 관련 서비스를 로컬호스트에 포트 포워딩으로 노출할 수 있습니다.

프로메테우스 노출 : kubectl --namespace monitoring port-forward svc/prometheus-k8s 9090
http://localhost:9090로 접속해서 프로메테우스에 접속할 수 있습니다.

b. 그라파나 노출 : kubectl --namespace monitoring port-forward svc/grafana 3000
http://localhost:3000으로 접속해서 그라파나에 접속할 수 있습니다. (초기 사용자 이름과 비밀번호는 admin/admin입니다)

5. Kube-prometheus 제거
kubectl delete --ignore-not-found=true -f manifests/ -f manifests/setup