Observability 퀴즈

지원 버전: Istio 1.28.0 EKS 버전: 1.34 (Kubernetes 1.28+) 마지막 업데이트: 2026년 2월 19일

이 퀴즈는 Istio의 관찰성 기능에 대한 이해도를 테스트합니다.

객관식 문제 (1-5번)

문제 1: Prometheus 메트릭

Istio에서 Prometheus가 기본적으로 수집하는 메트릭이 아닌 것은?

A. istio_requests_total (총 요청 수) B. istio_request_duration_milliseconds (요청 지연시간) C. istio_request_bytes (요청 크기) D. istio_pod_cpu_usage (Pod CPU 사용률)

chevron-right정답 및 해설hashtag

정답: D

Istio Envoy는 트래픽 관련 메트릭만 수집하며, Pod CPU 사용률은 Kubernetes 메트릭 서버cAdvisor가 수집합니다.

해설:

Istio가 수집하는 메트릭:

  1. istio_requests_total (A - O)

# 서비스별 총 요청 수
sum(rate(istio_requests_total[5m])) by (destination_service_name)
  1. istio_request_duration_milliseconds (B - O)

# P95 지연시간
histogram_quantile(0.95,
  sum(rate(istio_request_duration_milliseconds_bucket[5m])) by (le)
)
  1. istio_request_bytes (C - O)

# 요청 크기
sum(rate(istio_request_bytes_sum[5m])) by (destination_service_name)
  1. istio_pod_cpu_usage (D - X)

  • 이것은 Istio 메트릭이 아닙니다

  • Kubernetes 메트릭: container_cpu_usage_seconds_total

  • Prometheus에서 수집하려면 kube-state-metrics 필요

Istio 메트릭 카테고리:

카테고리
메트릭 예시
설명

Request

istio_requests_total

요청 수, 응답 코드

Duration

istio_request_duration_milliseconds

지연시간 분포

Size

istio_request_bytes, istio_response_bytes

트래픽 크기

TCP

istio_tcp_connections_opened_total

TCP 연결

Golden Signals 예제:

# 1. Latency (지연시간)
histogram_quantile(0.95,
  sum(rate(
    istio_request_duration_milliseconds_bucket{
      destination_service_name="reviews"
    }[5m]
  )) by (le)
)

# 2. Traffic (트래픽)
sum(rate(
  istio_requests_total{
    destination_service_name="reviews"
  }[5m]
))

# 3. Errors (에러율)
sum(rate(
  istio_requests_total{
    destination_service_name="reviews",
    response_code=~"5.."
  }[5m]
))
/
sum(rate(
  istio_requests_total{
    destination_service_name="reviews"
  }[5m]
))

# 4. Saturation (포화도) - Kubernetes 메트릭 사용
sum(rate(
  container_cpu_usage_seconds_total{
    pod=~"reviews-.*"
  }[5m]
))

메트릭 확인:

# Envoy Admin API로 메트릭 확인
kubectl exec <pod-name> -c istio-proxy -- \
  curl localhost:15000/stats/prometheus

# Prometheus에서 확인
kubectl port-forward -n istio-system svc/prometheus 9090:9090
# http://localhost:9090에서 쿼리

참고 자료:


문제 2: 분산 추적 (Distributed Tracing)

Istio에서 분산 추적을 위해 필요한 최소 구성은?

A. 애플리케이션이 trace ID를 생성해야 한다 B. 애플리케이션이 HTTP 헤더를 전파(propagate)해야 한다 C. 모든 서비스에 Jaeger 클라이언트를 설치해야 한다 D. Envoy가 자동으로 모든 것을 처리한다

chevron-right정답 및 해설hashtag

정답: B

Istio Envoy는 trace ID를 자동으로 생성하지만, 애플리케이션이 HTTP 헤더를 다음 서비스로 전파해야 합니다.

해설:

분산 추적 동작 원리:

전파해야 하는 HTTP 헤더:

