GKE에서 로깅 문제 해결


이 페이지에서는 GKE 로깅 관련 문제를 조사하고 해결하는 방법을 설명합니다.

추가 지원이 필요하면 Cloud Customer Care에 연락하세요.

Cloud Logging의 클러스터 로그 누락

프로젝트에 로깅이 사용 설정되었는지 확인

  1. 사용 설정된 서비스 나열:

    gcloud services list --enabled --filter="NAME=logging.googleapis.com"
    

    다음 출력은 프로젝트에 로깅이 사용 설정되었음을 나타냅니다.

    NAME                    TITLE
    logging.googleapis.com  Cloud Logging API
    

    선택사항: 로그 뷰어의 로그를 확인하여 API를 중지한 사용자와 API를 중지한 시기를 확인합니다.

    protoPayload.methodName="google.api.serviceusage.v1.ServiceUsage.DisableService"
    protoPayload.response.services="logging.googleapis.com"
    
  2. 로깅이 중지되었다면 로깅을 사용 설정합니다.

    gcloud services enable logging.googleapis.com
    

클러스터에 로깅이 사용 설정되었는지 확인

  1. 클러스터를 나열합니다.

    gcloud container clusters list \
        --project=PROJECT_ID \
        '--format=value(name,loggingConfig.componentConfig.enableComponents)' \
        --sort-by=name | column -t
    

    다음을 바꿉니다.

    • PROJECT_ID: Google Cloud 프로젝트 ID입니다.

    출력은 다음과 비슷합니다.

    cluster-1              SYSTEM_COMPONENTS
    cluster-2              SYSTEM_COMPONENTS;WORKLOADS
    cluster-3
    

    클러스터 값이 비어 있으면 로깅이 중지됩니다. 예를 들어 이 출력의 cluster-3에서는 로깅이 중지되어 있습니다.

  2. NONE으로 설정된 경우 클러스터 로깅을 사용 설정합니다.

    gcloud container clusters update CLUSTER_NAME  \
        --logging=SYSTEM,WORKLOAD \
        --location=COMPUTE_LOCATION
    

    다음을 바꿉니다.

노드 풀의 노드에 Cloud Logging 액세스 범위가 있는지 확인

Cloud Logging에 로그를 쓰려면 노드에 다음 범위 중 하나가 필요합니다.

  • https://www.googleapis.com/auth/logging.write
  • https://www.googleapis.com/auth/cloud-platform
  • https://www.googleapis.com/auth/logging.admin
  1. 클러스터의 각 노드 풀에서 구성된 범위를 확인합니다.

    gcloud container node-pools list --cluster=CLUSTER_NAME \
        --format="table(name,config.oauthScopes)" \
        --location COMPUTE_LOCATION
    

    다음을 바꿉니다.

    이전 노드 풀에서 새로 생성된 노드 풀로 워크로드를 마이그레이션하고 진행 상황을 모니터링합니다.

  2. 올바른 로깅 범위로 새 노드 풀을 만듭니다.

    gcloud container node-pools create NODE_POOL_NAME \
        --cluster=CLUSTER_NAME \
        --location=COMPUTE_LOCATION \
        --scopes="gke-default"
    

    다음을 바꿉니다.

노드 풀의 서비스 계정에 올바른 IAM 권한이 있는 역할이 있는지 확인

서비스 계정에는 로그를 만들 수 있는 logging.logEntries.create 권한을 포함하는 역할이 있어야 합니다.

  1. 각 노드 풀의 서비스 계정을 찾습니다.

    gcloud container node-pools list \
        --cluster=CLUSTER_NAME \
        --format="table(name,config.serviceAccount)" \
        --location=COMPUTE_LOCATION
    

    다음을 바꿉니다.

    출력은 다음과 비슷합니다.

    NAME          SERVICE_ACCOUNT
    default-pool  gke-cluster-sa@developer.gserviceaccount.com
    

    노드 풀이 기본 Compute Engine 서비스 계정을 사용하는 경우 다음 명령어를 사용하여 설명할 수 있습니다. 노드 풀에 최소 권한의 커스텀 서비스 계정을 사용하는 것이 좋습니다. 기본 Compute Engine 서비스 계정에 클러스터를 실행하는 데 필요한 최소 권한 이상이 포함되어 있습니다.

    gcloud compute project-info describe --format="table(defaultServiceAccount)"
    
  2. IAM 역할에 충분한 권한이 있는지 확인합니다.

    특정 서비스 계정에 부여된 역할에 포함된 권한을 봅니다.

    gcloud projects get-iam-policy PROJECT_ID \
        --flatten="bindings[]" \
        --filter="bindings.members=serviceAccount:SERVICE_ACCOUNT" \
        --format="table[box](bindings.role)"
    
  3. 서비스 계정에 대한 logging.logEntries.create 권한이 포함된 역할을 부여합니다. 사전 정의된 역할을 사용하거나 커스텀 역할을 만들 수 있습니다.

