このページでは、GKE のロギング関連の問題を調査して解決する方法について説明します。
さらにサポートが必要な場合は、Cloud カスタマーケアにお問い合わせください。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 イメージがダウンロードされ、診断チェックが実行されます。必要に応じて、出力の指示に沿って、失敗したチェックを修正します。
GOOGLE_AUTH_TOKEN=GOOGLE_AUTH_TOKEN \
gcpdiag runbook gke/logs \
--parameter project_id=PROJECT_ID \
--parameter name=GKE_NAME \
--parameter location=LOCATION \
--auto --reason=REASON
Docker
Docker コンテナで gcpdiag
を起動するラッパーを使用して gcpdiag
を実行できます。Docker または Podman がインストールされている必要があります。
- ローカル ワークステーションで次のコマンドをコピーして実行します。
curl https://gcpdiag.dev/gcpdiag.sh >gcpdiag && chmod +x gcpdiag
-
gcpdiag
コマンドを実行します。./gcpdiag runbook gke/logs \ --parameter project_id=PROJECT_ID \ --parameter name=GKE_NAME \ --parameter location=LOCATION
このランブックで使用可能なパラメータを表示します。
次のように置き換えます。
- PROJECT_ID: リソースを含むプロジェクトの ID。
- GKE_NAME: GKE クラスタの名前。
- LOCATION: GKE クラスタのゾーンまたはリージョン。
有用なフラグ:
--universe-domain
: 該当する場合、リソースをホストする信頼できるパートナーのソブリン クラウド ドメイン--parameter
または-p
: ランブック パラメータ
gcpdiag
ツールのフラグの一覧と説明については、gcpdiag
の使用手順をご覧ください。