쿠버네티스 모니터링 도구 소개
서론
쿠버네티스(Kubernetes)는 컨테이너화된 애플리케이션의 배포, 확장 및 관리를 자동화하는 데 매우 유용한 플랫폼입니다. 하지만, 쿠버네티스 클러스터와 애플리케이션의 상태를 모니터링하고 문제를 조기에 감지하기 위해서는 강력한 모니터링 도구가 필요합니다. 이번 포스팅에서는 Prometheus와 Grafana를 중심으로 쿠버네티스 모니터링 도구의 설정과 사용 방법을 초보자도 이해할 수 있도록 자세히 설명합니다.
본론
Prometheus 소개
개념
Prometheus는 오픈 소스 모니터링 및 경고 도구입니다. 주로 시계열 데이터(time series data)를 수집하고 쿼리하여 시스템 성능을 모니터링하는 데 사용됩니다. Prometheus는 쿠버네티스와 긴밀하게 통합되어 클러스터의 메트릭 데이터를 수집하고 분석할 수 있습니다.
주요 기능
- 멀티 디멘셔널 데이터 모델: 레이블을 사용하여 시계열 데이터를 분류하고 쿼리할 수 있습니다.
- 강력한 쿼리 언어: PromQL(Prometheus Query Language)을 사용하여 복잡한 쿼리를 작성할 수 있습니다.
- 자동화된 서비스 디스커버리: 쿠버네티스, Consul, Etcd 등을 통해 서비스 디스커버리를 자동화합니다.
- 경고: Alertmanager와 통합하여 경고를 설정하고 관리할 수 있습니다.
Grafana 소개
개념
Grafana는 오픈 소스 데이터 시각화 및 모니터링 도구입니다. 다양한 데이터 소스에서 데이터를 가져와 대시보드를 생성하고, 시각적으로 표현할 수 있습니다. Grafana는 Prometheus와 잘 통합되어 쿠버네티스 메트릭 데이터를 시각화하는 데 많이 사용됩니다.
주요 기능
- 대시보드: 다양한 형태의 시각화 요소를 사용하여 대시보드를 생성할 수 있습니다.
- 플러그인: 다양한 데이터 소스 플러그인을 지원하여 확장성을 제공합니다.
- 알림: 특정 조건을 만족하는 경우 알림을 설정할 수 있습니다.
- 유연한 쿼리 편집기: 데이터를 쉽게 쿼리하고 시각화할 수 있는 강력한 쿼리 편집기를 제공합니다.
Prometheus와 Grafana 설정
1. Prometheus 설치
쿠버네티스 클러스터에 Prometheus를 설치하기 위해 다음 명령어를 사용합니다.
kubectl apply -f https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/main/bundle.yaml
이 명령어는 Prometheus Operator를 사용하여 Prometheus를 설치합니다. Prometheus Operator는 Prometheus 인스턴스의 배포 및 관리를 자동화하는 도구입니다.
2. Grafana 설치
Grafana를 설치하기 위해 다음 명령어를 사용합니다.
kubectl apply -f https://raw.githubusercontent.com/grafana/grafana/main/deploy/kubernetes/grafana-service.yaml
이 명령어는 Grafana 인스턴스를 쿠버네티스 클러스터에 배포합니다.
3. Prometheus 설정
Prometheus 설정 파일을 작성하여 Prometheus가 쿠버네티스 메트릭을 수집하도록 구성합니다. 다음은 Prometheus 설정 파일 예시입니다.
apiVersion: monitoring.coreos.com/v1
kind: Prometheus
metadata:
name: prometheus
namespace: monitoring
spec:
serviceAccountName: prometheus
serviceMonitorSelector:
matchLabels:
team: frontend
resources:
requests:
memory: 400Mi
ruleSelector:
matchLabels:
role: prometheus-rulefiles
alerting:
alertmanagers:
- namespace: monitoring
name: alertmanager
port: web
이 YAML 파일을 사용하여 Prometheus를 설정합니다.
kubectl apply -f prometheus-config.yaml
4. Grafana 설정
Grafana 대시보드를 생성하고 Prometheus를 데이터 소스로 추가합니다.
- Grafana 웹 UI에 접속합니다. 기본 포트는 3000입니다.
kubectl port-forward svc/grafana 3000:3000
웹 브라우저에서 http://localhost:3000
에 접속합니다.
- Grafana에 로그인합니다. 기본 사용자명은
admin
이고, 기본 비밀번호는admin
입니다. - 데이터 소스로 Prometheus를 추가합니다.
- 왼쪽 사이드바에서 "Configuration" → "Data Sources"로 이동합니다.
- "Add data source" 버튼을 클릭합니다.
- "Prometheus"를 선택합니다.
- URL에 Prometheus 서버 주소를 입력합니다. 예:
http://prometheus.monitoring.svc.cluster.local:9090
- "Save & Test" 버튼을 클릭하여 설정을 저장하고 연결을 테스트합니다.
- 대시보드를 생성합니다.
- 왼쪽 사이드바에서 "Create" → "Dashboard"로 이동합니다.
- "Add new panel" 버튼을 클릭하여 새로운 패널을 추가합니다.
- 패널 설정에서 쿼리를 입력하여 원하는 메트릭을 시각화합니다.
Prometheus와 Grafana의 사용 예
애플리케이션 모니터링
Prometheus와 Grafana를 사용하여 애플리케이션의 성능을 모니터링할 수 있습니다. 예를 들어, HTTP 요청 수, 응답 시간, 에러율 등의 메트릭을 수집하고 시각화할 수 있습니다.
# HTTP 요청 수
rate(http_requests_total[1m])
# 평균 응답 시간
rate(http_request_duration_seconds_sum[1m]) / rate(http_request_duration_seconds_count[1m])
# 에러율
rate(http_requests_total{status=~"5.."}[1m]) / rate(http_requests_total[1m])
클러스터 리소스 모니터링
쿠버네티스 클러스터의 리소스 사용량을 모니터링할 수 있습니다. 예를 들어, CPU 및 메모리 사용량, 노드 상태, 파드 상태 등의 메트릭을 수집하고 시각화할 수 있습니다.
# 노드의 CPU 사용량
sum(rate(node_cpu_seconds_total{mode!="idle"}[1m])) by (instance)
# 노드의 메모리 사용량
sum(node_memory_MemTotal_bytes - node_memory_MemAvailable_bytes) by (instance)
# 파드의 CPU 사용량
sum(rate(container_cpu_usage_seconds_total[1m])) by (pod)
# 파드의 메모리 사용량
sum(container_memory_usage_bytes) by (pod)
알림 설정
Prometheus와 Alertmanager를 사용하여 특정 조건을 만족할 때 알림을 설정할 수 있습니다. 예를 들어, CPU 사용률이 일정 수준을 초과할 때 알림을 보낼 수 있습니다.
- Alertmanager 설치
kubectl apply -f https://raw.githubusercontent.com/prometheus/alertmanager/main/alertmanager.yaml
- 알림 규칙 설정
Prometheus 설정 파일에 알림 규칙을 추가합니다.
groups:
- name: example
rules:
- alert: HighCPUUsage
expr: sum(rate(container_cpu_usage_seconds_total[1m])) by (pod) > 0.8
for: 1m
labels:
severity: warning
annotations:
summary: "High CPU usage detected"
description: "Pod {{ $labels.pod }} is using high CPU"
이 YAML 파일을 사용하여 알림 규칙을 설정합니다.
kubectl apply -f alert-rules.yaml
결론
쿠버네티스 모니터링 도구인 Prometheus와 Grafana는 클러스터와 애플리케이션의 상태를 효율적으로 모니터링하고 문제를 조기에 감지하는 데 중요한 역할을 합니다. 이번 포스팅에서는 Prometheus와 Grafana의 개념, 설치 방법, 설정 방법, 사용 예를 자세히 설명했습니다. 이를 통해 쿠버네티스 클러스터에서 효과적으로 모니터링을 설정하고 관리할 수 있기를 바랍니다.