VM の健全性の変化をモニタリングする


このドキュメントでは、マネージド インスタンス グループ(MIG)内の VM に関する健全性の変更ログエントリを表示して読み取る方法について説明し、グループ内の VM のモニタリングに役立つ特定のユースケースを提供します。

MIG にアプリケーション ベースのヘルスチェックを構成している場合、Compute Engine は、マネージド インスタンスの健全性が変化するたびに(インスタンスが HEALTHY 状態から UNHEALTHY 状態になった場合など)、ログエントリを書き込みます。これらのログエントリは、マネージド インスタンスの状態と MIG の全体的な状態のモニタリングとデバッグに役立ちます。

始める前に

  • ヘルスチェックと自動修復の設定を確認します。
  • まだ設定していない場合は、認証を設定します。認証とは、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 を使用して認証するをご覧ください。

料金

Compute Engine は、Cloud Logging を使用してマネージド インスタンスの状態変化に関するログエントリを生成します。Cloud Logging では、毎月の無料割り当て量が提供されます。無料割り当て量を超過したログエントリについては、データ ボリュームによって課金されます。詳細については、Cloud Logging の料金の概要をご覧ください。

ロギングの費用が発生しないようにするには、健全性変更ログを無効にします。

健全性変更ログを表示する

健全性変更ログが有効な場合、Compute Engine は、マネージド インスタンスの健全性が変化するたびにプラットフォーム ログにログエントリを書き込みます。プロジェクト、特定の MIG、または特定のマネージド インスタンスのログを表示できます。

プロジェクトまたは MIG のログを表示する

プロジェクトまたは特定の MIG のログエントリを表示するには、Google Cloud コンソール、gcloud CLI、または REST を使用します。

コンソール

  1. Google Cloud Console のログ エクスプローラにに移動します。

    [ログ エクスプローラ] に移動

  2. 次のクエリ パラメータを設定します。

    • リソース - GCE インスタンス グループ マネージャー
    • ログ名 - instance_group_manager_events
  3. または、クエリビルダーで次のクエリをコピーします。

    resource.type="gce_instance_group_manager" AND
    logName="projects/PROJECT_ID/logs/compute.googleapis.com%2Finstance_group_manager_events" AND
    jsonPayload.instanceHealthStateChange:*
    

    次のクエリを使用すると、検索結果を特定のマネージド インスタンス グループに絞り込むことができます。

    resource.type="gce_instance_group_manager" AND
    logName="projects/PROJECT_ID/logs/compute.googleapis.com%2Finstance_group_manager_events" AND
    jsonPayload.instanceHealthStateChange:* AND
    resource.labels.instance_group_manager_name="MIG_NAME"
    
  4. [クエリを実行] をクリックします。[クエリ結果] にログが表示されます。

gcloud

gcloud logging read コマンドを使用して、ログエントリを表示します。

プロジェクト内のすべての健全性変更ログを表示するには、次のコマンドを使用します。

gcloud logging read 'resource.type="gce_instance_group_manager" AND
    logName="projects/PROJECT_ID/logs/compute.googleapis.com%2Finstance_group_manager_events" AND
    jsonPayload.instanceHealthStateChange:*'\
    --limit 10

特定のマネージド インスタンス グループのすべての健全性変更ログを表示するには、次のコマンドを使用します。

gcloud logging read 'resource.type="gce_instance_group_manager" AND
    logName="projects/PROJECT_ID/logs/compute.googleapis.com%2Finstance_group_manager_events" AND
    jsonPayload.instanceHealthStateChange:* AND
    resource.labels.instance_group_manager_name="MIG_NAME"' \
    --limit 10

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

REST

健全性変更ログを表示するには、entries.list メソッドPOST リクエストを送信します。

プロジェクト内のすべての健全性変更ログを表示するには、次のコマンドを使用します。

