运行状况检查日志记录

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

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

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

如需在 Logging 中查看运行状况检查日志,您必须确保没有适用于运行状况检查的日志排除项。请参阅查看资源类型排除项,了解如何验证是否允许 GCE instance groupNetwork endpoint group 日志。

限制

  • 系统仅会针对端点运行状况转换生成日志。
  • 旧版运行状况检查不受支持
  • 目标池不受支持。

启用和停用日志记录功能

为新的运行状况检查启用日志记录功能

控制台

  1. 转到 Google Cloud Console 中的“运行状况检查”页面。
    转到“运行状况检查”页面
  2. 点击创建运行状况检查
  3. 日志单选按钮设置为开启
  4. 继续设置您的运行状况检查。

gcloud

gcloud beta compute health-checks create PROTOCOL HEALTH_CHECK_NAME \
   --enable-logging \
 ... other values

其中

  • --enable-logging 表示对该运行状况检查启用日志记录功能。

为现有运行状况检查启用日志记录功能

控制台

  1. 转到 Google Cloud Console 中的“运行状况检查”页面。
    转到“运行状况检查”页面
  2. 点击您的运行状况检查的名称。
  3. 点击修改
  4. 日志单选按钮设置为开启
  5. 点击保存

gcloud

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

其中

  • --enable-logging 表示对该运行状况检查启用日志记录功能。

为现有运行状况检查停用或修改日志记录功能

控制台

  1. 转到 Google Cloud Console 中的“运行状况检查”页面。
    转到“运行状况检查”页面
  2. 点击您的运行状况检查的名称。
  3. 点击修改
  4. 日志单选按钮设置为关闭
  5. 点击保存

gcloud

完全停用日志记录功能

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

其中

  • --no-enable-logging 表示为该运行状况检查停用日志记录功能。

查看日志

如需查看日志,请转到日志查看器

运行状况检查日志按实例组网络端点组编入索引。

如需查看所有日志,请在第一个下拉菜单中选择 GCE 实例组网络端点组,具体取决于您的后端类型。

也可以转到日志查看器并将以下内容粘贴到按标签或搜索文字过滤字段。将 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、项目编号、时间戳等。
  • 下表中描述的专用于运行状况检查的字段。

运行状况检查状态

只要端点状态从一种状态更改为另一种状态,运行状况检查就会生成日志。但是,负载平衡器的行为可能不会因状态更改而改变。如果由于服务器给出错误响应,但之后完全停止响应而导致端点被视为 UNHEALTHY,则运行状况检查会发送一个新状态为 TIMEOUT 的日志,但负载平衡器仍会将该端点视为运行状况不佳。

详细的运行状况检查状态 含义 基本状态
HEALTHY 端点可访问。端点符合运行状况检查定义的要求。 HEALTHY
UNHEALTHY 端点可访问,但不符合运行状况检查定义的要求。 UNHEALTHY
DRAINING 端点正在排空。与端点的现有连接可以完成,但新连接被拒绝。端点被视为 HEALTHY HEALTHY
TIMEOUT 端点无法访问。根据运行状况检查类型,无法建立与端点的连接,或者服务器未在指定超时时间内响应。端点被视为 UNHEALTHY UNHEALTHY
UNKNOWN 运行状况检查系统知道端点,但其运行状况未知。端点被视为 UNHEALTHY UNHEALTHY

您可以使用 Cloud Logging API 与日志进行交互。Logging API 提供了多种方法来以交互方式过滤包含特定字段集的日志,并将匹配的日志导出到 Cloud Logging、Cloud Storage、BigQuery 或 Pub/Sub。如需详细了解 Cloud Logging API,请参阅查看日志

运行状况检查日志条目

LogEntry json-payload 填充有包含以下信息的 healthCheckProbeResult 字段:

字段
ipAddress string:与每个后端虚拟机的主要网络接口关联的主要内部 IP 地址。这是人类可读的字符串。
healthCheckProtocol HealthCheckProtocol:用于检查端点的运行状况的运行状况检查协议,例如 TCP、HTTP、HTTPS 等。
healthState HealthState:端点当前的运行状况:HEALTHYUNHEALTHY
previousHealthState HealthState:端点之前的运行状况:HEALTHYUNHEALTHY
detailedHealthState DetailedHealthState:端点当前的详细运行状况。请参阅运行状况检查状态,查看可能的状态列表。
previousDetailedHealthState DetailedHealthState:端点之前的详细运行状况。请参阅运行状况检查状态,查看可能的状态列表。
probeRequest string:对于 HTTP、HTTPS 和 HTTP2,此字段是网址请求路径(资源配置中的 requestPath 字段)。对于 TCP/SSL,此字段是配置的可选字符串,在建立运行状况检查连接后发送(资源配置中的 request 字段)。
probeCompletionTimestamp Timestamp:探测完成时间戳。
connectLatency Duration:为面向连接的运行状况检查协议(TCP、SSL、HTTP、HTTPS、HTTP/2)设置连接所用的时间:
responseLatency Duration:由探测器测量的请求和响应之间的延迟时间。
probeResultText string:与探测结果相关的描述性文本。可能会显示诸如“连接超时”或“HTTP 响应:网关错误”等内容,也可能是空的。
probeSourceIp string:从其中发送运行状况检查探测的 IP 地址。
targetIp string:作为探测目标的 IP 地址。此字段可能与 ipAddress 不同。探测的目的地 IP 地址取决于负载平衡器的类型:
  • 对于内部 TCP/UDP 负载平衡器和网络负载平衡器,运行状况检查数据包的目的地是负载平衡器转发规则的 IP 地址。
  • 对于使用实例组作为后端的外部 HTTP(S) 负载平衡器、TCP 代理负载平衡器和 SSL 代理负载平衡器,运行状况检查数据包的目的地是与每个后端虚拟机的主要网络接口关联的主要内部 IP 地址。
  • 对于使用网络端点组作为后端的外部 HTTP(S) 负载平衡器、TCP 代理负载平衡器和 SSL 代理负载平衡器,运行状况检查数据包的目的地是端点的 IP 地址,即可以是主要或次要(别名 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-14T02:30:00.0Z"

后续步骤