# Zipkin (B3) 헤더
x-b3-traceid: 추적 ID
x-b3-spanid: 현재 Span ID
x-b3-parentspanid: 부모 Span ID
x-b3-sampled: 샘플링 여부
x-b3-flags: 플래그

# 또는 단일 헤더
b3: {traceid}-{spanid}-{sampled}-{parentspanid}

# Istio 내부 헤더
x-request-id: 고유 요청 ID

# Jaeger 네이티브 헤더 (선택적)
uber-trace-id

애플리케이션 코드 예시:

# Python Flask 예시
from flask import Flask, request
import requests

app = Flask(__name__)

@app.route('/api/users')
def get_users():
    # 1. 수신된 헤더 추출
    headers = {}
    for header in ['x-request-id', 'x-b3-traceid', 'x-b3-spanid',
                   'x-b3-parentspanid', 'x-b3-sampled', 'x-b3-flags']:
        if header in request.headers:
            headers[header] = request.headers[header]

    # 2. 다음 서비스 호출 시 헤더 전파
    response = requests.get(
        'http://user-service/users',
        headers=headers  # ✅ 헤더 전파 필수
    )

    return response.json()
// Node.js Express 예시
const express = require('express');
const axios = require('axios');
const app = express();

app.get('/api/users', async (req, res) => {
  // 1. 수신된 헤더 추출
  const tracingHeaders = {};
  ['x-request-id', 'x-b3-traceid', 'x-b3-spanid',
   'x-b3-parentspanid', 'x-b3-sampled', 'x-b3-flags'].forEach(header => {
    if (req.headers[header]) {
      tracingHeaders[header] = req.headers[header];
    }
  });

  // 2. 다음 서비스 호출 시 헤더 전파
  const response = await axios.get('http://user-service/users', {
    headers: tracingHeaders  // ✅ 헤더 전파 필수
  });

  res.json(response.data);
});

각 옵션 분석:

  • A (X): Envoy가 자동으로 trace ID 생성

  • B (O): 애플리케이션이 HTTP 헤더를 전파해야 함 (필수)

  • C (X): Jaeger 클라이언트 불필요, Envoy가 Span 전송

  • D (X): Envoy는 Span 생성/전송하지만, 헤더 전파는 애플리케이션 책임

샘플링 설정:

apiVersion: install.istio.io/v1alpha1
kind: IstioOperator
spec:
  meshConfig:
    defaultConfig:
      tracing:
        sampling: 1.0  # 100% 샘플링 (개발환경)
        # sampling: 10.0  # 10% 샘플링 (프로덕션)

Jaeger 접속:

istioctl dashboard jaeger

참고 자료:


문제 3: Kiali 시각화

Kiali가 제공하는 기능이 아닌 것은?

A. 서비스 토폴로지 시각화 B. 트래픽 흐름 분석 C. 자동 Canary 배포 실행 D. Istio 구성 검증

chevron-right정답 및 해설hashtag

정답: C

Kiali는 관찰 및 분석 도구이며, 배포 실행은 Argo Rollouts 같은 도구가 담당합니다.

해설:

Kiali의 주요 기능:

1. 서비스 토폴로지 시각화 (A - O)

Graph 뷰 예시:

2. 트래픽 흐름 분석 (B - O)

Kiali는 다음을 표시합니다:

  • 요청 수 (RPS)

  • 에러율 (%)

  • P50/P95/P99 지연시간

  • TCP 연결 수

3. 자동 Canary 배포 실행 (C - X)

  • ❌ Kiali는 배포를 실행하지 않습니다

  • ✅ Kiali는 트래픽 분할 상태를 시각화만 합니다

  • ✅ 배포 실행: Argo Rollouts, Flagger

4. Istio 구성 검증 (D - O)

Kiali 설치:

Kiali 주요 메뉴:

Kiali vs 다른 도구:

도구
역할
배포 실행

Kiali

시각화, 분석, 검증

Argo Rollouts

Progressive Delivery

Flagger

자동 Canary 배포

Grafana