curl -H "Content-Type: application/json" -H "Authorization: Bearer OAUTH2_TOKEN" -X POST -d \
'{"filter":
    "resource.type=gce_instance_group_manager AND
    logName=projects/PROJECT_ID/logs/compute.googleapis.com%2Finstance_group_manager_events AND
    jsonPayload.instanceHealthStateChange:*",
    "orderBy": "timestamp desc",
    "pageSize": 10,
    "resourceNames": ["projects/PROJECT_ID"]
}' https://logging.googleapis.com/v2/entries:list?alt=json

特定のマネージド インスタンス グループの健全性変更ログを表示するには、次のコマンドを使用します。

curl -H "Content-Type: application/json" -H "Authorization: Bearer OAUTH2_TOKEN" -X POST -d \
'{"filter":
    "resource.type=gce_instance_group_manager AND
    logName=projects/PROJECT_ID/logs/compute.googleapis.com%2Finstance_group_manager_events AND
    jsonPayload.instanceHealthStateChange:* AND
    resource.labels.instance_group_manager_name=MIG_NAME",
    "orderBy": "timestamp desc",
    "pageSize": 10,
    "resourceNames": ["projects/PROJECT_ID"]
}' https://logging.googleapis.com/v2/entries:list?alt=json

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

  • OAUTH2_TOKEN: アプリケーションのアクセス トークン。ローカルテストでは、gcloud auth print-access-token コマンドを使用してトークンを生成できます。
  • PROJECT_ID: 実際のプロジェクト ID
  • MIG_NAME: 健全性変更ログを表示する MIG。

各ログエントリの詳細については、ログエントリの形式をご覧ください。

ログをアーカイブするのか、ログを分析に使用するのか、ログを他のアプリケーションにストリーミングするのか、また Cloud Functions の関数をトリガーするかどうかに応じて、ログを Cloud Storage、BigQuery、Pub/Sub などにエクスポートできます。ログのエクスポートの詳細については、ログのエクスポートの概要をご覧ください。

特定の VM の健全性変更ログを表示する

特定のマネージド インスタンスのログエントリを表示するには、Google Cloud コンソール、gcloud CLI、または REST を使用します。

コンソール

  1. Google Cloud Console のログ エクスプローラにに移動します。

    [ログ エクスプローラ] に移動

  2. クエリビルダーで次のクエリをコピーします。

    resource.type="gce_instance_group_manager" AND
    logName="projects/PROJECT_ID/logs/compute.googleapis.com%2Finstance_group_manager_events" AND
    jsonPayload.instanceHealthStateChange:* AND
    labels."compute.googleapis.com/instance_name"="INSTANCE_NAME"
    
  3. [クエリを実行] をクリックします。

gcloud

gcloud logging read コマンドを使用して、ログエントリを表示します。

マネージド インスタンスの健全性変更ログを表示するには、次のコマンドを使用します。

gcloud logging read 'resource.type="gce_instance_group_manager" AND
    logName="projects/PROJECT_ID/logs/compute.googleapis.com%2Finstance_group_manager_events" AND
    jsonPayload.instanceHealthStateChange:* AND
    labels."compute.googleapis.com/instance_name"="INSTANCE_NAME"' \
    --limit 10

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

  • PROJECT_ID: 実際のプロジェクト ID
  • INSTANCE_NAME: 健全性変更ログを表示するマネージド インスタンス。

REST

マネージド インスタンスの健全性変更ログを表示するには、entries.list メソッドPOST リクエストを送信します。

curl -H "Content-Type: application/json" -H "Authorization: Bearer OAUTH2_TOKEN" -X POST -d \
'{"filter":
    "resource.type=gce_instance_group_manager AND
        logName=projects/PROJECT_ID/logs/compute.googleapis.com%2Finstance_group_manager_events AND
        jsonPayload.instanceHealthStateChange:* AND
        labels.\"compute.googleapis.com/instance_name\"=\"INSTANCE_NAME\"",
    "orderBy": "timestamp desc",
    "pageSize": 10,
    "resourceNames": ["projects/PROJECT_ID"]
}' https://logging.googleapis.com/v2/entries:list?alt=json

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

  • OAUTH2_TOKEN: アプリケーションのアクセス トークン。ローカルテストでは、gcloud auth print-access-token コマンドを使用してトークンを生成できます。
  • PROJECT_ID: 実際のプロジェクト ID
  • INSTANCE_NAME: 健全性変更ログを表示するマネージド インスタンス。

