エンドポイントのヘルス ステータスが変化するタイミングで、ロード バランシング ヘルスチェックのログを取得できます。ヘルスチェックのログは次の目的に使用できます。
- エンドポイントのヘルス ステータスをリアルタイムでデバッグし、トラブルシューティングする
- エンドポイントのヘルス ステータスを可視化する
- 監査とコンプライアンス
ヘルスチェックによって、ヘルス ステータスの遷移に関する情報が Logging に記録されます。Logging の有効化と無効化はヘルスチェックごとに行います。
Logging におけるヘルスチェックのログを確認する場合、ヘルスチェックに該当するログの除外がないようにしてください。GCE Instance Group
ログと Network Endpoint Group
ログが許可されているかどうか確認する方法については、除外フィルタをご覧ください。
ロギングを有効または無効にする
このセクションでは、新規または既存のヘルスチェックでロギングを有効にする方法と、既存のヘルスチェックでロギングを無効にする方法について説明します。
新しいヘルスチェックでロギングを有効にする
コンソール
Google Cloud コンソールで、[ヘルスチェック] ページに移動します。
[ヘルスチェックを作成] をクリックします。
[ログ] で [オン] を選択します。
ヘルスチェックの設定を続けます。
gcloud
gcloud compute health-checks create PROTOCOL HEALTH_CHECK_NAME \ --enable-logging
--enable-logging
フラグは、そのヘルスチェックのロギングを有効にします。
Terraform
ロギングを使用してさまざまなプロトコルのヘルスチェックを作成するには、google_compute_health_check
リソースを使用します。
リージョン ロードバランサの場合、google_compute_region_health_check
リソースを使用します。
Terraform 構成を適用または削除する方法については、基本的な Terraform コマンドをご覧ください。
既存のヘルスチェックでロギングを有効にする
コンソール
Google Cloud コンソールで、[ヘルスチェック] ページに移動します。
ヘルスチェックの名前をクリックします。
[
編集] をクリックします。[ログ] で [オン] を選択します。
[保存] をクリックします。
gcloud
gcloud compute health-checks update PROTOCOL HEALTH_CHECK_NAME \ --enable-logging
--enable-logging
フラグは、そのヘルスチェックのロギングを有効にします。
既存のヘルスチェックでロギングを無効にする
コンソール
Google Cloud コンソールで、[ヘルスチェック] ページに移動します。
ヘルスチェックの名前をクリックします。
[
編集] をクリックします。[ログ] で [オフ] を選択します。
[保存] をクリックします。
gcloud
gcloud compute health-checks update PROTOCOL HEALTH_CHECK_NAME \ --no-enable-logging
--no-enable-logging
フラグは、そのヘルスチェックのロギングを無効にします。
ログの表示
ログを表示するには、ログ エクスプローラに移動します。
ヘルスチェックのログは、インスタンス グループまたはネットワーク エンドポイント グループによってインデックスに登録されます。
すべてのログを表示するには、[リソース] メニューで、バックエンドの種類に応じて
GCE Instance Group
またはNetwork Endpoint Group
を選択します。または、[クエリ] フィールドに次の内容を貼り付けます。
PROJECT_ID
は、プロジェクトの ID に置き換えます。logName="projects/PROJECT_ID/logs/compute.googleapis.com%2Fhealthchecks"
ロードバランサのヘルスチェックに関するログベースの指標のエクスポートを構成できます。
フィルタを使用してログを表示する
より具体的な検索に基づいてログを取得することもできます。たとえば、次のフィルタは、指定されたバックエンド インスタンスの IP アドレスのすべてのログを表示します。
logName="projects/PROJECT_ID/logs/compute.googleapis.com%2Fhealthchecks" jsonPayload.healthCheckProbeResult.ipAddress="IP_ADDRESS"
通常、ブール型のログフィールドは、フィールドの値が true
の場合にのみ表示されます。ブール フィールドの値が false
の場合、そのフィールドはログから省略されます。
ログフィールドには UTF-8 エンコードが適用されます。UTF-8 以外の文字セットは、疑問符に置き換えられます。
ログの内容
ヘルスチェックのログエントリには、エンドポイントの状態のモニタリングとデバッグに役立つ情報が含まれています。ログエントリには次のタイプの情報が含まれています。
- 重大度、プロジェクト ID、プロジェクト番号、タイムスタンプなど、ほとんどのログに表示される一般情報。
- ヘルスチェック固有のフィールド(次の表をご覧ください)。
ヘルスチェックの状態
エンドポイントは HEALTHY
または UNHEALTHY
のいずれかとみなされます。これらは基本的な状態です。それぞれの基本的な状態には、詳細な状態が複数含まれています。
分散 Envoy ヘルスチェックを使用するハイブリッド NEG とリージョン インターネット NEG は、詳細なヘルス状態をサポートしていません。
次の表に、ヘルスチェックの基本的な状態と詳細な状態の対応関係を示します。
基本的なヘルス状態 | 詳細なヘルス状態 |
---|---|
HEALTHY |
HEALTHY DRAINING
|
UNHEALTHY |
UNKNOWN UNHEALTHY TIMEOUT
|
状態を変更しても、ロードバランサの動作が変わるとは限りません。次のような場合を考えてみましょう。
- サーバーが不適切なレスポンスを送信しているため、エンドポイントは
UNHEALTHY
とみなされる。 - その後、サーバーは応答を停止し、新しい状態は
TIMEOUT
になる。 - 詳細な
TIMEOUT
状態は基本的なUNHEALTHY
状態に対応するため、ロードバランサは依然としてエンドポイントはUNHEALTHY
であるとみなす。
次の表に、各ヘルス状態の定義を示します。
ヘルスチェックの詳細な状態 | 意味 | 基本状態 |
---|---|---|
HEALTHY
|
エンドポイントにアクセスでき、ヘルスチェックで定義された要件を満たしています。 | HEALTHY
|
UNHEALTHY
|
エンドポイントにアクセス可能ですが、ヘルスチェックで定義された要件を満たしていません。 | UNHEALTHY
|
DRAINING
|
エンドポイントはドレインされています。エンドポイントへの既存の接続は完了するまで続行されますが、新しい接続は受け入れられません。エンドポイントは HEALTHY とみなされます。
|
HEALTHY
|
TIMEOUT
|
エンドポイントにアクセスできません。ヘルスチェックのタイプによっては、エンドポイントへの接続を確立できないか、サーバーが指定されたタイムアウト内に応答しません。エンドポイントは UNHEALTHY とみなされます。
|
UNHEALTHY
|
UNKNOWN
|
ヘルスチェック システムはエンドポイントを認識していますが、ヘルス状態は不明です。エンドポイントは UNHEALTHY とみなされます。
|
UNHEALTHY
|
各エンドポイントを調べる複数のヘルス チェッカーがあります。Google Cloud は、一意のログのみが生成されるように、ロギングの前にログエントリの重複を排除します。
ヘルス チェッカーが再起動すると、エンドポイントのヘルス状態が実際には変更されていなくても、ログに記録されたヘルス状態が UNKNOWN
から上記の既知の状態のいずれかに変わることがあります。Google Cloud は、ベスト エフォート ヒューリスティックを用いて、このようなログエントリを抑制しています。
コネクション ドレインを使用している場合、エンドポイント ヘルス ステータスが DRAINING
のヘルスチェック ログは生成されません。ヘルスチェック ログには、ヘルスチェック プローブによって観察された結果が反映されます。コネクション ドレインは、ヘルスチェック プローブによって観察された結果に影響しません。コネクション ドレインは、新しい状態が DRAINING
であることをロードバランサに通知するだけで、ヘルス チェッカーによって観測されるエンドポイントの実際の状態を効果的にオーバーライドします。
Cloud Logging API を使用してログを操作できます。この API は、特定のフィールドが設定されたログをインタラクティブにフィルタし、一致するログを Cloud Logging、Cloud Storage、BigQuery、または Pub/Sub にエクスポートする方法を提供します。Cloud Logging API について詳しくは、Cloud Logging API の概要をご覧ください。
ヘルスチェックのログエントリ
LogEntry jsonPayload
には、次の情報を含むフィールド healthCheckProbeResult
が挿入されます。
フィールド | タイプ | 説明 |
---|---|---|
ipAddress |
string |
各バックエンド VM のプライマリ ネットワーク インターフェースに関連付けられたプライマリ内部 IP アドレス。これは人が読める文字列です。 |
healthCheckProtocol |
enum(HealthCheckProtocol) |
エンドポイントのヘルスチェックに使用されるヘルスチェック プロトコル。例: TCP、HTTP、HTTPS。 |
healthState |
enum(HealthState) |
エンドポイントの現在のヘルス ステータス: HEALTHY または UNHEALTHY 。 |
previousHealthState |
enum(HealthState) |
エンドポイントの以前のヘルス ステータス: HEALTHY または UNHEALTHY 。 |
detailedHealthState |
enum(DetailedHealthState) |
エンドポイントの現在の詳しいヘルス ステータス。可能な状態のリストについては、ヘルスチェックの状態をご覧ください。 ハイブリッド NEG とリージョン インターネット NEG の分散 Envoy ヘルスチェックではサポートされていません。 |
previousDetailedHealthState |
enum(DetailedHealthState) |
エンドポイントの以前の詳しいステータス。可能な状態のリストについては、ヘルスチェックの状態をご覧ください。 ハイブリッド NEG とリージョン インターネット NEG の分散 Envoy ヘルスチェックではサポートされていません。 |
probeRequest |
string |
HTTP、HTTPS、HTTP/2 の場合、これは URL リクエストパス(リソース構成の TCP / SSL の場合、これはヘルスチェック接続の確立後に送信される、構成済みのオプションの文字列(リソース構成の ハイブリッド NEG とリージョン インターネット NEG の分散 Envoy ヘルスチェックではサポートされていません。 |
probeCompletionTimestamp |
google.protobuf.Timestamp |
プローブ完了のタイムスタンプ。 |
connectLatency |
google.protobuf.Duration |
接続指向のヘルスチェック プロトコル(TCP、SSL、HTTP、HTTPS、HTTP/2)向け接続の設定に費やされた時間。 ハイブリッド NEG とリージョン インターネット NEG の分散 Envoy ヘルスチェックではサポートされていません。 |
responseLatency |
google.protobuf.Duration |
プローバーによって測定された、リクエストとレスポンス間のレイテンシ。 ハイブリッド NEG とリージョン インターネット NEG の分散 Envoy ヘルスチェックではサポートされていません。 |
probeResultText |
string |
プローブ結果に関する説明テキスト。「Connection timed out」や「HTTP response: Bad Gateway」などのメッセージが入る場合もあり、空の場合もあります。 ハイブリッド NEG とリージョン インターネット NEG の分散 Envoy ヘルスチェックではサポートされていません。 |
probeSourceIp |
string |
ヘルスチェック プローブが送信された IP アドレス。 分散 Envoy ヘルスチェックの場合、これはプロキシ専用サブネットのプロキシ IP アドレスに対応します。 |
probeSourceRegion |
string |
ヘルスチェックを開始した Cloud Vantage Point リージョン。 このフィールドが Cloud DNS ルーティング ポリシーのプローブに対して自動的に設定されるのは、対応するヘルスチェックで |
targetIp |
string |
プローブのターゲットである IP アドレス。これは ipAddress とは異なる場合があります。プローブの宛先 IP アドレスはロードバランサのタイプによって異なります。詳細については、ヘルスチェックの概要のプローブ パケットの宛先をご覧ください。 |
targetPort |
int |
プローブのターゲットであるポート。これはプローブのデフォルト ポートか、ヘルスチェックの作成時に指定したポートの場合があります。 |
フィルタの使用例
このセクションでは、一般的なログフィルタの例を示します。
特定のインスタンス グループのヘルスチェック結果をすべて検索します
logName="projects/PROJECT_ID/logs/compute.googleapis.com%2Fhealthchecks" AND resource.type="gce_instance_group" AND resource.labels.instance_group_name="INSTANCE_GROUP_NAME"
特定の NEG のヘルスチェック結果をすべて検索します
logName="projects/PROJECT_ID/logs/compute.googleapis.com%2Fhealthchecks" AND resource.type="gce_network_endpoint_group" AND resource.labels.network_endpoint_group_id="ENDPOINT_GROUP_ID"
バックエンド インスタンスの IP アドレス 10.128.15.201
のすべてのヘルスチェックの推移を検索する
logName="projects/PROJECT_ID/logs/compute.googleapis.com%2Fhealthchecks" jsonPayload.healthCheckProbeResult.ipAddress="10.128.15.201"
前の状態が HEALTHY で、現在の状態が TIMEOUT であるすべてのエンドポイントを検索する
logName="projects/PROJECT_ID/logs/compute.googleapis.com%2Fhealthchecks" jsonPayload.healthCheckProbeResult.previousDetailedHealthState="HEALTHY" jsonPayload.healthCheckProbeResult.detailedHealthState="TIMEOUT"
特定の期間のヘルスログを検索する
logName="projects/PROJECT_ID/logs/compute.googleapis.com%2Fhealthchecks" timestamp>"2019-02-14T02:20:00.0Z" timestamp<"2019-02-14T03:30:00.0Z"
制限事項
- ログは、エンドポイントのヘルス ステータスの遷移に対してのみ生成されます。
- レガシー ヘルスチェックはサポートされていません。
- ターゲット プールはサポートされていません。
- エンドポイントのヘルス状態が
UNKNOWN
の場合、ログは生成されません。 - VM の移行の場合、エンドポイントのヘルス状態が「
UNHEALTHY
」に移行したときに生成されたログエントリが表示されない可能性があります。 - エンドポイントを削除しても、ログは生成されません。たとえば、VM を停止したときなどです。
次のステップ
- ヘルスチェックのコンセプトについて理解する。
- ヘルスチェックを作成します。
- Logging について理解する