Dev/DevOps

Prometheus & Grafana

TrendPilot 2025. 2. 19. 15:33

현대 소프트웨어 인프라의 복잡성 증가에 따라 시스템 모니터링과 데이터 시각화의 중요성이 부각되고, 한 눈에 들어오는 가시적인 그래프 등으로 변화 추이와 장애 확인이 중요해졌습니다.

 

이를 보다 쉽게 관리하기 위해 DevOps 오픈소스 도구인 Prometheus 와 Grafana 를 대중적으로 사용하고 있습니다.

 

Prometheus 와 Grafana 는 분산 환경에서 metric 수집과 분석, 복잡한 데이터 패턴의 시각화 기능을 사용하여 Kubernetes 환경 뿐만 아니라 IoT 장치의 실시간 성능 분석 등의 다양한 영역에서 사용하며, 모니터링 스택의 표준 아키텍처로 자리 잡았습니다.

prometheus

시계열(time-series) 데이터를 수집하고 분석하는 데 특화된 Prometheus 는 CNCF(Cloud Native Computing Foundation) 에서 관리하는 오픈 소스 모니터링 및 경고 도구입니다.

 

*시계열 데이터, 시간 순서에 따라 관측된 데이터

 

Prometheus 의 설계 철학은 Pull 기반 데이터 수집 모델에 기반을 두고 있으며, 모니터링 대상 시스템에 설치된 Exporter 가 HTTP endpoint 를 통해 Metric 을 노출하면, 주기적으로 데이터를 수집하는 방식입니다.

 

애플리케이션, 인프라, 데이터베이스 등의 다양한 소스로부터 metric 을 직접 데이터를 수집하고, PromQL 을 사용하여 수집된 쿼리를 분석할 수 있으며, 특정 조건이 충족될 경우 경고 알람을 전송할 수 있습니다.

Grafana

Prometheus 와 같은 데이터 소스로부터 수집된 정보를 시각화하여 가시적인 대시보드를 제공합니다.

 

Prometheus 뿐만 아니라 Elasticsearch 등 다른 여러 데이터 소스를 통합하여 사용할 수 있고, 사용자가 원하는 방식으로 그래프, 차트, 테이블을 구성할 수 있습니다. Prometheus 와 같이 임계값을 초과하면 알람을 보내도록 설정할 수 있습니다.

왜 Prometheus 와 Grafana 조합을 사용해야 하나요?

정답은 없습니다. 규칙도 없습니다.

 

프로메테우스는 데이터 수집 및 분석 기능이 뛰어나지만, 시각화 기능이 제한적이고, 그라파나는 데이터를 효과적으로 표한할 수 있는 기능이 뛰어나기에 두 오픈소스를 같이 하면 보다 인프라와 애플리케이션을 효과적으로 모니터링하고 운영할 수 있습니다.

설치

helm 으로 설치 진행

1.helm 차트 추가 및 업데이트를 진행합니다.

helm repo add prometheus-community https://prometheus-community.github.io/helm-charts 
helm repo add grafana https://grafana.github.io/helm-charts 
helm repo update

2.Prometheus 스택 배포

*prometheus 스택이란 모니터링, 로그 수집, 시각화 등을 포함한 여러 도구들입니다. (Alertmanager, Node Exporter 등 ...)

helm install prometheus prometheus-community/kube-prometheus-stack --namespace monitoring --create-namespace

3. 설치 리소스 확인

kubectl get all -n monitoring

4. Grafana 접속

4-1. service type 을 변경해줍니다.

kubectl patch service/prometheus-grafana -n monitoring -p '{"spec":{"type":"NodePort"}}'

4-2. Grafana Service의 service type 변경 확인

kubectl get service -n monitoring

4-3. NodePort 로 변환되면서 부여받은 31813 포트로 대시보드 접속

4-4. 초기 계정

Password 조회 명령

kubectl get secret -n monitoring prometheus-grafana -o jsonpath="{.data.admin-password}" | base64 --decode

ID : admin

PW : prom-operator

5. Prometheus 접속

5-1. Prometheus Service type 변경

kubectl patch service/prometheus-kube-prometheus-prometheus -n monitoring -p '{"spec":{"type":"NodePort"}}'

5-2. Prometheus Service의 service type 변경 확인

kubectl get service -n monitoring

5-3. 대시보드 확인

 

사용

1. Grafana 대시보드 생성

1-1. Dashboards - New - New dashboard

1-2. +Add visualization

1-3. 앞서 설치해둔 Prometheus 확인

1-4. Metric 선택 - Save dashboard

본문에서는 :node_memory_MemAvailable_bytes:sum 옵션으로 진행합니다.

 

파드별 CPU 사용량, 파드별 메모리 사용량, 전체 파드 갯수, 노드 갯수, 에러 비율 등 많은 옵션들을 확인/사용 가능합니다.

1-5. Title 입력 후 Save

1-6. 적용 완료 화면

 

2. Prometheus 쿼리 조회

2-1. 노드 전체 CPU 사용률

100 - (avg by(instance) (rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100)

2-2. 노드 전체 메모리 사용률

100 * (1 - (node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes))

2-3. Pod CPU 사용량 조회

sum(rate(container_cpu_usage_seconds_total{image!=""}[5m])) by (pod)

2-4. pod 메모리 사용량 조회

sum(container_memory_usage_bytes{image!=""}) by (pod)

2-5. 네트워크 트래픽 조회

sum(rate(node_network_transmit_bytes_total[5m])) by (instance)

2-6. 파드 재시작 횟수 조회

sum(kube_pod_container_status_restarts_total) by (pod)

2-7. HTTP 요청 수

sum(rate(http_requests_total[5m])) by (method, status)

 

감사합니다.