Kubernetes/Kubernetes Basics

📌 Kubernetes에서 Observability 구축: OpenTelemetry, Jaeger 사용법

ygtoken 2025. 3. 4. 12:14
728x90

 

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 운영을 보다 체계적으로 관리할 수 있습니다! 🚀

 

 

728x90