Kubernetes 모니터링 with Grafana & Prometheus: 단계별 가이드
Kubernetes 모니터링 with Grafana & Prometheus: 단계별 가이드
Kubernetes는 현대 애플리케이션 배포의 기반이 되었지만, 동적이고 분산된 특성으로 인해 포괄적인 관측 가능성은 운영 성공을 위한 필수 조건입니다. 노드의 상태, 파드의 성능, 클러스터의 상태를 이해해야 안정성을 보장하고 비용이 많이 드는 다운타임을 방지할 수 있습니다. 이 가이드는 Grafana와 Prometheus로 Kubernetes를 모니터링하는 방법을 마스터하고, 원시 메트릭을 실행 가능한 인사이트로 변환하여 인프라를 사전에 관리할 수 있도록 하는 확실한 단계별 경로를 제공합니다.
배우게 될 내용
이 가이드를 마치면 업계 표준인 kube-prometheus-stack을 사용하여 Kubernetes 클러스터에 완전한 프로덕션 등급 모니터링 스택을 배포하는 방법을 이해하게 됩니다. Grafana를 Prometheus에 연결하고, 사전 구축된 대시보드를 가져와 즉시 가시성을 확보하며, 특정 요구 사항에 맞게 알림과 시각화를 사용자 정의하는 명확한 계획을 세울 수 있습니다. 가장 중요한 핵심은 kube-prometheus-stack Helm 차트가 풀스택 Kubernetes 모니터링을 달성하는 가장 빠르고 신뢰할 수 있는 방법이라는 점입니다.
Kubernetes를 위한 업계 표준 모니터링 스택
Prometheus와 Grafana의 조합은 Kubernetes 모니터링의 사실상 표준입니다. 업계 데이터에 따르면, Kubernetes를 사용하는 조직의 약 75%가 관측 가능성 요구 사항을 위해 Prometheus와 Grafana를 채택하고 있습니다. 이는 단순한 트렌드가 아니라 이 오픈소스 툴킷의 강력함과 유연성을 증명하는 것입니다.
- Prometheus는 신뢰성과 확장성을 위해 설계된 CNCF(Cloud Native Computing Foundation) 졸업 프로젝트입니다. 지정된 간격으로 다양한 대상(예: 애플리케이션 파드 또는 Kubernetes 노드)에서 메트릭을 스크래핑하고 시계열 데이터베이스에 저장하는 방식으로 작동합니다. 그런 다음 PromQL(Prometheus Query Language)을 사용하여 이 데이터를 쿼리할 수 있으며, 이는 메트릭을 집계하고 분석하기 위한 강력하고 유연한 언어입니다.
- Grafana는 시각화 계층입니다. Prometheus와 완벽하게 통합되어 원시 스크래핑 데이터를 아름답고 실시간 대시보드와 차트로 변환합니다. 이러한 시각적 표현을 통해 추세를 파악하고, 이상 징후를 감지하며, 성능 문제를 한눈에 해결하는 것이 훨씬 쉬워집니다. Grafana는 다른 데이터 소스의 통합 UI 역할도 할 수 있지만, Kubernetes의 경우 Prometheus가 가장 중요한 파트너입니다.
설정을 위한 사전 요구 사항
시작하기 전에 다음 도구가 설치 및 구성되어 있는지 확인하세요. 이 가이드는 Minikube와 같은 로컬 개발 환경이든 클라우드의 프로덕션 클러스터든 작동 중인 Kubernetes 클러스터가 있다고 가정합니다.
- 실행 중인 Kubernetes 클러스터: 모니터링 스택을 배포할 클러스터가 필요합니다. 로컬 테스트의 경우 Minikube 또는 Kind가 완벽하게 작동합니다.
- Helm: Kubernetes 패키지 관리자는
kube-prometheus-stack을 배포하는 데 필수적입니다. 로컬 머신에 Helm v3.2+가 설치되어 있는지 확인하세요. - kubectl: Kubernetes 명령줄 도구가 클러스터와 통신하도록 구성되어 있어야 합니다.
단계별 배포: kube-prometheus-stack 사용하기
Kubernetes 모니터링을 위해 Prometheus와 Grafana를 배포하는 가장 효율적이고 권장되는 방법은 kube-prometheus-stack Helm 차트를 사용하는 것입니다. 이 차트는 Prometheus 커뮤니티에서 유지 관리하며 모든 필수 구성 요소를 단일하고 관리하기 쉬운 패키지로 번들링합니다. 여기에는 다음이 포함됩니다:
- Prometheus Operator: Prometheus 및 Alertmanager 인스턴스를 관리합니다.
- Prometheus: 핵심 메트릭 서버.
- Alertmanager: Prometheus에서 보낸 알림을 처리합니다.
- Grafana: 시각화 플랫폼.
- Node Exporter: Kubernetes 노드에서 노드 수준 메트릭(CPU, 메모리, 디스크)을 수집합니다.
- kube-state-metrics: 파드, 디플로이먼트, 서비스와 같은 Kubernetes 객체의 상태에 대한 메트릭을 생성합니다.
1. Prometheus 커뮤니티 Helm 리포지토리 추가
먼저 공식 Helm 리포지토리를 추가하고 업데이트하여 최신 차트 버전을 가져옵니다.
helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
helm repo update
2. 스택 설치
단일 Helm 명령으로 스택을 설치하고 다양한 매개변수로 사용자 정의할 수 있습니다. 이 예제는 monitoring 네임스페이스를 생성하고 Prometheus 및 Grafana 데이터에 대한 영구 스토리지를 활성화합니다.
helm install prometheus prometheus-community/kube-prometheus-stack \
--namespace monitoring \
--create-namespace \
--set grafana.service.type=NodePort \
--set grafana.service.nodePort=30094 \
--set grafana.adminPassword=admin \
--set prometheus.prometheusSpec.storageSpec.volumeClaimTemplate.spec.accessModes=["ReadWriteOnce"] \
--set prometheus.prometheusSpec.storageSpec.volumeClaimTemplate.spec.resources.requests.storage=50Gi \
--set prometheus.prometheusSpec.retention=30d
grafana.adminPassword=admin: Grafana의 관리자 비밀번호를 설정합니다. 프로덕션에서는 변경하세요.--set grafana.service.type=NodePort: 쉬운 액세스를 위해 NodePort를 통해 Grafana를 클러스터 외부에 노출합니다.prometheus.prometheusSpec.retention=30d: Prometheus 데이터 보존 기간을 30일로 설정하며, 이는 장기 추세 분석에 필수적입니다.
3. 설치 확인
monitoring 네임스페이스의 모든 파드가 실행 중인지 확인합니다.
kubectl get pods -n monitoring
출력에는 Grafana, Prometheus, Alertmanager, node-exporter, kube-state-metrics에 대한 여러 파드가 Running 상태로 표시되어야 합니다.
Grafana를 Prometheus 데이터 소스에 연결하기
kube-prometheus-stack Helm 차트는 종종 Grafana에서 Prometheus를 데이터 소스로 자동 구성합니다. 그러나 연결을 확인하는 것이 좋습니다.
Grafana 인터페이스 액세스
Grafana 웹 인터페이스에 액세스하려면 로컬 테스트의 경우 포트 포워딩을 사용하거나 프로덕션 사용의 경우 LoadBalancer 또는 Ingress로 서비스를 노출할 수 있습니다.
옵션 A: 포트 포워딩 (빠른 로컬 액세스용)
이는 대시보드에 임시로 액세스하는 가장 간단한 방법입니다.
kubectl port-forward -n monitoring svc/prometheus-grafana 3000:80
이제 브라우저를 열고 http://localhost:3000으로 이동하세요.
⚠️ 중요: 포트 포워딩은 로컬 테스트 및 개발에만 적합합니다. 영구적인 프로덕션 설정의 경우
LoadBalancer유형의 서비스 또는 Ingress 컨트롤러를 사용하여 Grafana를 노출해야 합니다.
옵션 B: LoadBalancer (클라우드 환경에 권장)
UpCloud, AWS 또는 GCP와 같은 클라우드 제공업체에서 실행 중인 경우 Grafana 서비스를 LoadBalancer로 간단히 패치할 수 있습니다.
kubectl patch svc prometheus-grafana -n monitoring -p '{"spec": {"type": "LoadBalancer"}}'
그런 다음 외부 IP 주소를 검색합니다:
kubectl get svc -n monitoring prometheus-grafana
http://<EXTERNAL-IP>:80에서 Grafana에 액세스하세요.
로그인
기본 자격 증명을 사용하여 로그인합니다:
- 사용자 이름:
admin - 비밀번호: 설치 중 설정한 비밀번호(예:
admin또는prom-operator)
로그인한 후 Configuration > Data Sources로 이동하여 Prometheus 데이터 소스가 존재하고 작동하는지 확인합니다. 해당 데이터 소스를 클릭하고 Test 버튼을 사용하여 연결을 확인하세요.
대시보드 구축: 사전 구축부터 사용자 정의까지
Grafana가 Prometheus에 연결되면 Kubernetes 메트릭 시각화를 시작할 수 있습니다. 귀중한 인사이트를 얻는 가장 빠른 방법은 Grafana 커뮤니티에서 사전 구축된 대시보드를 가져오는 것입니다.
사전 구축된 대시보드 가져오기
Grafana는 고유 ID를 사용하여 가져올 수 있는 방대한 커뮤니티 대시보드 라이브러리를 제공합니다.
- 사이드바에서
+아이콘 위로 마우스를 가져간 후 Import를 선택합니다. - "Find and import dashboards" 필드에 대시보드 ID를 입력합니다. 두 가지 강력 추천 대시보드는 다음과 같습니다:
- 1860: Node Exporter Full – CPU, 메모리, 디스크, 네트워크를 포함한 클러스터 노드에 대한 상세 메트릭을 제공합니다.
- 8588: Kubernetes Deployment Statefulset Daemonset – Kubernetes 워크로드에 대한 보기를 제공합니다.
- Load를 클릭한 다음 Prometheus 데이터 소스를 선택하고 Import를 클릭합니다.
이러한 대시보드는 PromQL 쿼리를 작성하지 않고도 클러스터 상태에 대한 즉각적이고 포괄적인 보기를 제공합니다.
PromQL을 사용한 사용자 정의 대시보드 생성
사전 구축된 대시보드는 훌륭한 시작점이지만, 특정 애플리케이션에 맞게 조정된 사용자 정의 보기를 만들어야 하는 경우가 많습니다. 이때 PromQL이 필요합니다.
새 대시보드를 만들려면 + 아이콘을 클릭하고 New Dashboard를 선택합니다. 그런 다음 Add visualization을 클릭하고 Prometheus 데이터 소스를 선택합니다.
다음은 Kubernetes 모니터링을 위한 몇 가지 필수 PromQL 쿼리입니다:
- 파드별 CPU 사용량:
sum(rate(container_cpu_usage_seconds_total{namespace!="kube-system", pod!=""}[5m])) by (pod) - 파드별 메모리 사용량:
sum(container_memory_working_set_bytes{namespace!="kube-system", pod!=""}) by (pod) / 1024 / 1024 / 1024 - 단계별 파드 상태:
이 쿼리는 Stat 패널에 적합하여 모든 파드가 실행 중인지 한눈에 확인할 수 있습니다.sum(kube_pod_status_phase) by (phase)
알림 및 알림 구성
모니터링은 전투의 절반에 불과합니다. 문제가 발생했을 때 알림을 받아야 합니다. 이것이 kube-prometheus-stack에 포함된 Alertmanager의 역할입니다.
알림 규칙 설정
Alertmanager를 구성하여 Slack, 이메일 또는 PagerDuty와 같은 다양한 채널로 알림을 보낼 수 있습니다. 일반적이고 효과적인 설정은 전용 Slack 채널로 알림을 보내는 것입니다.
- 먼저 Slack 작업 공간에서 인커밍 웹훅을 생성합니다.
- 그런 다음 Alertmanager 구성을 수정해야 합니다. Helm 업그레이드 중에 사용자 정의
values.yaml파일을 제공하거나 시크릿을 직접 편집하여 이 작업을 수행할 수 있습니다. values.yaml파일의alertmanager섹션을 Slack 웹훅 URL을 가리키는 경로와 수신자로 업데이트합니다:
alertmanager:
config:
route:
receiver: 'slack-notifications'
group_wait: 30s
group_interval: 5m
repeat_interval: 1h
receivers:
- name: 'slack-notifications'
slack_configs:
- api_url: 'https://hooks.slack.com/services/your/webhook/url'
send_resolved: true
title: '{{ .CommonLabels.alertname }} ({{ .Status | toUpper }})'
text: >-
{{ range .Alerts }}
*Alert:* {{ .Labels.alertname }}
*Severity:* {{ if .Labels.severity }}{{ .Labels.severity }}{{ else }}n/a{{ end }}
*Summary:* {{ if .Annotations.summary }}{{ .Annotations.summary }}{{ else }}n/a{{ end }}
*Description:* {{ if .Annotations.description }}{{ .Annotations.description }}{{ else }}n/a{{ end }}
{{- end }}
helm upgrade로 이러한 변경 사항을 적용하면 알림이 Slack 채널로 전송됩니다.
프로덕션 모니터링을 위한 모범 사례
프로덕션 환경에서 모니터링 스택이 강력하고 확장 가능하도록 하려면 다음 주요 모범 사례를 따르세요.
- 영구 스토리지 구성: 프로덕션에 배포할 때는 항상 Prometheus와 Grafana 모두에 대해 영구 스토리지를 활성화하세요. 이렇게 하면 메트릭 데이터와 대시보드 구성이 파드 재시작 및 클러스터 업그레이드에서도 유지됩니다.
kube-prometheus-stack에서는 Helm 차트의persistence및storageSpec설정으로 제어됩니다. - 쿼리 성능 최적화: 높은 카디널리티 쿼리는 대시보드와 Prometheus 자체의 속도를 저하시킬 수 있습니다. 성능을 유지하려면 항상 소스에서 PromQL 쿼리를 집계하세요. 예를 들어,
container_cpu_usage_seconds_total을 쿼리하는 대신 네임스페이스별로 집계합니다:sum by (namespace) (rate(container_cpu_usage_seconds_total[5m])). 이렇게 하면 Grafana가 처리해야 하는 데이터 양이 줄어듭니다. - 적절한 보존 기간 설정: 기본 Prometheus 보존 기간은 15일입니다. 필요에 따라 조정하세요. 더 긴 보존 기간(예: 30-60일)은 장기 추세 분석에 유용하지만 더 많은 스토리지 공간이 필요합니다.
- 코드로서의 구성 관리: 모니터링 요구 사항이 발전함에 따라 대시보드와 알림 규칙을 사용자 정의할 가능성이 높습니다. 대시보드를 JSON으로 내보내고 알림 규칙과 함께 버전 관리(예: Git)에 저장하세요. GitOps로 알려진 이 방법은 모니터링 설정을 재현 가능하고 감사 가능하게 만듭니다.
- 스크래핑 간격 조정: Prometheus의 기본 스크래핑 간격은 30초입니다. 중요하고 빠른 속도의 메트릭의 경우 더 자주 스크래핑할 수 있지만, 이는 Prometheus와 클러스터의 API 서버에 부하를 증가시킵니다. Helm 값에서 이러한 간격을 사용자 정의할 수 있습니다.
자주 묻는 질문
1. Grafana와 Prometheus로 Kubernetes를 모니터링하는 가장 쉬운 방법은 무엇인가요?
가장 쉽고 권장되는 방법은 kube-prometheus-stack Helm 차트를 사용하는 것입니다. Prometheus, Grafana, Alertmanager, node-exporter, kube-state-metrics를 단일 패키지로 번들링하며, 몇 가지 명령만으로 배포할 수 있습니다.
2. Kubernetes 모니터링에 kube-state-metrics를 사용하는 것이 필수인가요?
네, kube-state-metrics는 준비된 파드 수 또는 디플로이먼트 상태와 같은 Kubernetes 객체의 상태에 대한 메트릭을 생성하는 중요한 구성 요소입니다. 이것이 없으면 상위 수준 Kubernetes 리소스의 상태를 파악할 수 없습니다.
3. Kubernetes 대시보드 로딩 속도를 높이려면 어떻게 해야 하나요?
느린 대시보드는 종종 비효율적인 PromQL 쿼리로 인해 발생합니다. 주요 해결책은 쿼리를 집계하여 카디널리티를 줄이는 것입니다. 예를 들어, 모든 파드에 대한 데이터를 표시하는 대신 sum by (namespace) (rate(...))와 같은 쿼리를 사용하여 네임스페이스 수준에서 요약하세요.
4. Kubernetes 모니터링에서 알림을 받는 가장 좋은 방법은 무엇인가요? Prometheus는 Alertmanager와 함께 작동하며, 다양한 채널로 알림을 보낼 수 있습니다. 인기 있고 간단한 방법은 인커밍 웹훅을 통해 Alertmanager가 Slack 채널로 알림을 보내도록 구성하는 것입니다. 이는 실시간으로 실행 가능한 알림을 제공합니다.
5. 모든 노드에 Node Exporter를 수동으로 설치해야 하나요?
아니요. kube-prometheus-stack Helm 차트를 배포하면 자동으로 Node Exporter DaemonSet이 배포됩니다. 이렇게 하면 클러스터의 모든 노드에서 Node Exporter 파드가 실행되어 CPU, 메모리, 디스크 사용량과 같은 노드 수준 메트릭을 수동 개입 없이 Prometheus가 수집할 수 있습니다.
출처
- UpCloud Global. (2025). Monitoring on UpCloud with Prometheus: Part 3.
- Ubuntu Documentation. (2026). How to use Prometheus with Canonical Kubernetes.
- Sfeir Institute. (2026). Create Effective Grafana Dashboards for Kubernetes Monitoring.
- Ory. (2025). Monitoring.
- GitHub - AkramGalal. (2025). deploying-prometheus-grafana-K8s-using-helm.
- Go Packages. (2025). kube-prometheus.
- GitHub - dotdc. (2026). grafana-dashboards-kubernetes.
- Scaleway. (2025). Kubernetes Kapsule cluster monitoring with Prometheus & Grafana.
- Mirantis. (2025). How to Set Up Prometheus & Grafana in K8s with Alertmanager & Slack Alerts.
- Microsoft Learn. (2025). Using ConfigMap to customize Prometheus metric collection in Azure Monitor.
- GitHub - Rurutia1027. (2025). Hands-on-Lab.K8s-Monitoring.
— Editorial Team
아직 댓글이 없습니다.