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. どの割り当ての上限にも達していないことを確認します。