ログエントリの形式

インスタンスの健全性変更ログエントリには、マネージド インスタンスの状態のモニタリングとデバッグに役立つ情報が記録されています。

これらのログは、プラットフォーム ログinstance_group_manager_events という名前で書き込まれます。プラットフォーム ログは、問題のデバッグやトラブルシューティングに役立ちます。

logName="projects/PROJECT_ID/logs/compute.googleapis.com%2Finstance_group_manager_events"

健全性変更ログエントリには、次のタイプの情報が含まれています。

  • 重大度、プロジェクト ID、MIG の名前と ID、プロジェクト番号、タイムスタンプなど、ほとんどのログに含まれている一般情報
  • インスタンスの健全性に固有のフィールド。

健全性変更ログエントリの jsonPayload.instanceHealthStateChange フィールドには、次の情報が含まれています。

フィールド 説明
instance 文字列のプロジェクト ID とインスタンス名に基づくインスタンスの URL。
instanceWithId 数値のプロジェクト ID とインスタンス ID に基づくインスタンスの URL。
ipAddress ヘルスチェックによりプローブされるインスタンスの IP アドレス。
network 文字列のプロジェクト ID とネットワーク名に基づく、このインスタンスのネットワーク リソースの URL。
networkWithId 数値のプロジェクト ID とネットワーク ID に基づく、このインスタンスのネットワーク リソースの URL。
healthCheck マネージド インスタンス グループに構成されているヘルスチェックの URL。
previousDetailedHealthState インスタンスの以前の健全性。取りうる状態のリストについては、健全性をご覧ください。
detailedHealthState インスタンスの現在の健全性。取りうる状態のリストについては、健全性をご覧ください。
notificationTime 健全性が変化したときのタイムスタンプ。

通常、ブール型のログフィールドは、フィールドの値が true の場合にのみ表示されます。ブール型フィールドの値が false の場合、そのフィールドはログから省略されます。

ログフィールドには UTF-8 エンコードが適用されます。UTF-8 以外の文字列は、疑問符に置き換えられます。

ログエントリの例

次の例では、VM インスタンスの健全性が HEALTHY から UNHEALTHY に変化しています。

  {
    "logName": "projects/my-project/logs/compute.googleapis.com%2Finstance_group_manager_events",
    "resource": {
      "type": "gce_instance_group_manager",
      "labels": {
        "instance_group_manager_id": "3138236342290985981",
        "instance_group_manager_name": "my-mig",
        "project_id": "my-project",
        "location": "europe-west3"
      }
    },
    "labels": {
      "compute.googleapis.com/instance_id": "6498902454451155884",
      "compute.googleapis.com/instance_location": "europe-west3-a",
      "compute.googleapis.com/instance_name": "my-mig-a"
    },
    "timestamp": "2019-11-19T15:47:57.127Z",
    "severity": "INFO",
    "jsonPayload": {
      "@type": "type.googleapis.com/compute.InstanceGroupManagerEvent",
      "instanceHealthStateChange": {
        "instance": "projects/my-project/zones/europe-west3-a/instances/my-mig-a",
        "instanceWithId": "projects/123456/zones/europe-west3-a/instances/6498902454451155884",
        "ipAddress": "10.0.0.4",
        "network": "projects/my-project/global/networks/net-1",
        "networkWithId": "projects/123456/global/networks/456",
        "healthCheck": "projects/my-project/global/healthChecks/my-mig-health-check",
        "previousDetailedHealthState": "HEALTHY",
        "detailedHealthState": "UNHEALTHY",
        "notificationTime": "2019-11-19T15:47:56.444Z"
      }
    },
    "receiveTimestamp": "2019-11-19T15:47:57.296439184Z"
  }
  

