日志记录
您可以为外部应用负载均衡器后端服务启用和停用日志记录功能,还可以查看其日志。对于具有后端存储桶的外部应用负载均衡器,日志记录功能会自动启用且无法停用。
您可以为每个后端服务启用或停用日志记录功能。您可以配置是记录所有请求还是记录随机采样的一小部分请求。
您必须确保没有适用于外部应用负载均衡器的日志排除项。如需了解如何验证是否允许 Cloud HTTP Load
Balancer 日志,请参阅排除过滤器。
日志采样和收集
系统会对由负载均衡器后端虚拟机 (VM) 实例处理的请求(以及相应的响应)进行采样。然后,系统会处理这些采样的请求以生成日志。您可以根据 logConfig.sampleRate 参数控制系统以日志条目形式发出的请求的比例。
当 logConfig.sampleRate 为 1.0 (100%) 时,表示系统会为所有请求生成日志并写入 Cloud Logging。
可选字段
日志记录包含必填字段和可选字段。记录的内容部分列出了哪些字段是可选字段,以及哪些是必填字段。所有必填字段始终包含在内。您可以自定义要保留哪些可选字段。
- 如果您选择包括所有可选字段,则日志记录格式中的所有可选字段都将包含在日志中。向记录格式添加新的可选字段后,日志会自动包含新字段。 
- 如果您选择排除所有可选字段,则所有可选字段都将被省略。 
- 如果您选择自定义,则可以指定要包含的可选字段,例如 - tls.protocol,tls.cipher,orca_load_report.cpu_utilization,orca_load_report.mem_utilization。
如需了解如何自定义可选字段,请参阅在新的后端服务上启用日志记录。
针对新的后端服务启用日志记录功能
控制台
- 在 Google Cloud 控制台中,前往负载均衡页面。 
- 点击您的负载均衡器的名称。 
- 点击修改。 
- 点击后端配置。 
- 选择创建后端服务。 
- 填写必填的后端服务字段。 
- 在日志记录部分,选中启用日志记录复选框。 
- 设置采样率比例。您可以设置 - 0.0到- 1.0的数字,其中- 0.0表示不在日志中记录任何请求,- 1.0表示在日志中记录所有请求。默认值为- 1.0。
- 可选:如需在日志中包含所有可选字段,请在可选字段部分中,点击包括所有可选字段。 
- 如需完成后端服务的修改,请点击更新。 
- 如需完成负载均衡器修改,请点击更新。 
gcloud:全局模式
使用 gcloud compute backend-services create 命令创建后端服务并启用日志记录功能。
gcloud compute backend-services create BACKEND_SERVICE \
    --global \
    --enable-logging \
    --logging-sample-rate=VALUE \
    --load-balancing-scheme=EXTERNAL_MANAGED \
    --logging-optional=LOGGING_OPTIONAL_MODE \
    --logging-optional-fields=OPTIONAL_FIELDS
gcloud compute backend-services create 命令支持以下字段:
- --global表示后端服务是全球性的。 此字段用于与全球外部应用负载均衡器搭配使用的后端服务。
- --enable-logging表示对该后端服务启用日志记录功能。
- --logging-sample-rate接受从- 0.0到- 1.0值,其中- 0.0表示不在日志中记录任何请求,- 1.0表示在日志中记录所有请求。此字段仅在搭配- --enable-logging参数使用时才有意义。启用日志记录功能的情况下,如果将采样率设置为- 0.0,那么效果将相当于停用日志记录功能。默认值为- 1.0。
- --logging-optional允许您指定要包括在日志中的可选字段:- INCLUDE_ALL_OPTIONAL:包括所有可选字段。
- EXCLUDE_ALL_OPTIONAL(默认值):排除所有可选字段。
- CUSTOM:包括您在- OPTIONAL_FIELDS中指定的可选字段的自定义列表。
 
- --logging-optional-fields允许您以逗号分隔列表的形式指定要包括在日志中的可选字段。- 例如,仅当 - LOGGING_OPTIONAL_MODE设置为- CUSTOM时才能设置- tls.protocol,tls.cipher。如果您使用自定义指标并希望记录 ORCA 负载报告的元素,请将- LOGGING_OPTIONAL_MODE设置为- CUSTOM,并在- OPTIONAL_FIELDS字段中指定必须记录哪些元素。例如- orca_load_report.cpu_utilization,orca_load_report.mem_utilization。
针对现有后端服务启用日志记录功能
控制台
- 在 Google Cloud 控制台中,前往负载均衡页面。 
- 点击您的负载均衡器的名称。 
- 点击修改。 
- 点击后端配置。 
- 点击后端服务旁边的 修改。 
- 在日志记录部分,选中启用日志记录复选框。 
- 在采样率字段中,设置采样概率。您可以设置 - 0.0到- 1.0的数字,其中- 0.0表示不在日志中记录任何请求,- 1.0表示在日志中记录所有请求。默认值为- 1.0。
- 如需完成后端服务的修改,请点击更新。 
- 如需完成负载均衡器修改,请点击更新。 
gcloud:全局模式
使用 gcloud compute backend-services update 命令在现有后端服务上启用日志记录。
gcloud compute backend-services update BACKEND_SERVICE \
    --global \
    --enable-logging \
    --logging-sample-rate=VALUE
