このページでは、フリートのログを有効にして表示する方法について説明します。フリート ロギングでは、複数のログを集約してスコープを設定するため、1 つの統合ビューでアプリケーションの健全性を分析できます。このページは、次のような方を対象としています。
- フリート ロギングを有効にしてすべての Namespace のログを表示する必要があるプラットフォーム管理者。
- アクセス権のある特定の Namespace のログを表示する必要があるサービス オペレーター。
概要
フリートログでは、フリートレベル全体または特定のチームスコープでログを表示できます。スコープは、チームごとにフリートログやその他のリソースのサブセットを定義できる、チーム管理機能です。各スコープは、1 つ以上のフリート メンバー クラスタに関連付けられます。スコープについて詳しくは、フリートのチームを管理するをご覧ください。
次の 2 種類のフリートログを表示できます。
デフォルトログ: 次のリソースタイプを持つ特定のフリート スコープに属さないすべての Kubernetes ログ(監査ログを除く)。
k8s_container
k8s_pod
k8s_node
k8s_cluster
k8s_control_plane_components
フリート スコープのログ: 複数のフリートレベルの Namespace を持つ特定のフリート スコープにデプロイされたチームが所有するアプリケーションのコンテナと Pod のログ。
フリート スコープのログの表示は任意です。チーム管理を設定しない場合でも、フリート ロギングを使用してデフォルトログを表示できます。
ログは、アクセス制御用のさまざまなビューを使用して、フリート ホスト プロジェクト内の異なるログバケットにルーティングできます。ログバケットのデフォルトの保持期間は 30 日です。必要に応じて、この期間を構成できます。
フリートに複数のプロジェクトのクラスタが含まれているログ ルーティングでは、次の 2 つのモードがサポートされています(プロジェクト間の登録)。
MOVE
: すべてのログがフリート ホスト プロジェクトに移動されます。 フリート内のクラスタが別のプロジェクトに属している場合、それらのログは元の Google Cloud プロジェクトに保持されません。COPY
: すべてのログがフリート ホスト プロジェクトに送信されます。フリート内のクラスタが別のプロジェクトに属している場合、それらのログは元の Google Cloud プロジェクトにも保持されます。
始める前に
すでに手動で Cloud Logging のバケットとシンクを作成し、除外フィルタを設定している場合は、これらのオブジェクトに割り当てた名前がフリート ロギングの命名制限と競合していないことを確認します。名前が競合している場合は、続行する前にサポートにお問い合わせください。
ログを表示するクラスタが、選択したフリートに登録されていることを確認します。
Google Cloud CLI をまだインストールしていない場合は、インストール手順に従ってインストールします。フリートログを表示するには、バージョン 424.0.0 以降が必要です。
フリート ホスト プロジェクトで、Anthos API を含む必要なすべての API が有効になっていることを確認します。
gcloud services enable --project=FLEET_HOST_PROJECT_ID \ gkehub.googleapis.com \ container.googleapis.com \ connectgateway.googleapis.com \ cloudresourcemanager.googleapis.com \ iam.googleapis.com \ anthos.googleapis.com
ここで
- FLEET_HOST_PROJECT_ID は、フリート ホスト プロジェクトのプロジェクト ID に置き換えます。この値の確認方法をご覧ください。
スコープ、Namespace、ワークロードを準備する
フリート スコープのログを表示するには、ログ収集のワークロードを準備することに加えて、フリート スコープとフリートの Namespace を作成する必要があります。
続行する前に、次のコマンドを実行して Google Cloud CLI のデフォルト プロジェクトを設定します。
gcloud config set project FLEET_HOST_PROJECT_ID
スコープと Namespace を作成する
スコープレベルでログを表示しようとしていて、スコープをまだ設定していない場合は、フリートのチームを管理するの手順に沿ってスコープを作成し、スコープにクラスタを追加して、フリートの Namespace を設定します。
ワークロードを準備する
アプリケーションからのログデータを表示するには、前の手順で構成したフリートの Namespace にクラスタ内のワークロードをデプロイする必要があります。この手順は、デフォルトログ、フリート スコープのログ、またはその両方を表示する場合に適用できます。ワークロードを構成する例を次に示します。
apiVersion: v1
kind: Pod
metadata:
name: fleet-example-pod
namespace: NAMESPACE_NAME
spec:
containers:
- name: count
image: ubuntu:14.04
args: [bash, -c,
'for ((i = 0; ; i++)); do echo "$i: $(date)"; sleep 1; done']
リソースをデプロイした後、なんらかの理由でフリートの Namespace の作成に失敗した場合、エラーが表示されることがあります。この場合は、次のコマンドを実行して Namespace を再度作成し、ワークロードのデプロイ コマンドを再実行します。
kubectl create namespace NAMESPACE_NAME
フリート ロギングを有効にする
このセクションでは、フリート ロギング機能を有効にして、チームにログを表示するアクセス権を付与する方法について説明します。
gcloud
Google Cloud CLI を使用してフリート ロギングを有効にするには、JSON または YAML ファイルで機能の構成フィールドを指定します。JSON 形式のフリート ロギングの構成例を次に示します。
{ "loggingConfig": { "defaultConfig": { "mode": "COPY" }, "fleetScopeLogsConfig": { "mode": "MOVE" } } }
この機能に構成できるすべてのフィールドを表示するには、API リファレンスをご覧ください。
COPY
モードまたは MOVE
モードで defaultConfig
フィールドまたは fleetScopeLogsConfig
フィールドを有効にすると、前述の例に示すように、接頭辞 fleet-o11y-
を付けてログシンクが作成されます。このログシンクは Google Cloud プロジェクトの下に作成され、クラスタ プロジェクトからフリートホスト プロジェクトにターゲットログをルーティングします。
fleetScopeLogsConfig
が有効になっている場合、フリート ホスト プロジェクトの global
リージョンに fleet-o11y-scope-$SCOPE_NAME
という名前のログバケットが作成されます(存在しない場合)。バケットのリージョンは変更できません。
この例では、デフォルトログはフリート ホスト プロジェクトに送信され、元の Google Cloud プロジェクトに保持されます。一方、フリート スコープのログはフリート ホスト プロジェクトに送信され、Google Cloud プロジェクトに保持されません。
選択した構成を JSON ファイルに追加し、フリートを更新します。
gcloud container fleet fleetobservability update \ --logging-config=JSON_FILE
JSON_FILE は実際のファイル名に置き換えます。
Terraform
- フリート オブザーバビリティ機能はデフォルトで有効になっています。初めて Terraform を使用してフリートのオブザーバビリティ機能を管理する場合は、次のコマンドを実行して、Terraform に機能をインポートします。
terraform import google_gke_hub_feature.feature projects/FLEET_HOST_PROJECT_ID/locations/global/features/fleetobservability
- Terraform モジュールを使用して、Terraform でフリート ロギングを有効にできます。
たとえば、Terraform 構成に次のブロックを追加できます。
resource "google_gke_hub_feature" "feature" {
name = "fleetobservability"
location = "global"
spec {
fleetobservability {
logging_config {
default_config {
mode = "COPY"
}
fleet_scope_logs_config {
mode = "MOVE"
}
}
}
}
}
COPY
モードまたは MOVE
モードで default_config
フィールドまたは fleet_scope_logs_config
フィールドを有効にすると、前述の例に示すように、接頭辞 fleet-o11y-
を付けてログシンクが作成されます。このログシンクは Google Cloud プロジェクトの下に作成され、クラスタ プロジェクトからフリートホスト プロジェクトにターゲットログをルーティングします。
fleet_scope_logs_config
が有効になっている場合、フリート ホスト プロジェクトに fleet-o11y-scope-$SCOPE_NAME
という名前のログバケットが作成されます(存在しない場合)。
この例では、デフォルトログはフリート ホスト プロジェクトに送信され、元の Google Cloud プロジェクトに保持されます。一方、フリート スコープのログはフリート ホスト プロジェクトに送信され、Google Cloud プロジェクトに保持されません。
機能仕様が更新されていることを確認します。
gcloud container fleet fleetobservability describe
出力には、次の例のように、構成で更新された fleetobservability
仕様が表示されます。
createTime: '2022-09-30T16:05:02.222568564Z' membershipStates: projects/123456/locations/us-central1/memberships/cluster-1: state: code: OK description: Fleet monitoring enabled. updateTime: '2023-04-03T20:22:51.436047872Z' name: projects/123456/locations/global/features/fleetobservability resourceState: state: ACTIVE spec: fleetobservability: loggingConfig: defaultConfig: mode: COPY fleetScopeLogsConfig: mode: MOVE state: state: {} updateTime: '2023-04-03T20:38:17.719596966Z'
fleetobservability
仕様に変更を加えると、適用されるまでに数分かかることがあります。
プロジェクト間のロギング権限を設定する
このセクションは、別のプロジェクトのフリートにクラスタを登録する(クロス プロジェクト登録とも呼ばれる)場合にのみ必要です。クラスタ プロジェクトからフリート ホスト プロジェクトにログをルーティングするには、各クラスタ プロジェクトのロギング サービス アカウントに roles/logging.bucketWriter
ロールを付与する必要があります。
クラスタ プロジェクトのシンクからサービス アカウントの認証情報を取得するには、次のコマンドを実行します。
FLEET_HOST_PROJECT_ID=FLEET_HOST_PROJECT_ID FLEET_HOST_PROJECT_NUMBER=$(gcloud projects describe "${FLEET_HOST_PROJECT_ID}" --format "value(projectNumber)") gcloud logging sinks --project=GKE_PROJECT_ID describe fleet-o11y-${FLEET_HOST_PROJECT_NUMBER}-default
ログシンクが見つからないというエラーが返された場合は、1~2 分後にコマンドを再実行してみてください。次の例に示すように、シンクの説明の
writerIdentity
フィールドでサービス アカウントを確認できます。createTime: '2023-04-06T02:26:54.716195307Z' destination: logging.googleapis.com/projects/123456/locations/global/buckets/_Default filter: xxx name: fleet-o11y-default updateTime: '2023-04-06T19:03:51.598668462Z' writerIdentity: serviceAccount:service-123456@gcp-sa-logging.iam.gserviceaccount.com
取得したサービス アカウントに
roles/logging.bucketWriter
のロールを付与します。gcloud projects add-iam-policy-binding FLEET_HOST_PROJECT_ID \ --member "SERVICE_ACCOUNT" \ --role "roles/logging.bucketWriter"
ここで
- SERVICE_ACCOUNT は、前の手順で取得したサービス アカウントの名前です。例:
gcloud projects add-iam-policy-binding FLEET_HOST_PROJECT_ID \ --member "serviceAccount:service-123456@gcp-sa-logging.iam.gserviceaccount.com" \ --role "roles/logging.bucketWriter"
チームにログへのアクセス権を付与する
このセクションでは、コンテナログと Pod ログを表示するアクセス権をユーザーに付与する方法について説明します。
フリート プロジェクトの IAM ポリシーを取得し、JSON 形式のローカル ファイルに書き込みます。
gcloud projects get-iam-policy FLEET_HOST_PROJECT_ID --format json > output.json
ユーザー アカウントが、作成したログバケットからデータを表示できる IAM 条件を追加します。コンテナログと Pod ログを表示する例を次に示します。
{ "bindings": [ { "members": [ "user:USER_ACCOUNT_EMAIL" ], "role": "roles/logging.viewAccessor", "condition": { "title": "Bucket reader condition example", "description": "Grants logging.viewAccessor role to user USER_ACCOUNT_EMAIL for the fleet-o11y-scope-SCOPE_NAME-k8s_container and fleet-o11y-scope-SCOPE_NAME-k8s_pod log view.", "expression": "resource.name == \"projects/FLEET_HOST_PROJECT_ID/locations/global/buckets/fleet-o11y-scope-SCOPE_NAME/views/fleet-o11y-scope-SCOPE_NAME-k8s_container\" || resource.name == \"projects/FLEET_HOST_PROJECT_ID/locations/global/buckets/fleet-o11y-scope-SCOPE_NAME/views/fleet-o11y-scope-SCOPE_NAME-k8s_pod\"" } } ], }
IAM ポリシーを更新します。
gcloud projects set-iam-policy FLEET_HOST_PROJECT_ID output.json
アクセス権の付与に関するその他のオプションについては、ログビューへのアクセスを制御するをご覧ください。
フリートのログを表示する
プラットフォーム管理者は、すべての Namespace のすべてのログを表示できます。
デフォルトログ
フリートホスト プロジェクトの _Default
バケットのすべてのデフォルトログを表示するには、次の URL の変数を入力して、ブラウザにコピーして貼り付けます。
https://console.cloud.google.com/logs/query;query=;storageScope=storage,projects%2FFLEET_HOST_PROJECT_ID%2Flocations%2Fglobal%2Fbuckets%2F_Default%2Fviews%2F_Default?jsmode=O&mods=pan_ng2&project=FLEET_HOST_PROJECT_ID
フリート スコープのコンテナログと Pod ログ
サービス オペレーターは、アクセス権のある Namespace 内のログを表示できます。特定のフリート スコープ内のすべての Namespace 内のログを表示するには、次の手順を完了します。
フリート ホスト プロジェクトを選択して、Google Cloud コンソールの [チーム] セクションに移動します。
ログを表示するチームスコープをクリックして、[ログ] タブをクリックします。
[コンテナログ] または [Pod ログ] を選択して、ログビューをフィルタリングします。
スコープ内の特定の Namespace のログを表示するには、次のようにします。
- [チーム] ページで、チームスコープを選択して、[Namespaces] タブをクリックします。
- ログを表示する Namespace をクリックし、[ログ] タブをクリックします。
- [コンテナログ] と [Pod ログ] のいずれかを選択して、ログビューをフィルタリングします。
別の方法として、コンテナログを表示するには、次の URL の変数を入力して、ブラウザにコピーして貼り付けます。
https://console.cloud.google.com/logs/query;query=;storageScope=storage,projects%2FFLEET_HOST_PROJECT_ID%2Flocations%2Fglobal%2Fbuckets%2Ffleet-o11y-scope-SCOPE_NAME%2Fviews%2Ffleet-o11y-scope-SCOPE_NAME-k8s_container?jsmode=O&mods=pan_ng2&project=FLEET_HOST_PROJECT_ID
特定のフリート スコープで Pod ログを表示するには、次の URL の変数を入力して、ブラウザにコピーして貼り付けます。
https://console.cloud.google.com/logs/query;query=;storageScope=storage,projects%2FFLEET_HOST_PROJECT_ID%2Flocations%2Fglobal%2Fbuckets%2Ffleet-o11y-scope-SCOPE_NAME%2Fviews%2Ffleet-o11y-scope-SCOPE_NAME-k8s_pod?jsmode=O&mods=pan_ng2&project=FLEET_HOST_PROJECT_ID
ログデータを分析する方法について詳しくは、ログ エクスプローラのインターフェースをご覧ください。
フリート ロギングを無効にする
フリート ロギング機能を無効にするには、次の手順を完了します。
gcloud
次の構成を
disable_logging_config.json
という名前のファイルに保存します。{ "loggingConfig": {} }
fleetobservability
機能仕様を更新します。gcloud container fleet fleetobservability update \ --logging-config=disable_logging_config.json
Terraform
Terraform 構成で、ログ ルーティングのすべてのモードを MODE_UNSPECIFIED
に更新します。以下に例を示します。
resource "google_gke_hub_feature" "feature" {
name = "fleetobservability"
location = "global"
spec {
fleetobservability {
logging_config {
default_config {
mode = "MODE_UNSPECIFIED"
}
fleet_scope_logs_config {
mode = "MODE_UNSPECIFIED"
}
}
}
}
}
機能仕様が更新されていることを確認します。
gcloud container fleet fleetobservability describe
出力には、構成で更新された fleetobservability
仕様が表示されます。
createTime: '2022-09-30T16:05:02.222568564Z' membershipStates: projects/123456/locations/global/memberships/cluster-1: state: code: OK description: Fleet monitoring enabled. updateTime: '2023-04-03T20:22:51.436047872Z' name: projects/123456/locations/global/features/fleetobservability resourceState: state: ACTIVE spec: fleetobservability: loggingConfig: {} state: state: {} updateTime: '2023-04-03T20:38:17.719596966Z'
fleetobservability
仕様に変更を加えると、適用されるまでに数分かかることがあります。
フリート ロギングを無効にすると、ログシンクと除外フィルタがプロジェクトから削除されます。ただし、スコープに作成されたすべてのログバケットと、ログバケットに作成されたログビューは保持されます。フリート ホスト プロジェクトのログバケットを削除するには、バケットを削除するをご覧ください。
ログバケットの保持期間を更新する
ログバケットのデフォルトの保持期間は 30 日です。この期間を更新するには、次のコマンドを実行します。
gcloud logging buckets update fleet-o11y-scope-SCOPE_NAME --location=global --retention-days=RETENTION_DAYS
ここで
SCOPE_NAME はフリート スコープの名前です。
RETENTION_DAYS は、新しい保持期間の日数です。ログバケットの構成のオプションについては、バケットの管理をご覧ください。
バケットの保持期間を延長した場合、保持ルールはそれ以降に適用され、過去に遡った適用はありません。ログは、該当する保持期間が終了すると復元できなくなります。
API リファレンス
このセクションでは、fleetobservability
オブジェクトに追加できるフィールドについて説明します。
fleetobservability
fleetobservability
はフリートのオブザーバビリティ構成を定義します。
フィールド | 説明 | スキーマ | 省略可 |
---|---|---|---|
loggingConfig | フリート全体でフリート ロギング機能を有効にするかどうかを指定します。 指定しない場合、フリート全体でフリート ロギング機能が無効になります。 |
loggingConfig | True |
loggingConfig
loggingConfig
は、フリート オブザーバビリティにおけるフリート ロギング機能の構成を定義します。
フィールド | 説明 | スキーマ | 省略可 |
---|---|---|---|
defaultConfig | フリートのデフォルトログのログ ルーティング動作を設定します。 | routingConfig | True |
fleetScopeLogsConfig | フリート スコープのログのログ ルーティング動作を設定します。 | routingConfig | True |
routingConfig
routingConfig
は、フリート ロギング機能におけるログ ルーティング モードの構成を定義します。
フィールド | 説明 | スキーマ | 省略可 |
---|---|---|---|
モード | 指定すると、ログ ルーティングが有効になります。未指定または MODE_UNSPECIFIED にすると、ログ ルーティングが無効になります。 COPY に設定すると、ログは宛先プロジェクトにコピーされます。 MOVE に設定すると、ログは宛先プロジェクトに移動されます。 |
文字列、MOVE、COPY、MODE_UNSPECIFIED のいずれか | True |
命名に関する制限事項
フリート オブザーバビリティが有効になっている場合、フリート オブザーバビリティ コントローラは、作成するログ オブジェクトに次の名前を予約します。望ましくないまたは予期しない動作を回避するには、独自のログバケット、シンクを作成するとき、および除外フィルタを設定するときに、これらの名前の使用を避けてください。
有効になっている機能 | 作成するオブジェクト | フリート オブザーバビリティで使用される名前 |
---|---|---|
defaultConfig |
シンク | fleet-o11y-FLEET_PROJECT_NUMBER-default |
除外フィルタ | fleet-o11y-FLEET_PROJECT_NUMBER-default-exclusion 。この名前は、クラスタ プロジェクトの _Default シンク用に予約されています。 |
|
fleetScopeLogsConfig |
ログバケット | fleet-o11y-scope-SCOPE_NAME |
fleet-o11y-scope-SCOPE_NAME-k8s_container |
||
fleet-o11y-scope-SCOPE_NAME-k8s_pod |
||
シンク | fleet-o11y-FLEET_PROJECT_NUMBER-scope-SCOPE_NAME |
|
除外フィルタ | fleet-o11y-FLEET_PROJECT_NUMBER-scope-exclusion |
トラブルシューティング
このセクションでは、フリート ロギングに関する問題を解決する方法について説明します。
シンク構成エラーに関するメール通知
[ACTION REQUIRED] Cloud Logging sink configuration error in <Your GCP Project>
という件名のメールを受信した場合、ログシンクのサービス アカウントにはシンクの宛先にログを書き込む権限がありません。この問題を解決するには、プロジェクト間のロギング権限の手順を行います。
Cloud Logging UI に不明なエラー メッセージが表示される
Cloud Logging UI に次のエラーが表示された場合は、URL に入力された project_id
変数と scope
変数が正しいことを再確認します。
Error: There is an unknown error while executing this operation.
メンバーシップが見つからないエラー
次のエラーが表示される場合があります。
ERROR: (gcloud.alpha.container.fleet.memberships.bindings.create) NOT_FOUND: Resource 'parent resource not found for projects/...' was not found
フリートにクラスタを登録していることを確認してください。