본문 바로가기
오픈소스

[ISTIO] istio-proxy debugging tips

by sangyeon 2022. 11. 28.
728x90

※ 트래픽이 많은 MSA 환경에서 istio-proxy 로그 레벨을 높이거나 access log를 쌓을 경우 너무 많은 디스크가 사용되기 때문에 기본적으로는 info level에 access 로그는 off로 구성될 수 있다.

허나 실무 서비스 이슈 발생 시 디버깅 용도로 로그레벨 및 access log를 설정하여 봐야하는 경우가 있다.

 

이번 글에서는 MSA 환경에서 MSA간 문제 발생 시, istio를 통한 디버깅 방법을 적어보려고 한다.

 

● 서비스 이슈 발생 시 로그 보는 방법

: 기본적으로 이슈 발생 시, 아래 명령어로 컨테이너 로그를 볼 수 있다. 

$ kubectl logs -f [pod-name] -n [namespace-name] -c [container-name] 

※ 멀티컨테이너 구성 시에 -c 옵션을 통해 특정 컨테이너 로그만 볼 수 있다.

 

 

● access log 설정

: istio config map 수정을 통해 설정할 수 있으며 약 1분뒤에 반영된다.

  istio-ingressgateway와 app의 istio-proxy에 모두 반영되며 Pod 재기동은 필요 없다.

$ kubectl edit cm istio -n istio-system

※ accessLogFile: /dev/stdout 라인을 추가하면 access 로그가 enable 된다.

 

- cli를 통해 istio-proxy의 access 로그를 확인한다.

$ kubectl logs -f ratings-v1-5967f59c58-7w7xd -n default -c istio-proxy

※ URI, HTTP Code, inbound/outbound 정도 등의 출력정보를 확인할 수 있다.

 

 

● 로그 레벨 설정

: istio-proxy의 로그레벨은 default로 info 이다.  로그 레벨을 변경하는 방법은 임시적용과 영구적용 두 가지가 있다. 보통 이슈 발생 시점에만 로그레벨을 높혀서 보기 때문에 임시방법을 사용한다.

 

i) 기동 중인 Pod에 Istio-Sidecar(istio-proxy) 임시로 즉시 레벨 적용하는 방법

    - 재기동 시 default로 돌아간다.

$ kubectl exec -it -n <namespace> <pod-name> exec -- curl -X POST http://localhost:15000/logging?level=trace

※ 실제 컨테이너 안에 들어가서  curl로 실행해도 된다.

$ curl -X POST localhost:15000/logging 까지만 명령하면 현재 로그레벨을 확인할 수 있으며, ?level=[loglevel]로 명령하면 로그레벨을 임시로 변경하게된다.

 

ii) Deployment의 annotation 설정에 로그레벨을 영구적용하는 방법

    - Pod를 재기동할 때 반영되며 다시 기동되어도 로그 레벨이 적용된다.

$ kubectl edit deploy <deployment-name> -n <namespace-name>
spec:
   ...(중략)...
   template:
      metadata:
          annotations:
               ...(중략)...
               sidecar.istio.io/agentLogLevel: info/trace/debug ...

※ sidecar.istio.io/agentLogLevel: trace 라인을 추가하여 재기동하면 반영된다. 

 

- cli를 통해 istio-proxy의 로그를 확인한다.

$ kubectl logs -f ratings-v1-5967f59c58-7w7xd -c istio-proxy

※ 다만, access log와 istio 로그가 같이 찍히기 때문에 보기가 어려울 수 있다.

 

 

 

 

 

 

 

 

728x90