其中
- --global表示后端服务是全球性的。 此字段用于与全球外部应用负载均衡器搭配使用的后端服务。
- --enable-logging表示对该后端服务启用日志记录功能。
- --logging-sample-rate接受从- 0.0到- 1.0值,其中- 0.0表示不在日志中记录任何请求,- 1.0表示在日志中记录所有请求。只有搭配使用- --enable-logging参数时才有意义。启用日志记录功能的情况下,如果将采样率设置为- 0.0,那么效果将相当于停用日志记录功能。默认值为- 1.0。
gcloud:经典模式
使用 gcloud compute backend-services update 命令在现有后端服务上启用日志记录。
gcloud compute backend-services update BACKEND_SERVICE \
    --global \
    --enable-logging \
    --logging-sample-rate=VALUE
其中
- --global表示后端服务是全球性的。 此字段用于与传统应用负载均衡器搭配使用的后端服务。
- --enable-logging表示对该后端服务启用日志记录功能。
- --logging-sample-rate接受从- 0.0到- 1.0值,其中- 0.0表示不在日志中记录任何请求,- 1.0表示在日志中记录所有请求。只有搭配使用- --enable-logging参数时才有意义。启用日志记录功能的情况下,如果将采样率设置为- 0.0,那么效果将相当于停用日志记录功能。默认值为- 1.0。
针对现有后端服务停用或修改日志记录功能
控制台
- 在 Google Cloud 控制台中,前往负载均衡页面。 
- 点击您的负载均衡器的名称。 
- 点击修改。 
- 点击后端配置。 
- 点击后端服务旁边的 修改。 
- 如需完全停用日志记录功能,请在日志记录部分中清除启用日志记录复选框。 
- 如果要保持启用日志记录功能,可以设置其他采样率比例。您可以设置 - 0.0到- 1.0的数字,其中- 0.0表示不在日志中记录任何请求,- 1.0表示在日志中记录所有请求。默认值为- 1.0。 例如,- 0.2表示 20% 的采样请求会生成日志。
- 如需完成后端服务的修改,请点击更新。 
- 如需完成负载均衡器修改,请点击更新。 
gcloud:全局模式
使用 gcloud compute backend-services update 命令停用后端服务的日志记录功能。
完全停用日志记录功能
gcloud compute backend-services update BACKEND_SERVICE \
    --global \
    --no-enable-logging
其中
- --global表示后端服务是全球性的。 此字段用于与全球外部应用负载均衡器搭配使用的后端服务。
- --no-enable-logging表示对该后端服务停用日志记录功能。
针对现有后端服务启用日志记录可选字段
gcloud compute backend-services update BACKEND_SERVICE \
    --global \
    --enable-logging \
    --logging-sample-rate=VALUE \
    --logging-optional=LOGGING_OPTIONAL_MODE \
    --logging-optional-fields=OPTIONAL_FIELDS
其中
- --logging-sample-rate接受从- 0.0到- 1.0值,其中- 0.0表示不在日志中记录任何请求,- 1.0表示在日志中记录所有请求。只有搭配使用- --enable-logging参数时才有意义。启用日志记录功能的情况下,如果将采样率设置为- 0.0,那么效果将相当于停用日志记录功能。默认值为- 1.0。
- --logging-optional允许您指定要包括在日志中的可选字段:- INCLUDE_ALL_OPTIONAL:包括所有可选字段。
- EXCLUDE_ALL_OPTIONAL(默认值):排除所有可选字段。
- CUSTOM:包括您在- OPTIONAL_FIELDS中指定的可选字段的自定义列表。
 
- --logging-optional-fields允许您以逗号分隔列表的形式指定要包括在日志中的可选字段。- 例如,仅当 - LOGGING_OPTIONAL_MODE设置为- CUSTOM时才能设置- tls.protocol,tls.cipher。如果您使用自定义指标并希望记录 ORCA 负载报告的元素,请将- LOGGING_OPTIONAL_MODE设置为- CUSTOM,并在- OPTIONAL_FIELDS字段中指定必须记录哪些元素。例如- orca_load_report.cpu_utilization,orca_load_report.mem_utilization。
将日志记录可选模式从“自定义”更新为其他模式
gcloud compute backend-services update BACKEND_SERVICE \
    --global \
    --enable-logging \
    --logging-sample-rate=VALUE \
    --logging-optional=LOGGING_OPTIONAL_MODE \
    --logging-optional-fields=
其中
- --logging-optional允许您指定要包括在日志中的可选字段:- INCLUDE_ALL_OPTIONAL:包括所有可选字段。
- EXCLUDE_ALL_OPTIONAL(默认值):排除所有可选字段。
 
- 必须明确配置 - --logging-optional-fields(如该示例所示)才能清除所有现有的- CUSTOM字段。该 API 不支持将非- CUSTOM模式与- CUSTOM字段混用。
修改日志采样率
gcloud compute backend-services update BACKEND_SERVICE \
    --global \
    --logging-sample-rate=VALUE
gcloud:经典模式
使用 gcloud compute backend-services update 命令停用后端服务的日志记录功能。
完全停用日志记录功能
gcloud compute backend-services update BACKEND_SERVICE \
    --global \
    --no-enable-logging
其中
- --global表示后端服务是全球性的。 此字段用于与传统应用负载均衡器搭配使用的后端服务。
- --no-enable-logging表示对该后端服务停用日志记录功能。
修改日志采样率
gcloud compute backend-services update BACKEND_SERVICE \
    --global \
    --logging-sample-rate=VALUE