메트릭 대시보드

Jaeger

분산 추적

실전 사용 예시:

참고 자료:


문제 4: Access Log 구성

Istio에서 Access Log를 JSON 형식으로 출력하도록 설정하는 방법은?

A. IstioOperator의 meshConfig.accessLogEncoding을 JSON으로 설정 B. Envoy ConfigMap을 직접 수정 C. 각 Pod에 annotation 추가 D. Prometheus 쿼리로 JSON 변환

chevron-right정답 및 해설hashtag

정답: A

IstioOperator의 meshConfig.accessLogEncoding 필드를 JSON으로 설정하면 됩니다.

해설:

JSON 형식 Access Log 설정:

출력 예시:

Namespace별 설정:

Envoy 포맷 변수:

CloudWatch Logs 통합:

로그 확인:

TEXT 형식 vs JSON 형식:

항목
TEXT
JSON

가독성

높음 (사람)

낮음 (사람)

파싱

어려움

쉬움 (기계)

크기

작음

구조화

비구조화

구조화

쿼리

어려움

쉬움 (jq 등)

TEXT 형식 예시:

참고 자료:


문제 5: Grafana 대시보드

Istio 설치 시 기본 제공되는 Grafana 대시보드가 아닌 것은?

A. Istio Service Dashboard B. Istio Workload Dashboard C. Istio Performance Dashboard D. Istio Cost Dashboard

chevron-right정답 및 해설hashtag

정답: D

Istio는 Cost Dashboard를 기본 제공하지 않습니다.

해설:

Istio 기본 Grafana 대시보드:

1. Istio Service Dashboard (A - O)

2. Istio Workload Dashboard (B - O)

3. Istio Performance Dashboard (C - O)

4. Istio Control Plane Dashboard

5. Istio Mesh Dashboard

Cost Dashboard는 없음 (D - X)

비용 관련 메트릭을 보려면 직접 커스텀 대시보드를 만들어야 합니다:

Grafana 설치 및 접속:

커스텀 대시보드 생성:

대시보드 변수 활용:

참고 자료:


주관식 문제 (6-10번)

문제 6: Golden Signals 모니터링

Google SRE의 Golden Signals(Latency, Traffic, Errors, Saturation)를 Istio와 Prometheus를 사용하여 모니터링하는 방법을 설명하세요. 각 신호에 대한 Prometheus 쿼리알림 규칙을 포함해야 합니다.

chevron-right예시 답안hashtag

답변:

Golden Signals 모니터링 구현:


1. Latency (지연시간)

Prometheus 쿼리:

알림 규칙:


2. Traffic (트래픽)

Prometheus 쿼리:

알림 규칙:


3. Errors (에러)

Prometheus 쿼리:

알림 규칙:


4. Saturation (포화도)

Prometheus 쿼리:

알림 규칙:


Grafana 대시보드 구성:

참고 자료:


문제 7: Jaeger를 사용한 성능 병목 지점 찾기

분산 추적 도구인 Jaeger를 사용하여 마이크로서비스 아키텍처에서 성능 병목 지점을 찾는 방법을 설명하세요. Trace 분석 방법실전 디버깅 시나리오를 포함해야 합니다.

chevron-right예시 답안hashtag

답변:

Jaeger를 사용한 성능 병목 지점 분석:


1. Jaeger 설치 및 구성


2. Trace 구조 이해

Span 정보:

  • Duration: Span 소요 시간

  • Tags: 메타데이터 (HTTP 메서드, URL, 응답 코드)

  • Logs: 이벤트 (에러, 경고)

  • Parent-Child 관계: 호출 계층


3. 실전 디버깅 시나리오

시나리오 1: 높은 P99 지연시간

증상:

Jaeger 분석 단계:

발견된 문제:

해결 방법:


시나리오 2: 간헐적 타임아웃

Jaeger 분석:

Span Details 확인:

해결 방법:


시나리오 3: 캐스케이딩 지연

Jaeger 분석:

