이 페이지에서는 GKE 로깅 관련 문제를 조사하고 해결하는 방법을 설명합니다.
추가 지원이 필요하면 Cloud Customer Care에 연락하세요.Cloud Logging의 클러스터 로그 누락
프로젝트에 로깅이 사용 설정되었는지 확인
사용 설정된 서비스 나열:
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"
로깅이 중지되었다면 로깅을 사용 설정합니다.
gcloud services enable logging.googleapis.com
클러스터에 로깅이 사용 설정되었는지 확인
클러스터를 나열합니다.
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
에서는 로깅이 중지되어 있습니다.NONE
으로 설정된 경우 클러스터 로깅을 사용 설정합니다.gcloud container clusters update CLUSTER_NAME \ --logging=SYSTEM,WORKLOAD \ --location=COMPUTE_LOCATION
다음을 바꿉니다.
CLUSTER_NAME
: 클러스터 이름COMPUTE_LOCATION
: 클러스터의 Compute Engine 위치
노드 풀의 노드에 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
클러스터의 각 노드 풀에서 구성된 범위를 확인합니다.
gcloud container node-pools list --cluster=CLUSTER_NAME \ --format="table(name,config.oauthScopes)" \ --location COMPUTE_LOCATION
다음을 바꿉니다.
CLUSTER_NAME
: 클러스터 이름COMPUTE_LOCATION
: 클러스터의 Compute Engine 위치
이전 노드 풀에서 새로 생성된 노드 풀로 워크로드를 마이그레이션하고 진행 상황을 모니터링합니다.
올바른 로깅 범위로 새 노드 풀을 만듭니다.
gcloud container node-pools create NODE_POOL_NAME \ --cluster=CLUSTER_NAME \ --location=COMPUTE_LOCATION \ --scopes="gke-default"
다음을 바꿉니다.
CLUSTER_NAME
: 클러스터 이름COMPUTE_LOCATION
: 클러스터의 Compute Engine 위치
노드 풀의 서비스 계정에 올바른 IAM 권한이 있는 역할이 있는지 확인
서비스 계정에는 로그를 만들 수 있는 logging.logEntries.create
권한을 포함하는 역할이 있어야 합니다.
각 노드 풀의 서비스 계정을 찾습니다.
gcloud container node-pools list \ --cluster=CLUSTER_NAME \ --format="table(name,config.serviceAccount)" \ --location=COMPUTE_LOCATION
다음을 바꿉니다.
CLUSTER_NAME
: 클러스터 이름COMPUTE_LOCATION
: 클러스터의 Compute Engine 위치
출력은 다음과 비슷합니다.
NAME SERVICE_ACCOUNT default-pool gke-cluster-sa@developer.gserviceaccount.com
노드 풀이 기본 Compute Engine 서비스 계정을 사용하는 경우 다음 명령어를 사용하여 설명할 수 있습니다. 노드 풀에 최소 권한의 커스텀 서비스 계정을 사용하는 것이 좋습니다. 기본 Compute Engine 서비스 계정에 클러스터를 실행하는 데 필요한 최소 권한 이상이 포함되어 있습니다.
gcloud compute project-info describe --format="table(defaultServiceAccount)"
IAM 역할에 충분한 권한이 있는지 확인합니다.
특정 서비스 계정에 부여된 역할에 포함된 권한을 봅니다.
gcloud projects get-iam-policy PROJECT_ID \ --flatten="bindings[]" \ --filter="bindings.members=serviceAccount:SERVICE_ACCOUNT" \ --format="table[box](bindings.role)"
서비스 계정에 대한
logging.logEntries.create
권한이 포함된 역할을 부여합니다. 사전 정의된 역할을 사용하거나 커스텀 역할을 만들 수 있습니다.
Cloud Logging 쓰기 API 할당량에 도달하지 않았는지 확인
Cloud Logging의 API 쓰기 할당량에 도달하지 않았는지 확인합니다.
Google Cloud 콘솔의 할당량 페이지로 이동합니다.
'Cloud Logging API'를 기준으로 테이블을 필터링합니다.
할당량에 도달하지 않았는지 확인합니다.
gcpdiag로 GKE 로깅 문제 디버깅
GKE 클러스터에서 로그가 누락되거나 불완전한 경우gcpdiag
도구를 사용하여 문제를 해결합니다.
gcpdiag
는 오픈소스 도구입니다. 공식적으로 지원되는 Google Cloud 제품이 아닙니다.
gcpdiag
도구를 사용하면 Google Cloud 프로젝트 문제를 식별하고 수정할 수 있습니다. 자세한 내용은 GitHub의 gcpdiag 프로젝트를 참조하세요.
- 프로젝트 수준 로깅: GKE 클러스터가 있는 Google Cloud 프로젝트에 Cloud Logging API가 사용 설정되었는지 확인합니다.
- 클러스터 수준 로깅: 로깅이 GKE 클러스터 구성 내에서 명시적으로 사용 설정되었는지 확인합니다.
- 노드 풀 권한: 로그 데이터를 전송할 수 있도록 클러스터의 노드 풀 내 노드에 'Cloud Logging 쓰기' 범위가 사용 설정되어 있는지 확인합니다.
- 서비스 계정 권한: 노드 풀에서 사용하는 서비스 계정에 Cloud Logging과 상호작용하는 데 필요한 IAM 권한이 있는지 확인합니다. 특히 일반적으로 'roles/logging.logWriter' 역할이 필요합니다.
- Cloud Logging API 쓰기 할당량: Cloud Logging API 쓰기 할당량이 지정된 기간 내에 초과되지 않았는지 확인합니다.
Google Cloud 콘솔
- 다음 명령어를 작성하고 복사합니다.
- Google Cloud 콘솔을 열고 Cloud Shell을 활성화합니다. Cloud 콘솔 열기
- 복사한 명령어를 붙여넣습니다.
gcpdiag
명령어를 실행하면gcpdiag
Docker 이미지를 다운로드한 후 진단 검사를 수행합니다. 해당되는 경우 출력 안내를 따라 실패한 검사를 수정합니다.
gcpdiag runbook gke/logs --project=PROJECT_ID \
--parameter name=GKE_NAME \
--parameter location=LOCATION
Docker
Docker 컨테이너에서 gcpdiag
를 시작하는 래퍼를 사용하여 gcpdiag
를 실행할 수 있습니다. Docker 또는 Podman이 설치되어 있어야 합니다.
- 로컬 워크스테이션에서 다음 명령어를 복사하고 실행합니다.
curl https://gcpdiag.dev/gcpdiag.sh >gcpdiag && chmod +x gcpdiag
-
gcpdiag
명령어를 실행합니다../gcpdiag runbook gke/logs --project=PROJECT_ID \ --parameter name=GKE_NAME \ --parameter location=LOCATION
이 런북에 사용 가능한 매개변수를 봅니다.
다음을 바꿉니다.
- PROJECT_ID: 리소스가 포함된 프로젝트의 ID입니다.
- GKE_NAME: GKE 클러스터 이름입니다.
- LOCATION: GKE 클러스터의 영역이나 리전입니다.
유용한 플래그:
--project
: PROJECT_ID--universe-domain
: 해당되는 경우 리소스를 호스팅하는 신뢰할 수 있는 파트너 주권 클라우드 도메인--parameter
또는-p
: 런북 파라미터
모든 gcpdiag
도구 플래그의 목록과 설명은 gcpdiag
사용 안내를 참조하세요.