其中
- --global表示后端服务是全球性的。 此字段用于与传统应用负载均衡器搭配使用的后端服务。
- --logging-sample-rate接受从- 0.0到- 1.0值,其中- 0.0表示不在日志中记录任何请求,- 1.0表示在日志中记录所有请求。只有搭配使用- --enable-logging参数时才有意义。启用日志记录功能的情况下,如果将采样率设置为- 0.0,那么效果将相当于停用日志记录功能。
查看日志
如需在 Google Cloud 控制台中直接遵循有关此任务的分步指导,请点击操作演示:
如需查看日志,请进入 Logs Explorer 页面:
- 如需查看所有日志,请在资源过滤条件菜单中选择 Cloud HTTP 负载均衡器 > 所有转发规则。 
- 如需查看一条转发规则的日志,请选择一个转发规则名称。 
- 如需查看一个网址映射的日志,请选择一条转发规则,然后选择一个网址映射。 
布尔值类型的日志字段通常仅在其值为 true 时才会显示。
    如果某个布尔值字段的值为 false,则日志中将不会出现该字段。
系统为日志字段强制执行 UTF-8 编码。非 UTF-8 字符将被替换为问号。
对于传统应用负载均衡器和全球外部应用负载均衡器,您可以使用资源日志 (resource.type="http_load_balancer") 导出基于日志的指标。这些指标是基于应用负载均衡器规则(基于日志的指标)资源 (l7_lb_rule) 创建的,此资源位于 Cloud Monitoring 信息中心中(而不是 https_lb_rule 资源下)。
记录的内容
外部应用负载均衡器日志条目包含对监控和调试 HTTP(S) 流量有用的信息。日志记录包含必填字段,这些字段是每个日志记录的默认字段。
日志记录包含可选字段,用于添加有关 HTTP(S) 流量的其他信息。可以省略可选字段,以节省存储费用。
某些日志字段采用多字段格式,在给定字段中包含多段数据。例如,tls 字段采用 TlsInfo 格式,其中包含 earlyDataRequest 字段。
以下记录格式表介绍了这些采用多字段格式的字段。
| 字段 | 字段格式 | 字段类型:必填或可选 | 说明 | 
|---|---|---|---|
| severity insertID logName | LogEntry | 必需 | 日志条目中描述的常规字段。 | 
| 时间戳 | string (Timestamp format) | 可选 | 第一层 GFE 收到请求的时间。 | 
| httpRequest | HttpRequest | 必需 | 用于记录 HTTP 请求的通用协议。 未针对  | 
| resource | MonitoredResource | 必需 | MonitoredResource 是与日志条目关联的资源类型。 MonitoredResourceDescriptor 使用类型名称和一组标签来描述  | 
| jsonPayload | object (Struct format) | 必需 | 以 JSON 对象表示的日志条目载荷。JSON 对象包含以下字段: 
 | 
| 字符串 | 必需 | statusDetails字段会显示一个字符串,用于说明负载均衡器返回其 HTTP 状态代码的原因。如需详细了解这些日志字符串,请参阅 statusDetails HTTP 成功消息和 statusDetails HTTP 失败消息。 | |
| 字符串 | 必需 | backendTargetProjectNumber字段包含在其中创建了后端目标(后端服务或后端存储桶)的项目的编号。此字段的格式为:"projects/PROJECT_NUMBER"。此信息仅适用于使用自定义错误响应的全球外部应用负载均衡器。 | |
| 整数 | 必需 | overrideResponseCode包含应用于发送给客户端的响应的替换响应代码。此信息仅适用于使用自定义错误响应的全球外部应用负载均衡器。 | |
| 字符串 | 必需 | errorService字段包含提供自定义错误响应的后端服务。此信息仅适用于使用自定义错误响应的全球外部应用负载均衡器。 | |
| 字符串 | 必需 | errorBackendStatusDetails字段包含向客户端提供的最终响应的statusDetails。此信息仅适用于使用自定义错误响应的全球外部应用负载均衡器。 | |
| AuthzPolicyInfo | 必需 | authzPolicyInfo字段用于存储授权政策结果的相关信息。此信息仅适用于已启用授权政策的全球外部应用负载均衡器。如需了解详情,请参阅针对授权政策记录的内容。 | |
| 字符串 | 可选 | 只有在使用传统应用负载均衡器迁移功能时,才能填充 loadBalancingScheme字段。此字段包含一个字符串,可描述用于路由请求的负载均衡方案。可能的值为EXTERNAL或EXTERNAL_MANAGED。 | |
| TlsInfo | 必需 | 
 使用  
 无法通过将  | |
| OrcaLoadReport | 可选 | 
 使用  
 您还可以将  | 