Cloud Logging 쓰기 API 할당량에 도달하지 않았는지 확인

Cloud Logging의 API 쓰기 할당량에 도달하지 않았는지 확인합니다.

  1. Google Cloud 콘솔의 할당량 페이지로 이동합니다.

    할당량으로 이동

  2. 'Cloud Logging API'를 기준으로 테이블을 필터링합니다.

  3. 할당량에 도달하지 않았는지 확인합니다.

gcpdiag로 GKE 로깅 문제 디버깅

GKE 클러스터에서 로그가 누락되거나 불완전한 경우 gcpdiag 도구를 사용하여 문제를 해결합니다.

gcpdiag는 오픈소스 도구입니다. 공식적으로 지원되는 Google Cloud 제품이 아닙니다. gcpdiag 도구를 사용하면 Google Cloud 프로젝트 문제를 식별하고 수정할 수 있습니다. 자세한 내용은 GitHub의 gcpdiag 프로젝트를 참조하세요.

GKE 클러스터에서 로그가 누락되거나 불완전한 경우 적절한 로깅 함수에 필수적인 다음 핵심 구성 설정에 집중하여 잠재적인 원인을 조사합니다.

  • 프로젝트 수준 로깅: GKE 클러스터가 있는 Google Cloud 프로젝트에 Cloud Logging API가 사용 설정되었는지 확인합니다.
  • 클러스터 수준 로깅: 로깅이 GKE 클러스터 구성 내에서 명시적으로 사용 설정되었는지 확인합니다.
  • 노드 풀 권한: 로그 데이터를 전송할 수 있도록 클러스터의 노드 풀 내 노드에 'Cloud Logging 쓰기' 범위가 사용 설정되어 있는지 확인합니다.
  • 서비스 계정 권한: 노드 풀에서 사용하는 서비스 계정에 Cloud Logging과 상호작용하는 데 필요한 IAM 권한이 있는지 확인합니다. 특히 일반적으로 'roles/logging.logWriter' 역할이 필요합니다.
  • Cloud Logging API 쓰기 할당량: Cloud Logging API 쓰기 할당량이 지정된 기간 내에 초과되지 않았는지 확인합니다.

Google Cloud 콘솔

  1. 다음 명령어를 작성하고 복사합니다.
  2. gcpdiag runbook gke/logs --project=PROJECT_ID \
        --parameter name=GKE_NAME \
        --parameter location=LOCATION
  3. Google Cloud 콘솔을 열고 Cloud Shell을 활성화합니다.
  4. Cloud 콘솔 열기
  5. 복사한 명령어를 붙여넣습니다.
  6. gcpdiag 명령어를 실행하면 gcpdiag Docker 이미지를 다운로드한 후 진단 검사를 수행합니다. 해당되는 경우 출력 안내를 따라 실패한 검사를 수정합니다.

Docker

Docker 컨테이너에서 gcpdiag를 시작하는 래퍼를 사용하여 gcpdiag를 실행할 수 있습니다. Docker 또는 Podman이 설치되어 있어야 합니다.

  1. 로컬 워크스테이션에서 다음 명령어를 복사하고 실행합니다.
    curl https://gcpdiag.dev/gcpdiag.sh >gcpdiag && chmod +x gcpdiag
  2. gcpdiag 명령어를 실행합니다.
    ./gcpdiag runbook gke/logs --project=PROJECT_ID \
        --parameter name=GKE_NAME \
        --parameter location=LOCATION

이 런북에 사용 가능한 매개변수를 봅니다.

다음을 바꿉니다.

  • PROJECT_ID: 리소스가 포함된 프로젝트의 ID입니다.
  • GKE_NAME: GKE 클러스터 이름입니다.
  • LOCATION: GKE 클러스터의 영역이나 리전입니다.

유용한 플래그는 다음과 같습니다.

모든 gcpdiag 도구 플래그의 목록과 설명은 gcpdiag 사용 안내를 참조하세요.

다음 단계

추가 지원이 필요하면 Cloud Customer Care에 문의하세요.