ユースケース

健全性変更ログは、モニタリングまたはデバッグの次のシナリオで使用できます。

  • 特定の VM インスタンスの健全性が変化した回数を確認する。
  • MIG でインスタンスの健全性が変化した頻度を評価する。
  • 頻繁に UNHEALTHY 状態になる問題のある VM インスタンスを特定する。
  • 自動修復が試行された原因を特定する。
  • 特定の VM インスタンスの自動修復が成功したかどうかを確認する。
  • 自動修復の適切な初期遅延を決定して、アプリケーションのヘルスチェック構成を微調整する。

VM の健全性の変化をモニタリングする

VM インスタンスの健全性が変化する頻度をモニタリングするには、特定の VM の健全性の変化を追跡する指標を作成します。

指標を作成して変更をモニタリングするには、次の手順を行います。

  1. Google Cloud Console のログ エクスプローラにに移動します。

    [ログ エクスプローラ] に移動

  2. プロジェクト ID とインスタンス名を使用して、クエリビルダーに次のクエリを入力します。

    resource.type="gce_instance_group_manager" AND
    logName="projects/PROJECT_ID/logs/compute.googleapis.com%2Finstance_group_manager_events" AND
    jsonPayload.instanceHealthStateChange:* AND
    labels."compute.googleapis.com/instance_name"="INSTANCE_NAME"
    
  3. [クエリ結果] セクションで、[アクション] をクリックし、[指標を作成] をクリックします。

  4. [ログの指標の作成] ページで、次の操作を行います。

    1. [指標タイプ] を [Counter] に設定します。
    2. ログ指標の名前を入力します(例: health-mig-xyzq)。

      [フィルタの作成] セクションに、ログ エクスプローラのログクエリが表示されます。severity>=WARNING をフィルタに追加して、UNHEALTHYTIMEOUT などの中断状態のみを追跡するように指標フィルタを構成することもできます。

    3. [ラベル] で [ラベルを追加] をクリックします。

    4. ラベル名を入力します(例: health_state)。

    5. [Label type] を STRING に設定します。

    6. [フィールド名] を jsonPayload.instanceHealthStateChange.detailedHealthState に設定します。これにより、健全性の変化を区別できます。

    7. [完了] をクリックしてラベルを追加します。

    8. [指標を作成] をクリックします。

  5. [ログベースの指標] ページに移動して、新しく作成された指標を見つけます。

  6. 指標の行にあるメニュー をクリックして、[Metrics Explorer で表示する] を選択します。Metrics Explorer が開き、クエリで指定した VM インスタンスの健全性の変化を示すグラフが表示されます。

MIG 内のすべての VM の健全性の変化をモニタリングする

すべてのマネージド インスタンスの健全性の変化をモニタリングするには、マネージド インスタンスの健全性の変化を追跡する指標を作成します。

指標を作成して変更をモニタリングするには、次の手順を行います。

  1. Google Cloud Console のログ エクスプローラにに移動します。

    [ログ エクスプローラ] に移動

  2. プロジェクト ID とマネージド インスタンス グループの名前を使用して、クエリビルダーに次のクエリを入力します。

    resource.type="gce_instance_group_manager" AND
    logName="projects/PROJECT_ID/logs/compute.googleapis.com%2Finstance_group_manager_events" AND
    jsonPayload.instanceHealthStateChange:* AND
    resource.labels.instance_group_manager_name="MIG_NAME"
    
  3. [クエリ結果] セクションで、[アクション] をクリックし、[指標を作成] をクリックします。

  4. [ログの指標の作成] ページで、次の操作を行います。

    1. [指標タイプ] を [Counter] に設定します。
    2. ログ指標の名前を入力します(例: health-mig-xyzq)。
    3. [ラベル] で [ラベルを追加] をクリックします。
    4. ラベル名を入力します(例: health_state)。
    5. [Label type] を STRING に設定します。
    6. [フィールド名] を jsonPayload.instanceHealthStateChange.detailedHealthState に設定します。これにより、健全性の変化を区別できます。
    7. [完了] をクリックしてラベルを追加します。
    8. [指標を作成] をクリックします。
  5. [ログベースの指標] ページに移動して、新しく作成された指標を見つけます。

  6. 指標の行にあるメニュー をクリックして、[Metrics Explorer で表示する] を選択します。Metrics Explorer が開き、クエリで指定したマネージド インスタンス グループ内のすべての VM インスタンスの健全性の変化を示すグラフが表示されます。