TlsInfo 字段格式
| 字段 | 字段格式 | 字段类型:必填或可选 | 说明 | 
|---|---|---|---|
| protocol | 字符串 | 可选 | 客户端用于与负载均衡器建立连接的 TLS 协议。可能的值为 TLSv1、TLSv1.1、TLSv1.2、TLSv1.3或QUIC。如果客户端未使用 TLS/SSL 加密,则此值设置为NULL。 | 
| 加密方式 | 字符串 | 可选 | 客户端用于与负载均衡器建立连接的 TLS 加密。如果客户端未使用 HTTP(S) 或客户端未使用 TLS/SSL 加密,则此值设置为 NULL。 | 
| earlyDataRequest | 布尔值 | 必需 | 请求在 TLS 握手中包含早期数据。 | 
资源标签
下表列出了 resource.type="http_load_balancer" 的资源标签。
| 字段 | 类型 | 说明 | 
|---|---|---|
| backend_service_name | 字符串 | 后端服务的名称。 | 
| forwarding_rule_name | 字符串 | 转发规则对象的名称。 | 
| project_id | 字符串 | 与此资源关联的 Google Cloud 项目的标识符。 | 
| target_proxy_name | 字符串 | 转发规则引用的目标代理对象的名称。 | 
| url_map_name | 字符串 | 配置为选择一项后端服务的网址映射对象的名称。 | 
| zone | 字符串 | 运行负载均衡器的可用区。可用区为 global。 | 
statusDetails HTTP 成功消息
| statusDetails(成功) | 含义 | 通用的附带响应代码 | 
|---|---|---|
| byte_range_caching | 通过 Cloud CDN 字节范围缓存处理 HTTP 请求。 | 任何可缓存的响应代码都有可能。 | 
| response_from_cache | HTTP 请求由 Cloud CDN 缓存处理。 | 任何可缓存的响应代码都有可能。 | 
| response_from_cache_validated | 返回码由通过后端验证的 Cloud CDN 缓存条目设置。 | 任何可缓存的响应代码都有可能。 | 
| response_sent_by_backend | HTTP 请求已成功代理到后端,响应由后端返回。 | HTTP 响应代码由后端上运行的软件设置。 | 
statusDetails HTTP 失败消息
| statusDetails(失败) | 含义 | 常见的附带状态代码 | 
|---|---|---|
| aborted_request_due_to_backend_early_response | 包含正文的请求因后端发送含状态代码的早期响应而取消。响应被转发给客户端。请求终止。 | 4XX或5XX | 
| backend_connection_closed_after_partial_response_sent | 部分响应发送给客户端后,后端连接意外关闭。 | HTTP 状态代码由后端上运行的软件设置。
     HTTP 状态代码  如果 HTTP(S) 连接已升级为 WebSocket 连接,则 HTTP 状态代码为  | 
| backend_connection_closed_before_data_sent_to_client | 响应代理至客户端之前,后端与负载均衡器的连接意外关闭。 | 502、503 如果 HTTP(S) 连接已升级为 WebSocket 连接,则 HTTP 状态代码为  | 
| backend_early_response_with_non_error_status | 在接收整个请求正文前,后端向请求发送无错误状态代码( 1XX或2XX)。 | 502、503 | 
| backend_interim_response_not_supported | 在不支持临时响应的情况下,后端对请求发送了临时 1XX状态代码。 | 
 | 
| backend_response_corrupted | 后端发送的 HTTP 响应正文含无效的分块传输编码或损坏的传输编码。 | 取决于损坏的性质,任何状态代码都有可能。通常为 502、503。 | 
| backend_response_headers_too_long | 后端发送的 HTTP 响应标头超出了允许的限制。如需了解详情,请参阅外部应用负载均衡器的标头大小部分。 | 502、503 | 
| backend_timeout | 后端在生成响应时超时。 对于 WebSocket 连接: 
 | 
 如果 HTTP(S) 连接已升级为 WebSocket 连接,则 HTTP 状态代码为  | 
| banned_by_security_policy | 相应请求已被 Cloud Armor 基于速率的禁止规则禁止。 | 429 | 
| body_not_allowed | 客户端发送包含正文的 HTTP 请求,但所使用的 HTTP 方法不允许有正文。 | 400 | 
| byte_range_caching_aborted | 负载均衡器先前收到了表明资源可缓存的响应以及受支持的字节范围。Cloud CDN 收到了不一致的响应(例如,状态代码不是预期的 206 Partial Content)。尝试使用字节范围请求执行缓存填充时,会发生这种情况。
     因此,负载均衡器取消了对客户端的响应。 | 2XX | 
| byte_range_caching_forwarded_backend_response | 负载均衡器先前收到了表明资源可缓存的响应以及受支持的字节范围。Cloud CDN 收到了不一致的响应(例如,状态代码不是预期的 206 Partial Content)。尝试使用字节范围请求执行缓存填充时,会发生这种情况。
     负载均衡器随后将不一致的响应转发给客户端。 | 从后端返回 - 任何状态代码均有可能。 | 
| byte_range_caching_retrieval_abandoned | 用户取消了由 Cloud CDN 发起的字节范围请求或验证请求。 | 从后端返回 - 任何状态代码均有可能。 | 
| byte_range_caching_retrieval_from_backend_failed_after_partial_response | 由 Cloud CDN 发起的字节范围请求或验证请求遇到了错误。请参阅与 Cloud CDN 所发起请求对应的 Cloud Logging 日志条目,详细了解后端状态。 | 2XX | 
| cache_lookup_failed_after_partial_response | 由于内部错误,负载均衡器无法传送来自 Cloud CDN 缓存的完整响应。 | 2XX | 
| cache_lookup_timeout_after_partial_response | 由于客户端没有及时检索到内容,Cloud CDN 缓存查找流发生超时情况。 | 2XX | 
| client_disconnected_after_partial_response | 负载平衡器发送部分响应后,与客户端的连接中断。 | 从后端返回 - 任何状态代码均有可能。 如果 HTTP(S) 连接已升级为 WebSocket 连接,则 HTTP 状态代码为  | 
| client_disconnected_before_any_response | 负载均衡器发送任何响应之前,与客户端的连接已中断。 | 
 如果 HTTP(S) 连接已升级为 WebSocket 连接,则 HTTP 状态代码为  | 
