Anthos Service Mesh 로그 수집

다음 섹션에서는 문제 해결 또는 Google 지원에 연락을 위해 여러 Anthos Service Mesh 로그를 수집하는 방법을 설명합니다.

버그 보고서 도구를 사용하여 로그 수집

Anthos Service Mesh는 관련 진단 로그를 수집하고 로그를 Google 지원 티켓에 연결할 수 있게 해주는 자동화된 버그 신고 도구를 제공합니다.

시작하기 전에 kubeconfig 컨텍스트가 대상 클러스터로 설정되었는지 확인합니다.

  1. 다음 명령어를 사용하여 컨텍스트를 확인합니다.

    kubectl config current-context
  2. 버그 신고 도구를 다운로드하고 사용하는 절차는 사용하는 Anthos Service Mesh 버전에 따라 달라집니다. 다음 표를 참조하여 istioctl의 현재 버전으로 충분한지 아니면 독립형 도구 버전을 다운로드해야 하는지 확인합니다.

Anthos Service Mesh/Istio 버전 버그 신고 도구
Anthos Service Mesh 1.7.* 이상 istioctl bug-report
Anthos Service Mesh 1.6.* 독립형
Anthos Service Mesh 1.5.* 독립형
Istio 1.7.* 독립형
Istio 1.6.* 독립형
Istio 1.5.* 독립형

독립형 버전의 버그 신고 도구를 다운로드하려면 다음 단계를 따르세요.

  1. 목록에서 OS 환경과 일치하는 배포판을 선택합니다.

    • https://storage.googleapis.com/gke-release/asm/bug-report_darwin_amd64-v2
    • https://storage.googleapis.com/gke-release/asm/bug-report_linux_386-v2
    • https://storage.googleapis.com/gke-release/asm/bug-report_linux_amd64-v2
    • https://storage.googleapis.com/gke-release/asm/bug-report_linux_arm-v2
  2. curl을 사용하여 선택한 배포판을 다운로드합니다. 예를 들면 다음과 같습니다.

    curl -LO https://storage.googleapis.com/gke-release/asm/bug-report_darwin_amd64-v1
  3. 실행할 수 있도록 버그 신고 도구 바이너리에 대해 권한을 설정합니다. 예를 들면 다음과 같습니다.

    chmod +x bug-report_darwin_amd64-v1

로그 수집 시작

로그 수집을 시작하려면 버그 신고 도구를 실행하고 구성 파일을 매개변수로 전달합니다. 필요에 따라 --help 옵션을 사용하여 확인할 수 있는 추가 런타임 옵션을 사용하여 구성을 덮어쓸 수 있습니다.

Anthos Service Mesh 버전에 버그 신고 도구가 이미 istioctl 내에 포함된 경우 다음 명령어를 사용합니다.

istioctl bug-report

독립형 버그 신고 도구가 필요하면 도구 이름을 바꾸고 예시와 같이 darwin 배포판을 사용하는 다음 명령어와 같이 실행합니다.

mv ./bug-report_darwin_amd64-v1 ./bug-report
./bug-report

디버그 아카이브 업로드

디버그 로그 아카이브를 버그 신고 도구 작업 디렉터리에 저장합니다. 아카이브를 압축 해제하고 문제 해결 가이드를 사용하여 문제 해결 수행을 직접 시도할 수 있습니다. 하지만 서포트 패키지가 있으면 Google Cloud 지원에 연락하여 안전한 로그 아카이브 업로드 단계를 지원 받을 수 있습니다.

수동으로 Anthos Service Mesh 로그 수집

Anthos Service Mesh 버그 신고 도구를 사용하는 대신 이 섹션에서는 모든 관련 로그를 수동으로 수집하는 방법을 설명합니다.

Envoy 액세스 로그

Envoy 프록시 액세스 로그에는 문제 해결에 유용한 세부 정보가 포함되어 있습니다. 하지만 이를 사용 설정하고 올바른 세부정보 수준을 설정해야 합니다.

로그 콘텐츠를 해석하는 방법에 대한 자세한 내용은 Envoy 로그 해석을 참조하세요.

Envoy 로그 사용 또는 사용 중지

Envoy 프록시 액세스 로그를 사용 설정하려면 다음 예시와 같이 istioctl install을 사용합니다.

istioctl install --set profile=PROFILE_NAME \
    --set meshConfig.accessLogFile="/dev/stdout" \
    --set meshConfig.accessLogEncoding="JSON"

istioctl install 명령어는 로그 구성을 위해 다음 옵션을 제공합니다.

설명
accessLogFile 프록시 액세스 로그의 파일 주소를 정의합니다(예: /dev/stdout). 값이 비어 있으면 액세스 로깅이 사용 중지됩니다.
accessLogFormat 프록시 액세스 로그의 형식을 정의합니다. 값이 비어 있으면 프록시의 기본 액세스 로그 형식이 설정됩니다.
accessLogEncoding 프록시 액세스 로그의 인코딩입니다(`TEXT` 또는 `JSON`). 기본값은 `TEXT`입니다.

