ホスト メンテナンス イベントのモニタリングと計画


各仮想マシン(VM)インスタンスまたはベアメタル インスタンスは、ホスト メンテナンス ポリシーを使用して、メンテナンス オペレーション中のインスタンスの動作を決定します。一部のインスタンスは、メンテナンス スケジュールを事前に表示するオプションも用意されています。

このページでは、Compute Engine インスタンスでホスト メンテナンス イベントをモニタリングし、計画する方法について説明します。

始める前に

  • まだ設定していない場合は、認証を設定します。認証とは、Google Cloud サービスと API にアクセスするために ID を確認するプロセスです。ローカル開発環境からコードまたはサンプルを実行するには、次のように Compute Engine に対する認証を行います。

    Select the tab for how you plan to use the samples on this page:

    Console

    When you use the Google Cloud console to access Google Cloud services and APIs, you don't need to set up authentication.

    gcloud

    1. Install the Google Cloud CLI, then initialize it by running the following command:

      gcloud init
    2. Set a default region and zone.
    3. REST

      このページの REST API サンプルをローカル開発環境で使用するには、gcloud CLI に指定した認証情報を使用します。

        Install the Google Cloud CLI, then initialize it by running the following command:

        gcloud init

      詳細については、Google Cloud 認証ドキュメントの REST を使用して認証するをご覧ください。

必要なロール

インスタンスの作成とインスタンスのメンテナンスの管理に必要な権限を取得するには、プロジェクトに対する次の IAM ロールを付与するよう管理者に依頼してください。

ロールの付与については、プロジェクト、フォルダ、組織へのアクセス権の管理をご覧ください。

これらの事前定義ロールには、インスタンスの作成とインスタンスのメンテナンスの管理に必要な権限が含まれています。必要とされる正確な権限については、「必要な権限」セクションを開いてご確認ください。

必要な権限

インスタンスを作成し、インスタンスのメンテナンスを管理するには、次の権限が必要です。

  • メタデータを含むインスタンスに関する情報を取得する: compute.instances.get

カスタムロールや他の事前定義ロールを使用して、これらの権限を取得することもできます。

制限事項

インスタンスの今後のメンテナンス イベントに関するメンテナンス通知を表示するには、インスタンスが次のいずれかのマシン ファミリーのマシンタイプを実行している必要があります。

メンテナンス通知の概要

Google はいくつかの方法で、今後のホスト メンテナンスに関する通知を送信します。メンテナンスの時間枠の開始時刻が到来すると、Google Cloud はインスタンスのメンテナンスを自動的に実施します。インスタンスの今後のメンテナンスの時間枠をモニタリングすると、中断を最小限に抑えながら、今後のメンテナンスを処理するワークロードをプロアクティブに準備できます。

メンテナンス イベント通知をサポートするコンピューティング インスタンスには、次の特性があります。

  • メンテナンス イベントが少ない: 一般に、定期的なメンテナンス間隔があるインスタンスでは、表示されるメンテナンス イベントも少なくなります。
  • 長期のメンテナンス通知: 計画を立てられるようにメンテナンス イベントに関する通知を十分に前もって受け取ります。
  • モニタリングと計画: Cloud Logging を使用してメンテナンス スケジュールを追跡します。インシデントとアラートを使用して最新情報を入手します。
  • オンデマンド メンテナンス管理: 通知期間中にメンテナンスを開始し、スケジュールに合わせてインスタンスを更新します。

今後の通知イベントに関する情報は、次のような形式で表示されます。

upcomingMaintenance:{
    "canReschedule":True
    "latestWindowStartTime": "2024-12-01T19:00:01Z"
    "maintenanceStatus":"PENDING"
    "type":"SCHEDULED"
    "windowEndTime": "2024-12-01T22:00:00Z"
    "windowStartTime": "2024-12-01T19:00:00Z"
}

今後のメンテナンス イベントがない場合は、次のようなメッセージが表示されます。

{ "error": "no notifications have been received yet, try again later" }

メンテナンス ステータスの定義