| client_timed_out | Google Front End (GFE) 在代理请求或响应时由于缺乏进展而闲置客户端连接。 | 0或408 | 
| client_cert_invalid_rsa_key_size | 客户端叶或中间证书的 RSA 密钥大小无效。 如需了解详情,请参阅关闭连接时记录的错误。 | 0 | 
| client_cert_unsupported_elliptic_curve_key | 客户端证书或中间证书使用的是不受支持的椭圆曲线。如需了解详情,请参阅关闭连接时记录的错误。 | 0 | 
| client_cert_unsupported_key_algorithm | 客户端证书或中间证书使用非 RSA、非 ECDSA 算法。如需了解详情,请参阅关闭连接时记录的错误。 | 0 | 
| client_cert_pki_too_large | 用于验证的 PKI 具有十个以上的中间证书,它们共享相同的主体和主体公钥信息。如需了解详情,请参阅关闭连接时记录的错误。 | 0 | 
| client_cert_chain_max_name_constraints_exceeded | 为验证提供的中间证书有超过 10 个名称限制。如需了解详情,请参阅关闭连接时记录的错误。 | 0 | 
| client_cert_chain_invalid_eku | 客户端证书或其颁发者没有包含 clientAuth的扩展密钥用途 (EKU)。如需了解详情,请参阅关闭连接时记录的错误。 | 0 | 
| client_cert_validation_timed_out | 验证证书链时超出了时间限制。 如需了解详情,请参阅关闭连接时记录的错误。 | 0 | 
| client_cert_validation_search_limit_exceeded | 在尝试验证证书链时达到深度或迭代限制。如需了解详情,请参阅关闭连接时记录的错误。 | 0 | 
| client_cert_validation_not_performed | 配置 mTLS 时没有设置 TrustConfig。
    如需了解详情,请参阅关闭连接时记录的错误。 | 0 | 
| client_cert_not_provided | 客户端在握手期间未提供请求的证书。 如需了解详情,请参阅关闭连接时记录的错误。 | 0 | 
| client_cert_validation_failed | 使用 MD4、MD5 和 SHA-1 等哈希算法时,客户端证书未通过 TrustConfig验证。
   如需了解详情,请参阅关闭连接时记录的错误。 | 0 | 
| config_not_found | 负载均衡器缺少项目配置。在您进行了添加新资源的配置更改之后,可能会间歇性发生这种情况。 另一个导致此错误的原因是,第一层 GFE 无法与第二层 GFE 进行通信。这可能是由于内部错误(例如正在进行的发布、负载均衡器过载或间歇性配置问题)造成的。 这些错误本质上是暂时性的,预计会完全符合 SLA 要求。 不过,如果错误率超过 0.01%,请与 Google Cloud 支持团队联系以获取进一步的帮助。 | 404、502、503 | 
| direct_response | 负载均衡器覆盖此请求并返回固定响应。 | 根据问题的性质,您可能会看到任何 HTTP 状态代码。例如,HTTP 410状态代码表示后端因欠费而不可用。 | 
| denied_by_security_policy | 负载均衡器因 Google Cloud Armor 安全政策而拒绝了此请求。 | 在安全政策中配置。 | 
| error_uncompressing_gzipped_body | 对 gzip 格式的 HTTP 响应进行解压缩时出错。 | 502、503 | 
| failed_to_connect_to_backend | 负载均衡器无法连接到后端。这包括连接阶段的超时。 | 502、503 | 
| failed_to_pick_backend | 负载均衡器无法挑选运转状况良好的后端来处理请求。 | 502、503 | 
| failed_to_negotiate_alpn | 负载均衡器和后端无法协商用于通过 TLS 相互通信的应用层协议(如 HTTP/2)。 | 502、503 | 
| headers_too_long | 请求标头大于最大允许值。 | 413 | 
| http_version_not_supported | HTTP 版本不受支持。目前仅支持 HTTP 0.9、1.0、1.1 和 2.0。 | 400 | 
| internal_error | 负载均衡器出现内部错误。通常表示负载均衡器基础架构中的暂时性错误。请重试您的查询。 | 4XX或5XX | 
| invalid_chunk_framing | 使用 Transfer-Encoding:
   Chunked标头发送的请求和响应不符合 RFC 9112 规范。根据 RFC,chunked_body和last-chunk字段都必须以CRLF结尾。 | 400 | 