頻繁に異常が発生する VM を特定する

頻繁に UNHEALTHY 状態になる問題のある VM を特定するには、MIG 内のすべての VM インスタンスの健全性の変化を追跡する指標を作成し、インスタンスごとに指標をグループ化します。

指標を作成してインスタンス別にグループ化するには、次の手順を行います。

  1. Google Cloud Console のログ エクスプローラにに移動します。

    [ログ エクスプローラ] に移動

  2. プロジェクト ID とマネージド インスタンス グループの名前を使用して、クエリビルダーに次のクエリを入力します。

    resource.type="gce_instance_group_manager" AND
    logName="projects/PROJECT_ID/logs/compute.googleapis.com%2Finstance_group_manager_events" AND
    jsonPayload.instanceHealthStateChange:* AND
    resource.labels.instance_group_manager_name="MIG_NAME"
    
  3. [クエリ結果] セクションで、[アクション] をクリックし、[指標を作成] をクリックします。

  4. [ログの指標の作成] ページで、次の操作を行います。

    1. [指標タイプ] を [Counter] に設定します。
    2. ログ指標の名前を入力します(例: health-mig-xyzq)。
    3. [ラベル] で [ラベルを追加] をクリックします。
    4. ラベル名を入力します(例: health_state)。
    5. [Label type] を STRING に設定します。
    6. [フィールド名] を jsonPayload.instanceHealthStateChange.detailedHealthState に設定します。これにより、健全性の変化を区別できます。
    7. [完了] をクリックしてラベルを追加します。
    8. 同様に、[instanceフィールド名] を jsonPayload.instanceHealthStateChange.instance に設定して、2 つ目のラベルを追加します。
    9. [指標を作成] をクリックします。
  5. [ログベースの指標] ページに移動して、新しく作成された指標を見つけます。

  6. 指標の行にあるメニュー をクリックして、[Metrics Explorer で表示する] を選択します。Metrics Explorer が開き、クエリで指定したマネージド インスタンス グループ内のすべての VM インスタンスの健全性の変化を示すグラフが表示されます。

  7. [Group By] を instance に設定して、各インスタンスの健全性の変化の合計数を確認します。

全体的に健全性が変化しているインスタンスは、最も頻繁に異常が発生するインスタンスです。

自動修復の原因を確認する

自動修復リクエストの原因を確認するには、特定の VM インスタンスの repair オペレーションのログをフィルタします。

修復オペレーションをフィルタするには、次の手順を行います。

  1. Google Cloud Console のログ エクスプローラにに移動します。

    [ログ エクスプローラ] に移動

  2. プロジェクト ID とインスタンス名を使用して、クエリビルダーに次のクエリを入力します。

    resource.type="gce_instance" AND
    logName="projects/PROJECT_ID/logs/cloudaudit.googleapis.com%2Fsystem_event" AND
    protoPayload.methodName="compute.instances.repair.recreateInstance" AND
    protoPayload.resourceName=~"/INSTANCE_NAME$"
    
  3. [クエリを実行] をクリックします。[クエリ結果] の protoPayload.status.message に、自動修復が試行された VM と自動修復の理由が示されます。

