ヘルスチェックのロギング情報

エンドポイントのヘルス ステータスが変化するタイミングで、ロード バランシング ヘルスチェックのログを取得できます。ヘルスチェックのログは次の目的に使用できます。

  • エンドポイントのヘルス ステータスをリアルタイムでデバッグし、トラブルシューティングする
  • エンドポイントのヘルス ステータスを可視化する
  • 監査とコンプライアンス

ヘルスチェックによって、ヘルス ステータスの遷移に関する情報が Logging に記録されます。Logging の有効化と無効化はヘルスチェックごとに行います。

Logging におけるヘルスチェックのログを確認する場合、ヘルスチェックに該当するログの除外がないようにしてください。GCE Instance Group ログと Network Endpoint Group ログが許可されているかどうか確認する方法については、除外フィルタをご覧ください。

ロギングを有効または無効にする

このセクションでは、新規または既存のヘルスチェックでロギングを有効にする方法と、既存のヘルスチェックでロギングを無効にする方法について説明します。

新しいヘルスチェックでロギングを有効にする

コンソール

  1. Google Cloud コンソールで、[ヘルスチェック] ページに移動します。

    [ヘルスチェック] に移動

  2. [ヘルスチェックを作成] をクリックします。

  3. [ログ] で [オン] を選択します。

  4. ヘルスチェックの設定を続けます。

gcloud

gcloud compute health-checks create PROTOCOL HEALTH_CHECK_NAME \
    --enable-logging

--enable-logging フラグは、そのヘルスチェックのロギングを有効にします。

Terraform

ロギングを使用してさまざまなプロトコルのヘルスチェックを作成するには、google_compute_health_check リソースを使用します。

resource "google_compute_health_check" "health_check_tcp_with_logging" {
  provider = google-beta

  name = "health-check-tcp"

  timeout_sec        = 1
  check_interval_sec = 1

  tcp_health_check {
    port = "22"
  }

  log_config {
    enable = true
  }
}

リージョン ロードバランサの場合、google_compute_region_health_check リソースを使用します。

Terraform 構成を適用または削除する方法については、基本的な Terraform コマンドをご覧ください。

既存のヘルスチェックでロギングを有効にする

コンソール

  1. Google Cloud コンソールで、[ヘルスチェック] ページに移動します。

    [ヘルスチェック] に移動

  2. ヘルスチェックの名前をクリックします。

  3. [編集] をクリックします。

  4. [ログ] で [オン] を選択します。

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

gcloud

gcloud compute health-checks update PROTOCOL HEALTH_CHECK_NAME \
    --enable-logging

--enable-logging フラグは、そのヘルスチェックのロギングを有効にします。

既存のヘルスチェックでロギングを無効にする

コンソール

  1. Google Cloud コンソールで、[ヘルスチェック] ページに移動します。

    [ヘルスチェック] に移動

  2. ヘルスチェックの名前をクリックします。

  3. [編集] をクリックします。

  4. [ログ] で [オフ] を選択します。

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

gcloud

gcloud compute health-checks update PROTOCOL HEALTH_CHECK_NAME \
    --no-enable-logging

--no-enable-logging フラグは、そのヘルスチェックのロギングを無効にします。

ログの表示

  1. ログを表示するには、ログ エクスプローラに移動します。

    ヘルスチェックのログは、インスタンス グループまたはネットワーク エンドポイント グループによってインデックスに登録されます。

  2. すべてのログを表示するには、[リソース] メニューで、バックエンドの種類に応じて GCE Instance Group または Network Endpoint Group を選択します。

  3. または、[クエリ] フィールドに次の内容を貼り付けます。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

状態を変更しても、ロードバランサの動作が変わるとは限りません。次のような場合を考えてみましょう。

  1. サーバーが不適切なレスポンスを送信しているため、エンドポイントは UNHEALTHY とみなされる。
  2. その後、サーバーは応答を停止し、新しい状態は TIMEOUT になる。
  3. 詳細な 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 リクエストパス(リソース構成の requestPath フィールド)です。

TCP / SSL の場合、これはヘルスチェック接続の確立後に送信される、構成済みのオプションの文字列(リソース構成の request フィールド)です。

ハイブリッド 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 アドレスに対応します。

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 を停止したときなどです。

次のステップ