端点的健康状况发生更改时,您可以获取负载均衡健康检查的日志。您可以在以下情况下使用健康检查日志:
- 对端点运行状况进行实时调试和问题排查
- 深入了解端点的运行状况
- 审核和合规性目的
健康检查会将健康状况转换信息记录到 Logging。您可以针对健康检查启用或停用日志记录功能。
如需在 Logging 中查看健康检查日志,您必须确保没有适用于健康检查的日志排除项。如需了解如何验证是否允许 GCE Instance Group
和 Network Endpoint Group
日志,请参阅排除项过滤条件。
启用和停用日志记录
本部分介绍了如何为新的或现有健康检查启用日志记录功能,以及如何为现有健康检查停用日志记录功能。
为新的健康检查启用日志记录功能
控制台
在 Google Cloud Console 中,转到健康检查页面。
点击创建健康检查。
在日志列表中,选择开启。
继续设置您的健康检查。
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 Console 中,转到健康检查页面。
点击您的健康检查的名称。
点击
修改。在日志列表中,选择开启。
点击保存。
gcloud
gcloud compute health-checks update PROTOCOL HEALTH_CHECK_NAME \ --enable-logging
--enable-logging
标志用于为该健康检查启用日志记录功能。
为现有健康检查停用日志记录功能
控制台
在 Google Cloud Console 中,转到健康检查页面。
点击您的健康检查的名称。
点击
修改。在日志字段中,选择关闭。
点击保存。
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
。 - 负载平衡器仍会将端点视为
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) |
端点当前的运行状况: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,此字段是网址请求路径(资源配置中的 对于 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 |
与探测结果相关的描述性文本。可能会显示诸如“连接超时”或“HTTP 响应:网关错误”等内容,也可能是空的。
不支持对混合 NEG 和区域级互联网 NEG 进行分布式 Envoy 健康检查。 |
probeSourceIp |
string |
从其中发送健康检查探测的 IP 地址。
对于分布式 Envoy 健康检查,此字段对应于代理专用子网中的代理 IP 地址。 |
probeSourceRegion |
string |
健康检查的来源云制高点区域。 如果在相应的健康检查中设置了 |
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
,则可能不会生成任何日志条目。 - 删除端点后,亦不会生成任何日志。例如,如果关停虚拟机从而删除端点。
后续步骤
- 阅读有关健康检查的概念性信息。
- 创建健康检查。
- 了解 Logging。