1️⃣ Kubernetes에서 Observability(가시성)이 중요한 이유?
운영 환경에서 애플리케이션 성능을 모니터링하고 문제를 빠르게 파악하려면 **Observability(가시성)**이 필수입니다.
하지만 단순한 로그 & 메트릭만으로는 전체적인 요청 흐름을 파악하기 어렵습니다.
✅ Observability를 구성하면 다음과 같은 장점이 있습니다.
✔ 애플리케이션 성능 모니터링 가능 → 메트릭을 수집하여 리소스 사용량 분석
✔ 분산 트레이싱(Distributed Tracing) 제공 → 마이크로서비스 간 요청 추적 가능
✔ 문제 발생 시 원인 분석 속도 향상 → 로그 & 트레이싱 데이터를 통해 빠른 디버깅
이 글에서는 OpenTelemetry + Jaeger를 활용하여 Kubernetes Observability를 구축하는 방법을 다룹니다.
2️⃣ Kubernetes에서 Observability를 구성하는 주요 요소
📌 Observability는 다음 3가지 핵심 요소로 구성됩니다.
요소설명대표 도구
Metrics (메트릭) | 애플리케이션 & 인프라 성능 측정 | Prometheus, OpenTelemetry |
Logging (로그) | 애플리케이션 이벤트 기록 | Loki, Fluentd |
Tracing (트레이싱) | 서비스 간 요청 흐름 추적 | OpenTelemetry, Jaeger |
✅ Observability는 위 3가지 요소를 함께 활용해야 효과적입니다.
3️⃣ OpenTelemetry란?
📌 OpenTelemetry는 애플리케이션의 메트릭, 로그, 트레이싱을 수집하는 오픈소스 Observability 프레임워크입니다.
📌 Prometheus, Grafana, Jaeger 등 다양한 Observability 도구와 연동 가능
📌 OpenTelemetry 아키텍처
애플리케이션 → OpenTelemetry Collector → 메트릭/로그/트레이싱 전송
⬇
Prometheus (메트릭) Loki (로그) Jaeger (트레이싱)
✅ 이제 Kubernetes에서 OpenTelemetry를 설치하고 활용하는 방법을 살펴보겠습니다.
4️⃣ OpenTelemetry 설치 및 설정하기
✅ Step 1: OpenTelemetry Collector 설치
📌 Helm을 사용하여 OpenTelemetry Collector를 설치합니다.
helm repo add open-telemetry https://open-telemetry.github.io/opentelemetry-helm-charts
helm repo update
helm install otel open-telemetry/opentelemetry-collector
📌 Collector 배포 확인
kubectl get pods
✅ OpenTelemetry Collector가 정상적으로 실행되었는지 확인!
✅ Step 2: OpenTelemetry Collector 설정 (otel-collector.yaml)
📌 Collector가 Prometheus, Jaeger, Loki와 연동되도록 설정합니다.
apiVersion: v1
kind: ConfigMap
metadata:
name: otel-collector-config
data:
otel-collector-config.yaml: |
receivers:
otlp:
protocols:
grpc:
http:
exporters:
prometheus:
endpoint: "0.0.0.0:8889" # Prometheus 메트릭 노출
logging:
loglevel: debug
jaeger:
endpoint: "jaeger-collector.default.svc.cluster.local:14250" # Jaeger로 트레이싱 데이터 전송
service:
pipelines:
traces:
receivers: [otlp]
processors: []
exporters: [jaeger]
metrics:
receivers: [otlp]
processors: []
exporters: [prometheus]
📌 적용 명령어
kubectl apply -f otel-collector.yaml
✅ 이제 OpenTelemetry Collector가 메트릭 & 트레이싱 데이터를 수집하도록 설정됨!
5️⃣ Jaeger를 활용한 트레이싱(Tracing) 구축
📌 Jaeger는 OpenTelemetry의 트레이싱 데이터를 시각화하는 도구입니다.
📌 서비스 간 요청 흐름을 분석하고 성능을 최적화하는 데 사용됩니다.
✅ Step 1: Jaeger 설치
📌 Helm으로 Jaeger 배포
helm repo add jaegertracing https://jaegertracing.github.io/helm-charts
helm repo update
helm install jaeger jaegertracing/jaeger
📌 Jaeger UI 접속
kubectl port-forward svc/jaeger-query 16686:16686
✅ 브라우저에서 http://localhost:16686 접속하여 트레이싱 데이터 확인 가능!
✅ Step 2: OpenTelemetry SDK 적용 (Python Flask 예제)
📌 애플리케이션에서 OpenTelemetry를 사용하여 트레이싱 데이터를 수집하도록 설정
📌 app.py (Flask + OpenTelemetry)
from flask import Flask
from opentelemetry.instrumentation.flask import FlaskInstrumentor
from opentelemetry.sdk.trace.export import BatchSpanProcessor
from opentelemetry.exporter.otlp.proto.grpc.trace_exporter import OTLPSpanExporter
from opentelemetry.sdk.trace import TracerProvider
app = Flask(__name__)
FlaskInstrumentor().instrument_app(app)
# OpenTelemetry 트레이서 설정
tracer_provider = TracerProvider()
tracer_provider.add_span_processor(BatchSpanProcessor(OTLPSpanExporter(endpoint="otel-collector.default.svc.cluster.local:4317")))
@app.route("/")
def hello():
return "Hello, OpenTelemetry!"
if __name__ == "__main__":
app.run(host="0.0.0.0", port=5000)
📌 애플리케이션 실행 후 Jaeger에서 트레이싱 데이터 확인 가능
✅ 서비스 간 요청 흐름을 추적하고 성능을 분석할 수 있음! 🚀
6️⃣ Kubernetes Observability 구축을 위한 최적화 전략
📌 Kubernetes Observability를 구성할 때 다음과 같은 최적화 전략을 적용할 수 있습니다.
전략설명
메트릭 최적화 | Prometheus에서 불필요한 메트릭 수집 방지 |
로그 관리 | Loki를 활용하여 중앙 집중식 로그 관리 |
트레이싱 샘플링 | Jaeger에서 특정 요청만 샘플링하여 리소스 사용 최적화 |
Grafana 연동 | Grafana에서 메트릭, 로그, 트레이싱 데이터 시각화 |
✅ Observability 최적화를 통해 Kubernetes 운영의 안정성을 높일 수 있습니다!
📌 결론: Kubernetes Observability 구축 요약
✔ OpenTelemetry를 활용하여 메트릭, 로그, 트레이싱을 통합 관리 가능
✔ Jaeger를 사용하여 마이크로서비스 간 요청 흐름을 추적 가능
✔ Helm을 활용하여 Observability 스택을 쉽게 배포 가능
✔ Prometheus + Loki + Jaeger + Grafana를 조합하여 강력한 모니터링 시스템 구축 가능
🔥 Observability를 구축하면 Kubernetes 운영을 보다 체계적으로 관리할 수 있습니다! 🚀
'Kubernetes > Kubernetes Basics' 카테고리의 다른 글
📌 Kubernetes에서 서버리스(Serverless) 운영: Knative & OpenFaaS 비교 (0) | 2025.03.04 |
---|---|
📌 Kubernetes에서 API Gateway 운영: Istio vs. Kong vs. Nginx (0) | 2025.03.04 |
📌 Kubernetes CI/CD 파이프라인 최적화 (GitHub Actions, ArgoCD 심화) (0) | 2025.03.04 |
📌 Kubernetes Helm 활용: 효율적인 애플리케이션 배포 전략 (0) | 2025.03.04 |
📌 Kubernetes 이벤트 기반 자동 확장: KEDA 사용하기 (0) | 2025.03.04 |