次のステータス定義では、インスタンスのホスト メンテナンスに関するクエリに対するレスポンスについて説明します。これらはメンテナンス イベントに関する情報を提供します。Google Cloud CLI、REST、メタデータ サーバーは、以下に示す同じレスポンスを使用します。

  • canReschedule: このインスタンスの通知期間中にメンテナンスを手動で開始できるかどうか。
    • TRUE: お客様がトリガーしたメンテナンスは通知期間中に実施できます。
    • FALSE: このインスタンスでは、お客様がトリガーするメンテナンスを実施できません。これは、インスタンスのメンテナンス期間中や、インスタンスのタイプがオンデマンド メンテナンスに対応していない場合によく発生します。
  • latestWindowStartTime: メンテナンスの時間枠を移動できる最も遅い時刻。
  • maintenanceStatus: メンテナンス イベントの現在のステータス。
    • ONGOING: メンテナンス オペレーションが進行中。
    • PENDING: メンテナンス オペレーションはスケジュールされていますが、まだ開始されていません。
  • type: 実施するメンテナンスのタイプ
    • NONE: このインスタンスではメンテナンスはスケジュールされていません。
    • SCHEDULED: 無停止でのメンテナンスの場合、Compute Engine はほとんどのインスタンスに 7 日以上前に通知します。X4 インスタンスには約 60 日前に通知されます。
    • UNSCHEDULED: メンテナンスは重要な更新であるため、Compute Engine は可能な限り事前に通知するよう努めますが、通常はスケジュールされたメンテナンス イベントよりもはるかに短くなります。
  • windowEndTime: メンテナンスが行われる時間枠の終了時刻。
  • windowStartTime: メンテナンスが行われる時間枠の開始時刻。

メンテナンス ステータスの動作

メンテナンス イベントを管理する際は、canReschedulemaintenanceStatus の値を確認します。これらのフィールドを組み合わせると、メンテナンス イベントのスケジュール変更に関して実施できる操作と実施できない操作が示されます。

  • canReschedule=TruemaintenanceStatus=Pending - スケジュールされた開始時間より前に、インスタンスのメンテナンス イベントを手動で開始できます。
  • canReschedule=FalsemaintenanceStatus=Ongoing - メンテナンスが進行中であり、スケジュールを変更できません。
  • canReschedule=FalsemaintenanceStatus=Pending - インスタンスは手動トリガーのメンテナンス イベントをサポートしていません。

メンテナンス通知を表示する

メンテナンス通知を確認するには、コンピューティング インスタンス、メタデータ サーバー、または Cloud Logging にクエリを実行します。

インスタンスでメンテナンス イベント通知を確認する

Google Cloud CLI、REST、またはメタデータ サーバーのクエリを使用して、インスタンスのホスト メンテナンス イベントが予定されているかどうかを確認します。

gcloud

インスタンスの今後のメンテナンスの時間枠を確認するには、gcloud compute instances describe コマンドを使用します。

gcloud compute instances describe INSTANCE_NAME \
   --zone=ZONE_NAME --format="yaml(upcomingMaintenance)"

次のように置き換えます。

  • INSTANCE_NAME: コンピューティング インスタンスの名前。
  • ZONE_NAME: インスタンスが存在するゾーン。

今後のメンテナンス イベントがある場合、レスポンスには次のようなセクションが含まれます。

  upcomingMaintenance:{
    "canReschedule":True
    "latestWindowStartTime": "2024-12-01T19:00:01Z"
    "maintenanceStatus":"PENDING"
    "type":"SCHEDULED"
    "windowEndTime": "2024-12-01T22:00:00Z"
    "windowStartTime": "2024-12-01T19:00:00Z"
  }

このレスポンスの内容:

  • windowStartTime に表示されている日時にメンテナンスがスケジュールされます。
  • canRescheduleTrue に、maintenanceStatusPENDING に設定します。これらの設定は、latestWindowStartTime に表示されている日付より前に、スケジュールされたメンテナンス イベントを手動で開始できることを示します。

REST

インスタンスに今後のメンテナンスがあるかどうかを確認するには、instances.get メソッドを使用して GET リクエストを作成します。