| invalid_external_origin_endpoint | 外部后端的配置无效。请查看互联网 NEG 配置,确保它指定了有效的 FQDN/IP 地址和端口。 | 4XX | 
| invalid_request_headers | 从客户端收到的 HTTP 请求标头包含至少一个不符合适用 HTTP 规范的字符。 例如,包含双引号 ( 如需了解详情,请参阅以下主题: | 400 | 
| invalid_http2_client_header_format | 来自客户端的 HTTP/2 标头无效。 如需了解详情,请参阅 invalid_request_headers。 | 400 | 
| invalid_http2_client_request_path | 客户端的 HTTP/2 请求路径包含至少一个不符合 URI 规范的字符。 如需了解详情,请参阅 RFC 3986 的“3.3. 路径”部分。 | 400 | 
| multiple_iap_policies | 多个 Identity-Aware Proxy (IAP) 政策不能结合使用。如果您将一项 IAP 政策关联到后端服务,并将另一项政策关联到无服务器对象,请移除其中一项政策然后重试。无服务器对象包括 App Engine、Cloud Run 和 Cloud Run functions。 | 500 | 
| malformed_chunked_body | 请求正文采用了不正确的块编码。 | 411 | 
| request_loop_detected | 负载平衡器检测到了请求循环。此循环可能是由于配置错误,导致后端将请求转发回负载均衡器而造成的。 | 502、503 | 
| required_body_but_no_content_length | HTTP 请求需要具有正文,但请求标头不包含内容长度标头或分块传输编码标头。 | 400、403、411 | 
| retriable_error | 负载均衡器遇到了基础设施错误,可以重试请求。在您进行了添加或引用新资源的配置更改之后,可能会间歇性发生这种情况。 如果第一层 GFE 因内部错误(例如正在进行的发布、负载均衡器过载或间歇性配置问题)而无法与第二层 GFE 进行通信,也会出现此问题。 这些错误本质上是暂时性的,预计会完全符合 SLA 要求。 不过,如果错误率在一段时间内持续超过 0.01%,请与 Google Cloud 支持团队联系以获取进一步的帮助。 | 404、502、503 | 
| secure_url_rejected | 明文 HTTP/1.1 连接接收到带有 https://网址的请求。 | 400 | 
| server_cert_chain_exceeded_limit | 服务器证书链过长(服务器证书包含超过 10 个中间证书)。 | 502、503 | 
| 
 | 服务器证书具有 Extended Key Usage (EKU)扩展字段,但该字段不包含serverAuth。 | |
| 
 | 为验证提供的中间证书有超过 10 个名称限制。 | 502、503 | 
| server_cert_exceeded_size_limit | 服务器证书载荷(包括所有中间证书)过大(超过 16 KB)。 | 503 | 
| server_cert_invalid_rsa_key_size | 服务器证书或中间证书的 RSA 密钥大小无效。 不执行验证。 RSA 密钥可为 2048 位到 4096 位。 | 503 | 
| server_cert_not_provided | 服务器在握手期间未提供请求的证书。 | 503 | 
| server_cert_pki_too_large | 用于验证的 PKI 具有 10 个以上的中间证书,它们共享相同的主体和主体公钥信息。 不执行验证。 | 503 | 
| server_cert_trust_config_not_found | 找不到 TrustConfig的匹配项。 | 503 | 
| server_cert_unsupported_elliptic_curve_key | 服务器证书或中间证书使用的是不受支持的椭圆曲线。 不执行验证。 有效曲线为 P-256 和 P-384。 | 503 | 
| server_cert_unsupported_key_algorithm | 服务器证书或中间证书使用非 RSA、非 ECDSA 算法。 不执行验证。 | 503 | 
| server_cert_validation_internal_error | 验证证书链时发生内部错误。 | 503 | 
| server_cert_validation_not_performed | 您在未设置  | 503 | 
| server_cert_validation_search_limit_exceeded | 在尝试验证证书链时达到深度或迭代限制。 证书链的深度上限为 10,包括根证书和服务器证书。迭代次数上限为 100(为验证服务器证书链所检查的证书的数量)。 | 503 | 
| server_cert_validation_timed_out | 尝试验证证书链时超出了时间限制。 | 503 | 
| server_cert_validation_unavailable | 服务无法执行证书链验证。 | 503 | 
| ssl_certificate_san_verification_failed | 负载均衡器在后端提供的 SSL 证书中找不到与配置的主机名匹配的主题备用名称 (SAN)。 | 502、503 | 
| ssl_certificate_chain_verification_failed | 由后端提供的 SSL 证书未通过 SSL 证书验证。 | 502、503 | 
| throttled_by_security_policy | 相应请求被 Cloud Armor 节流规则阻止。 | 429 | 
| unsupported_method | 客户端提供的 HTTP 请求方法不受支持。 | 400 | 
| unsupported_100_continue | 客户端请求在不支持“Expect: 100-continue”标头的协议中包含该标头。 | 400 | 
| upgrade_header_rejected | 客户端 HTTP 请求包含升级标头并且被拒绝。 | 400 | 
| websocket_closed | websocket 连接关闭。 | 101 | 
| websocket_handshake_failed | websocket 握手失败。 | 取决于握手失败的性质,任何状态代码均有可能。 | 
| request_body_too_large | HTTP 请求正文超出了后端支持的上限。 不适用于虚拟机后端。 | 413 | 
| handled_by_identity_aware_proxy | 此响应由 Identity-Aware Proxy 在验证客户端身份期间生成以确认是否允许访问。 | 
 | 
| serverless_neg_routing_failed | 无法分派无服务器 NEG 请求。如果无法访问 NEG 中指定的区域,或者找不到资源名称(例如 Cloud Run functions 名称),可能会发生此错误。 | 404、502、503 | 
| fault_filter_abort | 如果客户配置了故障过滤条件并且给定请求触发了故障过滤条件,则可能会发生此错误。 | 该值必须介于 200到599之间。 | 
| early_data_rejected | 在 TLS 早期数据中发送的请求无效。 在以下情况可能会发生此问题,但不限于: 
 | 425 | 
| service_extension_error | 调用负载均衡器使用的服务扩展程序时出错。 如果 Wasm 插件响应缓慢,且发送响应的时间超过 1 毫秒的限制,可能会出现这种情况。 | 425 | 
查看 mTLS 客户端证书验证的日志
如需查看双向 TLS 客户端证书验证期间关闭连接时记录的错误,请完成以下步骤。
控制台查询
- 在 Google Cloud 控制台中,转到 Logs Explorer 页面。 
- 点击显示查询切换开关。 
- 将以下内容粘贴到查询字段中。将 - FORWARDING_RULE_NAME替换为您的转发规则的名称。- jsonPayload.statusDetails=~"client_cert" jsonPayload.@type="type.googleapis.com/google.cloud.loadbalancing.type.LoadBalancerLogEntry" resource.labels.forwarding_rule_name=FORWARDING_RULE_NAME 
- 点击运行查询。 
授权政策请求日志
负载均衡器日志条目 JSON 载荷中的 authz_info 对象包含有关授权政策的信息。您可以为这些政策允许或拒绝的流量配置基于日志的指标。 查看更多授权政策日志详细信息。
| 字段 | 类型 | 说明 | 
|---|---|---|
| authz_info.policies[] | 对象 | 与请求匹配的政策的列表。 | 
| authz_info.policies[].name | 字符串 | 与请求匹配的授权政策的名称。 名称为空,原因如下: 
 | 
| authz_info.policies[].result | 枚举 | 结果可以是 ALLOWED或DENIED。 | 
| authz_info.policies[].details | 字符串 | 详细信息包括以下内容: 
 | 
| authz_info.overall_result | 枚举 | 结果可以是 ALLOWED或DENIED。 | 
Cloud Armor 的日志记录
statusDetail HTTP 失败消息表包含一些适用于 Cloud Armor 的消息。如需详细了解 Cloud Armor 记录的内容,请参阅使用请求日志记录。
共享 VPC 部署的日志记录
应用负载均衡器日志和指标通常导出到具有转发规则的项目。因此,默认情况下,服务管理员(在其中创建了后端服务的项目的所有者或用户)无权访问负载均衡器的日志和指标。您可以使用 IAM 角色将这些权限授予服务管理员。如需详细了解可用的 IAM 角色以及提供访问权限的步骤,请参阅授予对 Monitoring 的访问权限。
与日志交互
您可以使用 Cloud Logging API 与外部应用负载均衡器日志进行交互。Logging API 提供了多种方法来以交互方式过滤包含特定字段集的日志。它会将匹配的日志导出到 Cloud Logging、Cloud Storage、BigQuery 或 Pub/Sub。如需详细了解 Logging API,请参阅 Logging API 概览。
监控
负载均衡器会将监控数据导出到 Monitoring。
您可以使用监控指标执行以下操作:
- 评估负载均衡器的配置、使用情况和性能
- 排查问题
- 提高资源利用率和改善用户体验
指标报告频率和保留
系统会每隔 1 分钟将外部应用负载均衡器的指标批量导出到 Cloud Monitoring 中。监控数据会保留六 (6) 周。
默认情况下,信息中心可按 1H(1 小时)、6H(6 小时)、1D(1 天)、1W(1 周)和 6W(6 周)时间间隔提供数据分析。您可以在 1 分钟到 6 周的范围内手动指定分析时间间隔。
监控指标
您可以监控外部应用负载均衡器的以下指标。
全球外部应用负载均衡器的以下指标会报告给 Cloud Monitoring。这些指标以 loadbalancing.googleapis.com/ 开头。
| 指标 | 名称 | 说明 | 
|---|---|---|
| 请求数 | https/request_count | 外部应用负载均衡器处理的请求数 | 
| 请求字节数 | https/request_bytes_count | 以请求形式从客户端发送到外部应用负载均衡器的字节数 | 
| 响应字节数 | https/response_bytes_count | 以响应形式从外部应用负载均衡器发送到客户端的字节数 | 
| 总延迟时间 | https/total_latencies | 总延迟时间的分布情况。总延迟时间是代理收到请求的第一个字节到代理发送响应的最后一个字节之间的时间(以毫秒为单位)。其中包括:代理处理请求所用的时间、将请求从代理发送到后端所用的时间、后端处理请求所用的时间、将响应发送回代理所用的时间,以及代理处理响应并将响应发送到客户端所用的时间。 不包括客户端与代理之间的 RTT。此外,同一连接上的请求之间使用  对于 WebSocket 连接,此字段表示连接的整个时长。* 示例:负载均衡器每秒收到来自英国的 1 个请求,所有延迟时间为 100 毫秒,每秒收到来自美国的 9 个请求,所有延迟时间均为 50 毫秒。在一定时间内,英国发出 60 个请求,美国发出 540 个请求。监控指标保留了所有维度的分布。您可以请求如下所示的信息: 
 | 
| 前端 RTT† | https/frontend_tcp_rtt | 前端 RTT 的分布情况。前端 RTT 是数据从客户端到代理再返回所用的时间(以毫秒为单位)。其中包括请求从客户端到代理,以及从代理返回到客户端所用的时间。此值在连接的生命周期内不会更新。例如,使用三向握手建立 (TCP) 连接需要 1.5 个 RTT。 在处理请求时,负载均衡器会对数据在客户端和代理之间来回传输所需的时间进行采样并计算平均值,然后记录平滑的 RTT 值。平滑 RTT 是一种算法,用于处理 RTT 测量中可能发生的变体和异常。 | 
| 后端延迟时间† | https/backend_latencies | 后端延迟时间的分布情况。后端延迟时间是后端收到请求的第一个字节到代理收到响应的最后一个字节之间的时间(以毫秒为单位)。其中包括:将请求从代理发送到后端所用的时间、后端处理请求所用的时间以及将响应发送回代理所用的时间。 | 
| 响应代码类别比例 | 每种响应代码类别( 2xx、4xx…)的响应次数占外部应用负载均衡器总响应次数的比例。在 Monitoring 中,此值只会显示在默认信息中心,而不适用于自定义信息中心。您可以使用 Monitoring API 为该指标设置提醒。 | |
| 后端请求数 | https/backend_request_count | 从外部应用负载均衡器发送到后端的请求数。 | 
| 后端请求字节数 | https/backend_request_bytes_count | 以请求形式从外部应用负载均衡器发送到后端的字节数。 | 
| 后端响应字节数 | https/backend_response_bytes_count | 以响应形式从后端(包括缓存)发送到外部应用负载均衡器的字节数。 | 
* 如需监控 websocket 连接,请专门为 websocket 创建后端服务。
† 前端 RTT 和后端延迟时间的总和可能不小于或等于总延迟时间。这是因为,虽然在 HTTP 响应得到确认时,我们会对 GFE 到客户端的套接进行 RTT 轮询,但我们依赖部分测量结果的内核报告,无法确定内核对特定的 HTTP 响应进行 RTT 测量。最终结果是平滑计算 RTT 值也受以前的 HTTP 响应、SYN/ACK 和 SSL握手(不会影响当前 HTTP 请求实际耗时)的影响。
过滤指标的维度
您可以为外部应用负载均衡器的指标应用过滤条件。
系统会为每个传统应用负载均衡器和全球外部应用负载均衡器汇总指标。您可以按照以下维度对 resource.type="http_load_balancer" 或 resource.type="https_lb_rule" 过滤汇总的指标。请注意,并非所有维度都适用于所有指标。
| 属性 | 说明 | 
|---|---|
| backend_scope | 传送连接的后端服务实例群组的 Google Cloud 范围(区域或可用区)。 如果没有可用的实例组或者请求已由其他实体处理,您将会看到以下某个值,而不会看到后端服务实例组的区域或可用区。 
 选择此细分项后,图表会显示后端指标(负载均衡器到后端),而非前端指标(客户端到负载均衡器)。 | 
| backend_type | 响应客户端请求的后端组的名称。
      可以是  
 | 
| backend_target_type | 处理请求的后端服务的名称。 可以是 BACKEND_SERVICE、BACKEND_BUCKET;如果未分配后端,则是UNKNOWN;如果在选择后端、进行网址重定向或者具有无服务器后端的传统应用负载均衡器返回200 OK响应之前发生了错误或中断,则是NO_BACKEND_SELECTED。 | 
| matched_url_path_rule | 与 HTTP(S) 请求前缀匹配的网址映射路径规则(最多 50 个字符)。 | 
| forwarding_rule_name | 客户端用于发送请求的转发规则的名称。 | 
| url_map_name | 作为网址映射键的一部分配置的网址映射路径规则或路由规则。可以是  
 | 
| target_proxy_name | 转发规则引用的目标 HTTP(S) 代理对象的名称。 | 
| backend_target_name | 后端目标的名称。目标可以是后端服务或后端存储桶。如果未分配后端,则系统会返回 UNKNOWN。 | 
| backend_name | 后端实例组、存储桶或网络端点组 (NEG) 的名称。如果未分配后端,则系统会返回 UNKNOWN;如果在选择后端、进行网址重定向或者具有无服务器后端的传统应用负载均衡器返回200 OK响应之前发生了错误或中断,则系统会返回NO_BACKEND_SELECTED。 | 
| backend_scope_type | 后端组范围的类型。可以是  在使用块缓存时使用  | 
| proxy_continent | 终止 HTTP(S) 连接的 HTTP(S) GFE 所在的大洲,例如 America、Europe、Asia | 
| protocol | 客户端使用的协议,为以下项之一: HTTP/1.0、HTTP/1.1、HTTP/2.0、QUIC/HTTP/2.0、UNKNOWN。 | 
| response_code | 请求的 HTTP 状态代码。 | 
| response_code_class | 请求的 HTTP 状态代码类别: 200、300、400、500或0(表示无)。 | 
| cache_result | 通过代理响应 HTTP 请求的缓存结果: HIT、MISS、DISABLED、PARTIAL_HIT(适用于部分从缓存响应且部分从后端响应的请求)或UNKNOWN。 | 
| client_country | 发出 HTTP 请求的客户端所在的国家/地区(例如 United States或Germany) | 
| load_balancing_scheme | 所使用的负载均衡方案。如果使用的是传统应用负载均衡器,值为 EXTERNAL。如果使用的是全球外部应用负载均衡器,值为EXTERNAL_MANAGED。 | 
后续步骤
- 阅读 Cloud CDN 日志记录概览
- 了解缓存。
- 了解签名网址和签名 Cookie。