[Observability] Kiali vs Jaeger 비교 분석

y001·2025년 5월 4일

Istio 실전 스터디

목록 보기
26/26

이번 글에서는 Istio의 Observability(관측 가능성)를 강화하는 두 핵심 도구인 KialiJaeger를 실습 기반으로 비교 분석합니다.


1. 실습 환경 사전 구성

  • Kubernetes: minikube (Docker 드라이버)
  • Istio: 1.17.x 버전
  • Kiali: Helm 설치 (Operator 방식)
  • Jaeger: Istio 기본 설치에 포함된 In-Cluster Jaeger 사용

2. Kiali 설치 및 구성

2-1. Kiali Operator 설치 (Helm 사용)

helm repo add kiali https://kiali.org/helm-charts
helm repo update

helm install --namespace kiali-operator \
  --create-namespace \
  --version 1.63.2 \
  kiali-operator kiali/kiali-operator

2-2. Kiali 인스턴스 배포

Kiali는 CustomResourceDefinition을 통해 인스턴스를 생성합니다.

# kiali.yaml
apiVersion: kiali.io/v1alpha1
kind: Kiali
metadata:
  namespace: istio-system
  name: kiali
spec:
  istio_namespace: "istio-system"
  auth:
    strategy: anonymous
  deployment:
    accessible_namespaces:
      - '*'
  external_services:
    prometheus:
      url: "http://prometheus.istio-system:9090"
    tracing:
      enabled: true
      in_cluster_url: "http://tracing.istio-system:16685/jaeger"
      use_grpc: true

적용:

kubectl apply -f kiali.yaml

2-3. NodePort로 접근 설정

kubectl patch svc -n istio-system kiali \
  -p '{"spec": {"type": "NodePort", "ports": [{"port": 20001, "targetPort": 20001, "nodePort": 30003}]}}'

open http://127.0.0.1:30003

설치 완료 후 Kiali 접속 시 Overview 화면에서 네임스페이스별 애플리케이션과 트래픽 상태를 바로 확인할 수 있습니다.


3. 실습 대상 서비스 배포

httpbin 서비스를 istioinaction 네임스페이스에 배포하고, Gateway와 VirtualService로 접근 경로를 설정합니다.

3-1. Gateway

# coolstore-gateway.yaml
apiVersion: networking.istio.io/v1beta1
kind: Gateway
metadata:
  name: coolstore-gateway
  namespace: istioinaction
spec:
  selector:
    istio: ingressgateway
  servers:
    - port:
        number: 80
        name: http
        protocol: HTTP
      hosts:
        - "httpbin.istioinaction.io"

3-2. VirtualService

# thin-httpbin-virtualservice.yaml
apiVersion: networking.istio.io/v1beta1
kind: VirtualService
metadata:
  name: thin-httpbin-virtualservice
  namespace: istioinaction
spec:
  hosts:
    - "httpbin.istioinaction.io"
  gateways:
    - coolstore-gateway
  http:
    - route:
        - destination:
            host: httpbin.istioinaction.svc.cluster.local
            port:
              number: 8000

적용:

kubectl apply -f coolstore-gateway.yaml
kubectl apply -f thin-httpbin-virtualservice.yaml

4. 트래픽 생성

NodePort 포트를 확인 후 반복 호출:

curl -H "Host: httpbin.istioinaction.io" http://127.0.0.1:<NodePort>/headers

또는 반복 자동 호출:

for i in {1..100}; do
  curl -s -H "Host: httpbin.istioinaction.io" http://127.0.0.1:<NodePort>/headers > /dev/null
  sleep 0.5
done

NodePort는 다음 명령어로 확인:

minikube service istio-ingressgateway -n istio-system

5. Kiali에서 확인

5-1. Graph 메뉴

  • istio-ingressgateway → httpbin 방향의 요청 흐름이 화살표로 시각화됨.
  • RPS(Requests per Second), 지연 시간, **성공률(%)**이 실시간으로 표시됨.
  • 예: 0.8 rps, 5ms, 100% success 등으로 현재 트래픽 상태를 직관적으로 확인.

5-2. 애플리케이션 및 리소스 시각화

  • Overview 화면에서는 네임스페이스별 애플리케이션과 워크로드 상태를 표시.
  • Applications, Workloads, Services, Istio Config 뷰를 통해 리소스 설정까지 추적 가능.
  • misconfiguration이 있으면 자동 경고로 탐지됨 (예: VirtualService 대상 미존재 등).

5-3. Envoy, Metrics, Logs, Traces 통합 보기

  • 특정 워크로드 클릭 → Inbound, Outbound 트래픽 성공률, 평균 응답시간 확인.
  • Logs에서 Envoy 로그와 애플리케이션 로그를 동시에 확인 가능.
  • Traces 탭에서 Jaeger와 연동된 Trace 목록도 보여줌.

6. Jaeger에서 확인

6-1. 트레이스 검색 및 시각화

  • 서비스 선택 후 최근 1시간 또는 사용자 정의 시간 범위로 Trace 검색.
  • 동일 요청이 istio-ingressgateway, httpbin 등의 Span으로 구성되어 수집됨.
  • Trace 목록에서 요청 처리 시간, Span 수, 시간 순서를 확인.

업로드중..

6-2. 개별 Trace 분석

  • Trace 클릭 시:

    • Timeline 그래프: 각 Span의 시작 시점과 소요 시간을 시각화
    • 각 Span을 클릭하면 요청 헤더, 응답 상태, 오류 유무, 태그 정보 확인 가능
    • 특히 X-B3-* 헤더로 전달된 Trace ID가 상속되는 구조를 확인 가능함

6-3. 트러블슈팅 활용

  • 요청 병목이 생기는 지점을 정확히 식별 가능
  • 지연 시간(ms) 기반으로 병목 탐지, 오류 발생 위치 추적 등 APM 수준 분석 가능

7. Kiali vs Jaeger 비교

항목KialiJaeger
중심 관점서비스 간 트래픽 흐름개별 요청의 세부 흐름 분석
분석 단위애플리케이션, 워크로드, 서비스, 리소스Trace, Span (요청 단위)
주요 기능실시간 RPS, 지연시간, 오류율, 구성 검증요청 시간 분석, 오류 트레이싱, 헤더 확인
용도운영자 중심 시각화디버깅 중심 상세 분석
한계세부 요청 정보 부족흐름 전체에 대한 구조적 시각화 부족

예시: Kiali에서는 “httpbin이 호출되지 않는다”는 걸 전체 흐름 속에서 화살표 미존재로 파악하고,
Jaeger에서는 “호출됐지만 1단계에서 500 에러가 났다”는 걸 span 내부에서 확인한다.

0개의 댓글