해결 방법 (애플리케이션 수정):


4. Jaeger UI 활용 팁

Service Dependencies (서비스 의존성 그래프):

Compare Traces (트레이스 비교):

Deep Dependency Graph:


5. 성능 최적화 체크리스트


6. Prometheus + Jaeger 연동

참고 자료:


문제 8: Kiali를 사용한 서비스 메시 문제 해결

Kiali를 사용하여 Istio 서비스 메시에서 발생하는 일반적인 문제(구성 오류, 트래픽 이상, 보안 정책 충돌)를 진단하고 해결하는 방법을 설명하세요.

chevron-right예시 답안hashtag

답변:

Kiali를 사용한 서비스 메시 문제 해결:


1. 구성 오류 진단

문제 1: VirtualService 호스트 오류

증상:

Kiali 진단:

Kiali 오류 메시지:

해결 방법:


문제 2: DestinationRule Subset 레이블 불일치

Kiali 진단:

문제 확인:

해결 방법:


2. 트래픽 이상 진단

문제 3: 트래픽 불균형

Kiali Graph 뷰에서 확인:

원인 분석:

해결 방법:


문제 4: 순환 의존성 (Circular Dependency)

Kiali Graph 뷰에서 확인:

Kiali 알림:

해결 방법:


3. 보안 정책 충돌 진단

문제 5: AuthorizationPolicy 충돌

증상:

Kiali 진단:

해결 방법:


문제 6: mTLS 모드 불일치

Kiali Security 뷰에서 확인:

해결 방법:


4. Kiali 고급 기능 활용

Custom Time Range:

Traffic Animation:

Edge Labels:

Service Details:


5. 문제 해결 워크플로우

참고 자료:


문제 9: 프로덕션 환경 관찰성 스택 구축

프로덕션 Kubernetes 클러스터에서 Istio 관찰성 스택(Prometheus, Grafana, Jaeger, Kiali)을 고가용성(HA) 구성으로 배포하는 방법을 설명하세요. 영속성 스토리지, 스케일링, 백업 전략을 포함해야 합니다.

chevron-right예시 답안hashtag

답변:

프로덕션 관찰성 스택 구축:


1. Prometheus 고가용성 구성

Helm으로 설치 (kube-prometheus-stack):


2. Thanos로 장기 메트릭 보관

Thanos 구성 (S3 백엔드):

Thanos Query 배포:

Thanos Store (장기 데이터 조회):


3. Jaeger 고가용성 구성

Elasticsearch 백엔드 사용:


4. Kiali 고가용성 구성


5. 백업 및 복구 전략

Prometheus 데이터 백업:

Grafana 대시보드 백업:


6. 모니터링 및 알림

참고 자료:


문제 10: 커스텀 메트릭 및 대시보드 생성

Istio Envoy가 수집하는 기본 메트릭 외에 비즈니스 메트릭(예: 주문 수, 결제 성공률)을 수집하고, Grafana 커스텀 대시보드를 생성하는 방법을 설명하세요.

chevron-right예시 답안hashtag

답변:

커스텀 메트릭 및 대시보드 생성:


1. 애플리케이션에서 메트릭 노출

Python Flask 예시 (Prometheus Client):

Node.js Express 예시:


2. Kubernetes ServiceMonitor 설정


3. Prometheus 쿼리


4. Grafana 커스텀 대시보드


5. 대시보드 프로비저닝

Grafana Helm values.yaml:


6. 알림 설정

참고 자료:


점수 계산

  • 객관식 1-5번: 각 10점 (총 50점)

  • 주관식 6-10번: 각 10점 (총 50점)

  • 총점: 100점

평가 기준:

  • 90-100점: 우수 (Istio 관찰성 전문가)

  • 80-89점: 양호 (프로덕션 모니터링 가능)

  • 70-79점: 보통 (추가 학습 권장)

  • 60-69점: 미흡 (기본 개념 복습 필요)

  • 0-59점: 재학습 필요

학습 자료

마지막 업데이트