このドキュメントでは、マネージド インスタンス グループ(MIG)内の VM に関する健全性の変更ログエントリを表示して読み取る方法について説明し、グループ内の VM のモニタリングに役立つ特定のユースケースを提供します。
MIG にアプリケーション ベースのヘルスチェックを構成している場合、Compute Engine は、マネージド インスタンスの健全性が変化するたびに(インスタンスが HEALTHY
状態から UNHEALTHY
状態になった場合など)、ログエントリを書き込みます。これらのログエントリは、マネージド インスタンスの状態と MIG の全体的な状態のモニタリングとデバッグに役立ちます。
始める前に
- ヘルスチェックと自動修復の設定を確認します。
-
まだ設定していない場合は、認証を設定します。認証とは、Google Cloud サービスと API にアクセスするために ID を確認するプロセスです。ローカル開発環境からコードまたはサンプルを実行するには、次のように Compute Engine に対する認証を行います。
このページのサンプルをどのように使うかに応じて、タブを選択してください。
コンソール
Google Cloud コンソールを使用して Google Cloud サービスと API にアクセスする場合、認証を設定する必要はありません。
gcloud
-
Install the Google Cloud CLI, then initialize it by running the following command:
gcloud init
- デフォルトのリージョンとゾーンを設定します。
REST
このページの REST API サンプルをローカル開発環境で使用するには、gcloud CLI に指定した認証情報を使用します。
Install the Google Cloud CLI, then initialize it by running the following command:
gcloud init
-
料金
Compute Engine は、Cloud Logging を使用してマネージド インスタンスの状態変化に関するログエントリを生成します。Cloud Logging では、毎月の無料割り当て量が提供されます。無料割り当て量を超過したログエントリについては、データ ボリュームによって課金されます。詳細については、Cloud Logging の料金の概要をご覧ください。
ロギングの費用が発生しないようにするには、健全性変更ログを無効にします。
健全性変更ログを表示する
健全性変更ログが有効な場合、Compute Engine は、マネージド インスタンスの健全性が変化するたびにプラットフォーム ログにログエントリを書き込みます。プロジェクト、特定の MIG、または特定のマネージド インスタンスのログを表示できます。
プロジェクトまたは MIG のログを表示する
プロジェクトまたは特定の MIG のログエントリを表示するには、Google Cloud コンソール、gcloud CLI、または REST を使用します。
コンソール
Google Cloud Console のログ エクスプローラにに移動します。
次のクエリ パラメータを設定します。
- リソース - GCE インスタンス グループ マネージャー
- ログ名 -
instance_group_manager_events
または、クエリビルダーで次のクエリをコピーします。
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"
[クエリを実行] をクリックします。[クエリ結果] にログが表示されます。
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
次のように置き換えます。
PROJECT_ID
: 実際のプロジェクト ID。MIG_NAME
: 健全性変更ログを表示する MIG。
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 を使用します。
コンソール
Google Cloud Console のログ エクスプローラにに移動します。
クエリビルダーで次のクエリをコピーします。
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"
[クエリを実行] をクリックします。
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 の健全性の変化を追跡する指標を作成します。
指標を作成して変更をモニタリングするには、次の手順を行います。
Google Cloud Console のログ エクスプローラにに移動します。
プロジェクト 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"
[クエリ結果] セクションで、[アクション] をクリックし、[指標を作成] をクリックします。
[ログの指標の作成] ページで、次の操作を行います。
- [指標タイプ] を [Counter] に設定します。
ログ指標の名前を入力します(例:
health-mig-xyzq
)。[フィルタの作成] セクションに、ログ エクスプローラのログクエリが表示されます。
severity>=WARNING
をフィルタに追加して、UNHEALTHY
やTIMEOUT
などの中断状態のみを追跡するように指標フィルタを構成することもできます。[ラベル] で [ラベルを追加] をクリックします。
ラベル名を入力します(例:
health_state
)。[Label type] を
STRING
に設定します。[フィールド名] を
jsonPayload.instanceHealthStateChange.detailedHealthState
に設定します。これにより、健全性の変化を区別できます。[完了] をクリックしてラベルを追加します。
[指標を作成] をクリックします。
[ログベースの指標] ページに移動して、新しく作成された指標を見つけます。
指標の行にあるメニュー more_vert をクリックして、[Metrics Explorer で表示する] を選択します。Metrics Explorer が開き、クエリで指定した VM インスタンスの健全性の変化を示すグラフが表示されます。
MIG 内のすべての VM の健全性の変化をモニタリングする
すべてのマネージド インスタンスの健全性の変化をモニタリングするには、マネージド インスタンスの健全性の変化を追跡する指標を作成します。
指標を作成して変更をモニタリングするには、次の手順を行います。
Google Cloud Console のログ エクスプローラにに移動します。
プロジェクト 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"
[クエリ結果] セクションで、[アクション] をクリックし、[指標を作成] をクリックします。
[ログの指標の作成] ページで、次の操作を行います。
- [指標タイプ] を [Counter] に設定します。
- ログ指標の名前を入力します(例:
health-mig-xyzq
)。 - [ラベル] で [ラベルを追加] をクリックします。
- ラベル名を入力します(例:
health_state
)。 - [Label type] を
STRING
に設定します。 - [フィールド名] を
jsonPayload.instanceHealthStateChange.detailedHealthState
に設定します。これにより、健全性の変化を区別できます。 - [完了] をクリックしてラベルを追加します。
- [指標を作成] をクリックします。
[ログベースの指標] ページに移動して、新しく作成された指標を見つけます。
指標の行にあるメニュー more_vert をクリックして、[Metrics Explorer で表示する] を選択します。Metrics Explorer が開き、クエリで指定したマネージド インスタンス グループ内のすべての VM インスタンスの健全性の変化を示すグラフが表示されます。
頻繁に異常が発生する VM を特定する
頻繁に UNHEALTHY
状態になる問題のある VM を特定するには、MIG 内のすべての VM インスタンスの健全性の変化を追跡する指標を作成し、インスタンスごとに指標をグループ化します。
指標を作成してインスタンス別にグループ化するには、次の手順を行います。
Google Cloud Console のログ エクスプローラにに移動します。
プロジェクト 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"
[クエリ結果] セクションで、[アクション] をクリックし、[指標を作成] をクリックします。
[ログの指標の作成] ページで、次の操作を行います。
- [指標タイプ] を [Counter] に設定します。
- ログ指標の名前を入力します(例:
health-mig-xyzq
)。 - [ラベル] で [ラベルを追加] をクリックします。
- ラベル名を入力します(例:
health_state
)。 - [Label type] を
STRING
に設定します。 - [フィールド名] を
jsonPayload.instanceHealthStateChange.detailedHealthState
に設定します。これにより、健全性の変化を区別できます。 - [完了] をクリックしてラベルを追加します。
- 同様に、[
instance
フィールド名] をjsonPayload.instanceHealthStateChange.instance
に設定して、2 つ目のラベルを追加します。 - [指標を作成] をクリックします。
[ログベースの指標] ページに移動して、新しく作成された指標を見つけます。
指標の行にあるメニュー more_vert をクリックして、[Metrics Explorer で表示する] を選択します。Metrics Explorer が開き、クエリで指定したマネージド インスタンス グループ内のすべての VM インスタンスの健全性の変化を示すグラフが表示されます。
[Group By] を
instance
に設定して、各インスタンスの健全性の変化の合計数を確認します。
全体的に健全性が変化しているインスタンスは、最も頻繁に異常が発生するインスタンスです。
自動修復の原因を確認する
自動修復リクエストの原因を確認するには、特定の VM インスタンスの repair
オペレーションのログをフィルタします。
修復オペレーションをフィルタするには、次の手順を行います。
Google Cloud Console のログ エクスプローラにに移動します。
プロジェクト 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$"
[クエリを実行] をクリックします。[クエリ結果] の
protoPayload.status.message
に、自動修復が試行された VM と自動修復の理由が示されます。
VM の自動修復が成功したかどうかを確認する
自動修復が成功したかどうか確認するには、VM インスタンス名で repair
オペレーションと健全性変化のログをフィルタします。修復オペレーションの後にインスタンスの健全性が HEALTHY
に変化している場合は、対応する健全性変更ログを確認します。手順は次のとおりです。
Google Cloud Console のログ エクスプローラにに移動します。
プロジェクト 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 インスタンスのすべての健全性の変化が表示されます。
クエリ結果で、修復オペレーションの直後に
detailedHealthState
がHEALTHY
に設定された健全性変更イベントがあれば、自動修復に成功しています。
MIG の初期遅延値を確認する
MIG の自動修復で適切な初期遅延値は、VM インスタンスの健全性ログを使用すると簡単に決めることができます。ログを使用すると、instances.insert
オペレーションが終了してから、グループ内の一連のインスタンスで正常なシグナルを最初に受信するまでの時間をモニタリングできます。この間隔により、インスタンスが完全に起動するまでの時間がわかります。一部の VM は他の VM よりも起動時間が長くなる可能性があります。自動修復ポリシーで初期遅延を指定する場合は、モニタリングする初期化時間(挿入オペレーションから正常な状態に戻るまでの時間)にいくつかのマージンを追加することをおすすめします。
インスタンスの挿入オペレーションが実行されてからインスタンスが正常な状態になるまでの時間を測定するには、VM インスタンス名で insert
オペレーションのログと健全性変更ログをクエリします。両方のオペレーションのタイムスタンプからインスタンスの初期化時間を計算します。手順は次のとおりです。
Google Cloud Console のログ エクスプローラにに移動します。
プロジェクト 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 のすべての健全性の変更が表示されます。
クエリ結果で、挿入オペレーションの直後にある、
detailedHealthState
がHEALTHY
の健全性変更イベントのタイムスタンプが、この VM の起動に必要な時間を表しています。このプロセスをいくつかの VM で繰り返して、初期遅延パラメータのおおよその値を計算します。