GKE에서 로깅 문제 해결


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

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. 할당량에 도달하지 않았는지 확인합니다.