GET https://compute.googleapis.com/compute/v1/projects/PROJECT_NAME/zones/ZONE/instances/INSTANCE_NAME

次のように置き換えます。

  • PROJECT_NAME: コンピューティング インスタンスを含むプロジェクトの名前。
  • ZONE: インスタンスが配置されているゾーン。
  • INSTANCE_NAME: インスタンスの名前。

今後のメンテナンス イベントがある場合、レスポンスには次のようなセクションが含まれます。

  upcomingMaintenance:{
    "canReschedule":True
    "latestWindowStartTime": "2023-12-01T19:00:01Z"
    "maintenanceStatus":"PENDING"
    "type":"SCHEDULED"
    "windowEndTime": "2023-12-01T22:00:00Z"
    "windowStartTime": "2023-12-01T19:00:00Z"
  }

このレスポンスの内容:

  • windowStartTime に表示されている日時にメンテナンスがスケジュールされます。
  • canRescheduleTrue に、maintenanceStatusPENDING に設定します。これらの設定は、latestWindowStartTime に表示されている日付より前に、スケジュールされたメンテナンス イベントを手動で開始できることを示します。

メタデータ サーバー

ゲスト OS からメタデータ サーバーにクエリを実行して、次のメンテナンス イベントを確認します。

$ curl http://metadata.google.internal/computeMetadata/v1/instance/upcoming-maintenance?alt=json -H "Metadata-Flavor: Google"

Cloud Logging でメンテナンス イベント通知を確認する

Compute Engine は、メンテナンス イベントのインスタンスの Cloud Audit Logs にシステム イベントを作成します。これらのイベントは、メンテナンス イベントの前、最中、後に Cloud Loggingログ エクスプローラを使用して確認できます。

コンソール

インスタンスのメンテナンス通知の監査ログをクエリするには、次の操作を行います。

  1. [VM インスタンス] ページに移動します。

    [VM インスタンス] に移動

  2. メンテナンス通知を表示するインスタンスの名前をクリックします。

    インスタンスの詳細ページが開きます。

  3. [ログ] セクションで、[Logging] というリンクをクリックします。

    ログ エクスプローラのクエリエディタ ページが開きます。[クエリ] ペインには、インスタンスの resource.type とインスタンス ID がすでに入力されています。

  4. [クエリ] ペインで、クエリに次の行を追加します。

    operation.producer="compute.instances.upcomingMaintenance" OR
    "compute.instances.terminateOnHostMaintenance" OR
    "compute.instances.migrateOnHostMaintenance"
    
  5. [クエリを実行] をクリックします。一致するメンテナンス通知イベントがクエリ結果ペインに表示されます。

    クエリ結果ペインで [日時を編集する] をクリックすると、検索期間を拡大することや、特定の日時で結果を絞り込むことができます。

  6. ログエントリをクリックすると、メンテナンス通知の詳細が表示されます。

    1. 今後のメンテナンス通知については、見出し metadata を開いて、現在のステータス、タイプ、スケジュールされたメンテナンスの時間枠の開始時間と終了時間などの情報を表示します。
    2. 見出し status を開くと、通知の説明メッセージが表示されます。

メンテナンス通知の例

インスタンスのメンテナンス イベント通知がログ エクスプローラに次のような値で表示されます。

  • methodName: "compute.instances.upcomingMaintenance"
  • metadata:
    • maintenanceStatus: "PENDING"
    • windowStartTime: "2024-07-23T20:00:00Z"

メンテナンス イベントが開始すると、次のような値を持つ新しい情報イベントがログに表示されます。

  • methodName: "compute.instances.upcomingMaintenance"
  • metadata:
    • maintenanceStatus: "ONGOING"
    • windowStartTime: "2024-07-23T20:00:00Z"

メンテナンス イベント中、インスタンスのホスト メンテナンス ポリシーの構成に応じて、次のいずれかのシステム イベントが監査ログに記録されます。

  • メンテナンス イベント中にライブ マイグレーションを使用するように構成されているインスタンスの場合、methodName: "compute.instances.migrateOnHostMaintenance" を含むシステム イベント。
  • メンテナンス イベント中に終了するように構成されたインスタンスの場合、methodName: "compute.instances.terminateOnHostMaintenance" を含むシステム イベント。

