このページでは、GKE のロギング関連の問題を調査して解決する方法について説明します。
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」でフィルタリングします。
どの割り当ての上限にも達していないことを確認します。