健康检查日志记录信息

端点的健康状况发生更改时,您可以获取负载均衡健康检查的日志。您可以在以下情况下使用健康检查日志:

  • 对端点运行状况进行实时调试和问题排查
  • 深入了解端点的运行状况
  • 审核和合规性目的

健康检查会将健康状况转换信息记录到 Logging。您可以针对健康检查启用或停用日志记录功能。

如需在 Logging 中查看健康检查日志,您必须确保没有适用于健康检查的日志排除项。如需了解如何验证是否允许 GCE Instance GroupNetwork Endpoint Group 日志,请参阅排除项过滤条件

启用和停用日志记录

本部分介绍了如何为新的或现有健康检查启用日志记录功能,以及如何为现有健康检查停用日志记录功能。

为新的健康检查启用日志记录功能

控制台

  1. 在 Google Cloud Console 中,转到健康检查页面。

    转到“健康检查”

  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 Console 中,转到健康检查页面。

    转到“健康检查”

  2. 点击您的健康检查的名称。

  3. 点击 修改

  4. 日志列表中,选择开启

  5. 点击保存

gcloud

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

--enable-logging 标志用于为该健康检查启用日志记录功能。

为现有健康检查停用日志记录功能

控制台

  1. 在 Google Cloud Console 中,转到健康检查页面。

    转到“健康检查”

  2. 点击您的健康检查的名称。

  3. 点击 修改

  4. 日志字段中,选择关闭

  5. 点击保存

gcloud

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

--no-enable-logging 标志用于为该健康检查停用日志记录功能。

查看日志

  1. 如需查看日志,请转到日志浏览器

    健康检查日志按实例组网络端点组编入索引。

  2. 如需查看所有日志,请在资源菜单中选择 GCE Instance GroupNetwork 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、项目编号和时间戳。
  • 下表中描述的专用于健康检查的字段。

健康检查状态

端点被视为 HEALTHYUNHEALTHY,这些是基本状态。每个基本状态中,还有数个更为详细的状态。

使用分布式 Envoy 健康检查的混合 NEG 和区域级互联网 NEG 不支持详细的健康状态。

下表显示了基本健康状态与详细健康状态之间的映射。

基本运行状态 详细运行状态
HEALTHY HEALTHY
DRAINING
UNHEALTHY UNKNOWN
UNHEALTHY
TIMEOUT

状态变化不一定改变负载平衡器的行为。考虑以下情况:

  1. 服务器给出错误响应,因此端点被视为 UNHEALTHY
  2. 然后,服务器停止响应,新状态为 TIMEOUT
  3. 负载平衡器仍会将端点视为 UNHEALTHY,因为详细的 TIMEOUT 状态会映射到基本 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 与每个后端虚拟机的主要网络接口关联的主要内部 IP 地址。这是人类可读的字符串。
healthCheckProtocol enum(HealthCheckProtocol) 用于端点健康检查的健康检查协议。示例:TCP、HTTP、HTTPS。
healthState enum(HealthState) 端点当前的运行状况:HEALTHYUNHEALTHY
previousHealthState enum(HealthState) 端点之前的运行状况:HEALTHYUNHEALTHY
detailedHealthState enum(DetailedHealthState) 端点当前的详细运行状况。如需查看可能性的列表,请参阅健康检查状态

不支持对混合 NEG 和区域级互联网 NEG 进行分布式 Envoy 健康检查。

previousDetailedHealthState enum(DetailedHealthState) 端点之前的详细运行状况。如需查看可能性的列表,请参阅健康检查状态

不支持对混合 NEG 和区域级互联网 NEG 进行分布式 Envoy 健康检查。

probeRequest string

对于 HTTP、HTTPS 和 HTTP/2,此字段是网址请求路径(资源配置中的 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 与探测结果相关的描述性文本。可能会显示诸如“连接超时”或“HTTP 响应:网关错误”等内容,也可能是空的。

不支持对混合 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"

查找之前运行状况良好但现在已超时的所有端点

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,则不会生成日志。
  • 若在迁移虚拟机,如果端点的健康状况变为 UNHEALTHY,则可能不会生成任何日志条目。
  • 删除端点后,亦不会生成任何日志。例如,如果关停虚拟机从而删除端点。

后续步骤