メンテナンス イベントが終了すると、次のような値を持つ新しい情報イベントが監査ログに表示されます。

  • methodName: "compute.instances.upcomingMaintenance"
  • status: { message: "Maintenance window has completed for this instance. All maintenance notifications on the instance have been removed." }

ホストのメンテナンス通知のアラートを構成する

ログベースのアラート ポリシーを設定して、特定のメンテナンス通知イベントを検索し、通知チャンネルを使用してアラートを送信できます。

コンソール

インスタンスのメンテナンス イベントのアラートを作成するには、次の操作を行います。

  1. [VM インスタンス] ページに移動します。

    [VM インスタンス] に移動

  2. メンテナンス イベント アラートを作成するインスタンスの名前をクリックします。

    インスタンスの詳細ページが開きます。

  3. [ログ] セクションで、[Logging] というリンクをクリックします。

    ログ エクスプローラのクエリエディタ ページが開きます。[クエリ] ペインには、インスタンスの resource.type とインスタンス ID がすでに入力されています。

  4. [クエリ] ペインで、クエリに次の行を追加します。

    operation.producer="compute.instances.upcomingMaintenance"
    
  5. [クエリを実行] をクリックします。一致するメンテナンス通知イベントがクエリ結果ペインに表示されます。

  6. クエリ結果ペインで、[日時を編集する] をクリックします。

    1. 編集ウィンドウの左側にある [相対時間] フィールドに 1d と入力して、過去 1 週間のログエントリを表示します。
    2. [適用] をクリックします。
  7. [クエリ結果] ペインの上部にある、 [アラートを作成] をクリックします。表示ウィンドウの幅が狭い場合、[アラートを作成] オプションは [その他の操作] メニューに表示されます。

  8. [ログベースのアラート ポリシーの作成] ペインの [アラートの詳細] セクションで、次の操作を行います。

    1. アラート ポリシーの名前を入力します(例: Upcoming maintenance for my-c3d-vm@us-central1-b)。
    2. [Policy severity level] メニューから [No severity] を選択します。

    3. [ドキュメント] フィールドに、アラート ポリシーの説明を入力できます。通知の受信者が問題を診断する際に有用な情報を表示することもできます。次の文字列では、アラートの理由を要約しています。

      Log-based alerting policy in project ${project} to monitor upcoming
      maintenance notifications. See also "Host maintenance alerts" and
      "onHostMaintenance actions" alerting policies.
      

      このフィールドの内容のフォーマットと調整の詳細については、ドキュメント テンプレートでマークダウンと変数を使用するをご覧ください。

    4. 次のステップに進むには、[次へ] をクリックします。

  9. [アラートに含めるログを選択] セクションで、[ログをプレビュー] をクリックしてクエリと結果を確認します。

    [クエリ] ペインで作成したクエリもこのペインに表示されます。まず、ログ エクスプローラの [クエリ] ペインでクエリを作成することをおすすめします。

    必要に応じて、このペインでクエリを編集できます。クエリを編集する場合は、[ログをプレビュー] をクリックして結果を確認します。

  10. [次へ] をクリックします。

  11. [通知頻度と自動クローズ期間の設定] ペインで、次のようにします。

    1. 通知間の最小時間を選択します。この値により、この条件が複数回満たされた場合に Monitoring から受信する通知の数を制御できます。この例では、オプションから [1 日] を選択します。

    2. [インシデントの自動クローズ期間] には、最大値の 7 日間を使用します。

    3. [次へ] をクリックします。

  12. すでにメール通知チャンネルを構成している場合は、リストからそれを選択できます。そうでない場合は、[通知チャンネルを管理] をクリックしてメール チャンネルを追加します。通知チャンネルの作成については、通知チャンネルの作成と管理をご覧ください。

  13. [保存] をクリックします。

    これで、ログベースのアラート ポリシーの例をテストするで説明されているように、ログベースのアラート ポリシーをテストできるようになりました。

詳細については、ログベースのアラートを構成する通知チャンネルの作成と管理をご覧ください。

次のステップ