VM の自動修復が成功したかどうかを確認する

自動修復が成功したかどうか確認するには、VM インスタンス名で repair オペレーションと健全性変化のログをフィルタします。修復オペレーションの後にインスタンスの健全性が HEALTHY に変化している場合は、対応する健全性変更ログを確認します。手順は次のとおりです。

  1. Google Cloud Console のログ エクスプローラにに移動します。

    [ログ エクスプローラ] に移動

  2. プロジェクト ID とインスタンス名を使用して、クエリビルダーに次のクエリを入力します。

    (resource.type="gce_instance" AND
    logName="projects/PROJECT_ID/logs/cloudaudit.googleapis.com%2Fsystem_event" AND
    protoPayload.methodName="compute.instances.repair.recreateInstance" AND
    protoPayload.resourceName=~"/INSTANCE_NAME$")
    OR
    (resource.type="gce_instance_group_manager" AND
    logName="projects/PROJECT_ID/logs/compute.googleapis.com%2Finstance_group_manager_events" AND
    jsonPayload.instanceHealthStateChange:* AND
    labels."compute.googleapis.com/instance_name"="INSTANCE_NAME")
    

    クエリの最初の部分にはインスタンスの修復オペレーションが表示されます。これは、MIG の自動修復によって再作成がトリガーされ、インスタンスが正常な状態に戻ったことを示しています。クエリの 2 番目の部分には、VM インスタンスのすべての健全性の変化が表示されます。

    クエリ結果で、修復オペレーションの直後に detailedHealthStateHEALTHY に設定された健全性変更イベントがあれば、自動修復に成功しています。

MIG の初期遅延値を確認する

MIG の自動修復で適切な初期遅延値は、VM インスタンスの健全性ログを使用すると簡単に決めることができます。ログを使用すると、instances.insert オペレーションが終了してから、グループ内の一連のインスタンスで正常なシグナルを最初に受信するまでの時間をモニタリングできます。この間隔により、インスタンスが完全に起動するまでの時間がわかります。一部の VM は他の VM よりも起動時間が長くなる可能性があります。自動修復ポリシーで初期遅延を指定する場合は、モニタリングする初期化時間(挿入オペレーションから正常な状態に戻るまでの時間)にいくつかのマージンを追加することをおすすめします。

インスタンスの挿入オペレーションが実行されてからインスタンスが正常な状態になるまでの時間を測定するには、VM インスタンス名で insert オペレーションのログと健全性変更ログをクエリします。両方のオペレーションのタイムスタンプからインスタンスの初期化時間を計算します。手順は次のとおりです。

  1. Google Cloud Console のログ エクスプローラにに移動します。

    [ログ エクスプローラ] に移動

  2. プロジェクト ID とインスタンス名を使用して、クエリビルダーに次のクエリを入力します。

    (resource.type="gce_instance" AND
    logName="projects/PROJECT_ID/logs/cloudaudit.googleapis.com%2Factivity" AND
    protoPayload.request.@type="type.googleapis.com/compute.instances.insert" AND
    operation.last="true" AND
    protoPayload.resourceName=~"/INSTANCE_NAME$") OR
    (resource.type="gce_instance_group_manager" AND
    logName="projects/PROJECT_ID/logs/compute.googleapis.com%2Finstance_group_manager_events" AND
    jsonPayload.instanceHealthStateChange:* AND
    labels."compute.googleapis.com/instance_name"="INSTANCE_NAME")
    

    クエリの最初の部分には、VM 挿入オペレーションの完了が表示されます。2 番目の部分には、VM のすべての健全性の変更が表示されます。

    クエリ結果で、挿入オペレーションの直後にある、detailedHealthStateHEALTHY の健全性変更イベントのタイムスタンプが、この VM の起動に必要な時間を表しています。

  3. このプロセスをいくつかの VM で繰り返して、初期遅延パラメータのおおよその値を計算します。