로그를 사용 중지하려면 accessLogFile을 빈 문자열로 설정합니다.

istioctl install --set profile=PROFILE_NAME \
    --set meshConfig.accessLogFile="" \
    --set meshConfig.accessLogEncoding="TEXT"

로깅 세부정보 증가

로그의 세부정보 수준을 일시적으로 늘리려면 다음 명령어를 사용합니다. 포드가 다시 생성되면 이 설정이 실행취소됩니다.

kubectl -n NAMESPACE exec POD_NAME -c istio-proxy -- curl -X POST http://localhost:15000/logging?level=info

폴더에 Envoy 로그 쓰기

Envoy 프록시 액세스 로그를 수집하여 이를 폴더에 저장하려면 다음 명령어를 사용합니다.

kubectl logs -l app=APPLICATION_NAME -c istio-proxy > /FILE_PATH

자세한 내용은 Envoy의 액세스 로그 가져오기를 참조하세요.

Kubernetes 로그

Kubernetes는 Istiod, 인그레스 게이트웨이, 프록시와 같은 Istio 구성요소의 동작에 대한 정보가 포함된 여러 로그를 생성합니다. 이러한 로그에서 오류를 검토하여 문제의 원인이 될 수 있는 범위를 좁힐 수 있습니다.

다음 명령어를 사용하여 Istiod 로그를 캡처합니다.

kubectl -n istio-system logs $(kubectl -n istio-system get pods -lapp=istiod -oname) > ./LOGS_FOLDER/istiod.log

다음 명령어를 사용하여 Istio 인그레스 게이트웨이 로그를 캡처합니다.

kubectl -n istio-system logs $(kubectl -n istio-system get pods -lapp=istio-ingressgateway -oname) > /FILE_PATH

다음 명령어를 사용하여 Istio 프록시 로그를 캡처합니다.

kubectl -n WORKLOAD_NAMESPACE logs POD_NAME -c istio-proxy > ./LOGS_FOLDER/proxy.log

Kubernetes 구성 덤프

이 정보를 통해 클러스터에 직접 액세스하지 않고도 사용자가 여러 리소스 상태를 확인하고 가능한 구성 문제를 식별할 수 있습니다. 다음 명령어는 Kubernetes 구성을 YAML 파일에 기록합니다.

for namespace in "istio-system" "ns1" "ns2"; do kubectl get -oyaml deploy,statefulset,job,ingress,endpoints,configmap,event,secret,service,istio-io > ./LOGS_FOLDER/kubernetes.log; done

Envoy 코어 덤프

Envoy 코어 덤프는 일반적으로 최종 사용자에게 유용하지 않지만, Google 지원이 문제 해결 프로세스를 위해 사용자에게 다음 단계에 따라 수집하도록 요청할 수 있습니다.

  1. IstioOperator 구성에 다음을 추가하여 메시에서 모든 프록시에 대해 코어 덤프를 사용 설정합니다.

    spec:
    values:
    global:
      proxy:
        enableCoreDumps: true
  2. 다음 명령어를 사용하여 다시 설치합니다.

    istioctl install -f myOperatorFile.yaml
  3. 프록시 코어 덤프를 사용 설정하여 다시 생성되도록 대상 Pod를 삭제합니다.

  4. 프로세스가 실행되도록 만들고 문제가 발생하면 istio-proxy 컨테이너에서 다음 명령어를 실행하여 코어 덤프를 트리거합니다.

    kubectl exec -it POD_NAME -c istio-proxy
  5. envoy 컨테이너에 대한 PID를 찾습니다.

    ps aux | grep -i envoy
  6. PID를 사용하여 코어 덤프를 생성하는 envoy 프로세스를 중지합니다.

    kill -3 PID
  7. 컨테이너가 다시 시작되도록 기다립니다(또는 kill 명령어 사용).

  8. 다음 명령어를 실행하여 현재 디렉터리로 코어 덤프를 추출합니다.

    kubectl cp PID:/var/lib/istio/data/core.proxy -c istio-proxy ./core.proxy

Envoy 프록시 구성

자세한 Envoy 프록시 구성에는 문제 해결 프로세스에 유용할 수 있는 추가 세부정보가 포함됩니다. 다음 명령어를 사용하여 이 정보를 수집할 수 있습니다. 이 예시에서 ENDPOINT는 다음 중 하나입니다(중요도 순으로 표시됨). * /certs * /clusters * /listeners * /config_dump * /memory * /server_info * /stats/prometheus * /runtime

kubectl exec -i POD_NAME -c istio-proxy curl 127.0.0.1:15000/ENDPOINT > out.log