全球外部应用负载均衡器日志记录和监控

本文档介绍了如何配置 Cloud LoggingCloud Monitoring 并将其与传统版应用负载均衡器、全球外部应用负载均衡器和 Cloud CDN 配合使用。

日志记录

您可以为外部应用负载均衡器后端服务启用和停用日志记录功能,还可以查看其日志。对于具有后端存储桶的外部应用负载均衡器,日志记录功能会自动启用且无法停用。

您可以为每个后端服务启用或停用日志记录功能。您可以配置是记录所有请求还是记录随机采样的一小部分请求。

您必须确保没有适用于外部应用负载均衡器的日志排除项。如需了解如何验证是否允许 Cloud HTTP Load Balancer 日志,请参阅查看资源类型排除项

针对新的后端服务启用日志记录功能

控制台

  1. 在 Google Cloud 控制台中,转到负载均衡页面。

    进入“负载均衡”

  2. 点击您的负载均衡器的名称。

  3. 点击修改

  4. 点击后端配置

  5. 选择创建后端服务

  6. 填写必填的后端服务字段。

  7. 日志记录部分,选中启用日志记录复选框。

  8. 采样率字段中,设置采样概率。您可以设置 0.01.0 的数字,其中 0.0 表示不在日志中记录任何请求,1.0 表示在日志中记录所有请求。默认值为 1.0

  9. 如需完成后端服务的修改,请点击更新

  10. 如需完成负载均衡器修改,请点击更新

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

其中

  • --global 表示后端服务是全球性的。 此字段用于与全球外部应用负载均衡器搭配使用的后端服务。
  • --enable-logging 表示对该后端服务启用日志记录功能。
  • --logging-sample-rate 接受从 0.01.0 值,其中 0.0 表示不在日志中记录任何请求,1.0 表示在日志中记录所有请求。只有搭配使用 --enable-logging 参数时才有意义。启用日志记录功能的情况下,如果将采样率设置为 0.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

其中

  • --global 表示后端服务是全球性的。 此字段用于与传统应用负载均衡器搭配使用的后端服务。
  • --enable-logging 表示对该后端服务启用日志记录功能。
  • --logging-sample-rate 接受从 0.01.0 值,其中 0.0 表示不在日志中记录任何请求,1.0 表示在日志中记录所有请求。只有搭配使用 --enable-logging 参数时才有意义。启用日志记录功能的情况下,如果将采样率设置为 0.0,那么效果将相当于停用日志记录功能。默认值为 1.0

针对现有后端服务启用日志记录功能

控制台

  1. 在 Google Cloud 控制台中,转到负载均衡页面。

    进入“负载均衡”

  2. 点击您的负载均衡器的名称。

  3. 点击修改

  4. 点击后端配置

  5. 点击后端服务旁边的 修改

  6. 日志记录部分,选中启用日志记录复选框。

  7. 采样率字段中,设置采样概率。您可以设置 0.01.0 的数字,其中 0.0 表示不在日志中记录任何请求,1.0 表示在日志中记录所有请求。默认值为 1.0

  8. 如需完成后端服务的修改,请点击更新

  9. 如需完成负载均衡器修改,请点击更新

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.01.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.01.0 值,其中 0.0 表示不在日志中记录任何请求,1.0 表示在日志中记录所有请求。只有搭配使用 --enable-logging 参数时才有意义。启用日志记录功能的情况下,如果将采样率设置为 0.0,那么效果将相当于停用日志记录功能。默认值为 1.0

针对现有后端服务停用或修改日志记录功能

控制台

  1. 在 Google Cloud 控制台中,转到负载均衡页面。

    进入“负载均衡”

  2. 点击您的负载均衡器的名称。

  3. 点击修改

  4. 点击后端配置

  5. 点击后端服务旁边的 修改

  6. 如需完全停用日志记录功能,请在日志记录部分中清除启用日志记录复选框。

  7. 如果要保持启用日志记录功能,可以在采样率字段中设置不同的采样概率。您可以设置 0.01.0 的数字,其中 0.0 表示不在日志中记录任何请求,1.0 表示在日志中记录所有请求。默认值为 1.0。 例如,要将日志存储量减到 20%,请将采样率设置为 0.2

  8. 如需完成后端服务的修改,请点击更新

  9. 如需完成负载均衡器修改,请点击更新

gcloud:全局模式

使用 gcloud compute backend-services update 命令停用后端服务的日志记录功能。

完全停用日志记录功能

gcloud compute backend-services update BACKEND_SERVICE \
    --global \
    --no-enable-logging

其中

  • --global 表示后端服务是全球性的。 此字段用于与全球外部应用负载均衡器搭配使用的后端服务。
  • --region 表示后端服务是区域性的。此字段用于与区域外部应用负载均衡器一起使用的后端服务。
  • --no-enable-logging 表示对该后端服务停用日志记录功能。

修改日志采样率

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.01.0 值,其中 0.0 表示不在日志中记录任何请求,1.0 表示在日志中记录所有请求。只有搭配使用 --enable-logging 参数时才有意义。启用日志记录功能的情况下,如果将采样率设置为 0.0,那么效果将相当于停用日志记录功能。

查看日志


如需在 Google Cloud 控制台中直接遵循有关此任务的分步指导,请点击操作演示

操作演示


HTTP(S) 日志将依次按照转发规则网址映射编入索引。

如需查看日志,请进入 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) 流量有用的信息。日志记录包含必填字段,这些字段是每个日志记录的默认字段。

字段 字段格式 字段类型:必填或可选 说明
severity
insertID
logName
LogEntry 必填 日志条目中描述的常规字段。
时间戳 string (Timestamp format) 可选 第一层 GFE 接收请求的时间。
httpRequest HttpRequest 必填 用于记录 HTTP 请求的通用协议。

未针对 resource.type="http_load_balancer" 填充 HttpRequest.protocol

.
resource MonitoredResource 必填

MonitoredResource 是与日志条目关联的资源类型。

MonitoredResourceDescriptor 使用类型名称和一组标签来描述 MonitoredResource 对象的架构。如需了解详情,请参阅资源标签

jsonPayload object (Struct format) 必填 以 JSON 对象表示的日志条目载荷。JSON 对象包含以下字段:
  • statusDetails
  • backendTargetProjectNumber
  • overrideResponseCode
  • errorService
  • errorBackendStatusDetails
字符串 必填 statusDetails 字段会显示一个字符串,用于说明负载均衡器返回其 HTTP 状态的原因。如需详细了解这些日志字符串,请参阅 statusDetails HTTP 成功消息statusDetails HTTP 失败消息
字符串 必填 backendTargetProjectNumber 字段包含在其中创建了后端目标(后端服务或后端存储桶)的项目的编号。此字段的格式为:"projects/PROJECT_NUMBER"。此信息仅适用于使用自定义错误响应的全球外部应用负载均衡器。
整数 必填 overrideResponseCode 包含应用于发送给客户端的响应的替换响应代码。此信息仅适用于使用自定义错误响应的全球外部应用负载均衡器。
字符串 必填 errorService 字段包含提供自定义错误响应的后端服务。此信息仅适用于使用自定义错误响应的全球外部应用负载均衡器。
字符串 必填 errorBackendStatusDetails 字段包含向客户端提供的最终响应的 statusDetails。此信息仅适用于使用自定义错误响应的全球外部应用负载均衡器。

资源标签

下表列出了 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 响应代码 0(零)表示后端发送了不完整的 HTTP 标头。

如果 HTTP(S) 连接已升级为 WebSocket 连接,则 HTTP 响应代码为 101。

backend_connection_closed_before_data_sent_to_client 响应代理至客户端之前,后端与负载均衡器的连接意外关闭。

502、503

如果 HTTP(S) 连接已升级为 WebSocket 连接,则 HTTP 响应代码为 101。

backend_early_response_with_non_error_status 在接收整个请求正文前,后端向请求发送无错误响应(1XX 或 2XX)。 502、503
backend_interim_response_not_supported 在不支持临时响应的情况下,后端对请求发送了临时 1XX 响应。

502、503

backend_response_corrupted 后端发送的 HTTP 响应正文含无效的分块传输编码或损坏的传输编码。 取决于损坏的性质,任何响应代码都有可能。通常为 502、503。
backend_response_headers_too_long 后端发送的 HTTP 响应标头超出了允许的限制。如需了解详情,请参阅外部应用负载均衡器的标头大小部分。 502、503
backend_timeout

后端在生成响应时超时。

对于 WebSocket 连接:

  • 对于全球外部应用负载均衡器,当 GFE 在后端服务超时到期后关闭处于空闲状态的 WebSocket 连接时,系统会生成错误。
  • 对于传统应用负载均衡器,当 GFE 在后端服务超时到期后关闭处于空闲或活跃状态的 WebSocket 连接时,系统会生成错误。

502、503

如果 HTTP(S) 连接已升级为 WebSocket 连接,则 HTTP 响应代码为 101。

banned_by_security_policy 相应请求已被 Google 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 响应代码为 101。

client_disconnected_before_any_response 负载均衡器发送任何响应之前,与客户端的连接已中断。

0

如果 HTTP(S) 连接已升级为 WebSocket 连接,则 HTTP 响应代码为 101。

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 客户端证书或其颁发者都没有包含 clientAuthExtended Key Usage (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 客户端证书未通过 TrustConfig 验证。 如需了解详情,请参阅关闭连接时记录的错误 0
config_not_found

负载均衡器缺少项目配置。这可能间歇性发生,尤其是在您进行了配置更改来添加新资源之后。

由于存在两层代理,因此有时第一层 GFE 可能无法到达第二层 GFE。这可能是由于内部错误(例如正在进行的发布、负载均衡器过载或间歇性配置问题)造成的。

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
invalid_external_origin_endpoint 外部后端的配置无效。请查看互联网 NEG 配置,确保它指定了有效的 FQDN/IP 地址和端口。 4XX
invalid_request_headers

从客户端收到的 HTTP 请求标头包含至少一个不符合适用 HTTP 规范的字符。

例如,包含双引号 (") 或标准 ASCII 范围以外的任何字符(即大于等于 0x80 的任何字节)的标头字段名称无效。

如需了解详情,请参阅以下主题:

400
invalid_http2_client_header_format 来自客户端的 HTTP/2 标头无效。 如需了解详情,请参阅 invalid_request_headers 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
secure_url_rejected 明文 HTTP/1.1 连接接收到带有 https:// 网址的请求。 400
ssl_certificate_san_verification_failed 负载均衡器在后端提供的 SSL 证书中找不到与配置的主机名匹配的 SAN(主题备用名称)。 502、503
ssl_certificate_chain_verification_failed 由后端提供的 SSL 证书未通过 SSL 证书验证。 502、503
throttled_by_security_policy 该请求被 Google 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 在验证客户端身份期间生成以确认是否允许访问。 200、302、400、401、403、500、502、503
serverless_neg_routing_failed 无法分派无服务器 NEG 请求。如果无法访问 NEG 中指定的区域,或者找不到资源名称(例如 Cloud Run functions 名称),可能会发生此错误。 404、502、503
fault_filter_abort 如果客户配置了故障过滤条件并且给定请求触发了故障过滤条件,则可能会发生此错误。 该值必须介于 200 到 599 之间。

查看 mTLS 客户端证书验证的日志

如需查看双向 TLS 客户端证书验证期间关闭连接时记录的错误,请完成以下步骤。

控制台查询

  1. 在 Google Cloud 控制台中,转到“日志浏览器”页面。

    转到日志浏览器

  2. 点击显示查询切换开关。

  3. 将以下内容粘贴到查询字段中。将 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
    
  4. 点击运行查询

授权政策请求日志

负载均衡器日志条目 JSON 载荷中的 authz_info 对象包含有关授权政策的信息。您可以为这些政策允许或拒绝的流量配置基于日志的指标。

字段 类型 说明
authz_info.policies[] 对象 与请求匹配的政策的列表。
authz_info.policies[].name 字符串 与请求匹配的授权政策的名称。
名称为空的原因如下:
  • 没有与请求匹配的 ALLOW 政策,拒绝请求。
  • 没有与请求匹配的 DENY 政策,允许请求。
authz_info.policies[].result 枚举 结果可以是 ALLOWEDDENIED
authz_info.policies[].details 字符串 详细信息包括以下内容:
  • allowed_as_no_deny_policies_matched_request
  • denied_as_no_allow_policies_matched_request
  • denied_by_authz_extension
  • denied_by_cloud_iap
authz_info.overall_result 枚举 结果可以是 ALLOWEDDENIED

后端存储桶的日志记录

系统会自动为具有后端存储桶的负载均衡器启用日志记录功能。您无法修改或停用后端存储桶的日志记录。

Google Cloud Armor 的日志记录

statusDetail HTTP 失败消息表包含一些适用于 Google Cloud Armor 的消息。如需详细了解 Google Cloud Armor 记录的内容,请参阅使用请求日志记录

共享 VPC 部署的日志记录

应用负载均衡器日志和指标通常导出到具有转发规则的项目。因此,默认情况下,服务管理员(在其中创建了后端服务的项目的所有者或用户)无权访问负载均衡器的日志和指标。您可以使用 IAM 角色将这些权限授予服务管理员。如需详细了解可用的 IAM 角色以及提供访问权限的步骤,请参阅授予对 Monitoring 的访问权限

与日志交互

您可以使用 Cloud Logging API 与外部应用负载均衡器日志进行交互。Logging API 提供了多种方法来以交互方式过滤包含特定字段集的日志。它会将匹配的日志导出到 Cloud Logging、Cloud Storage、BigQuery 或 Pub/Sub。如需详细了解 Logging API,请参阅 Cloud Logging API 概览

监控

负载均衡器会将监控数据导出到 Cloud Monitoring

您可以使用监控指标执行以下操作:

  • 评估负载均衡器的配置、使用情况和性能
  • 排查问题
  • 提高资源利用率和改善用户体验

除了 Cloud Monitoring 中的预定义信息中心以外,您还可以通过 Cloud Monitoring API 创建自定义信息中心、设置提醒和查询指标。

查看预定义 Cloud Monitoring 信息中心

Cloud Monitoring 提供预定义信息中心来监控负载均衡器。这些信息中心由 Cloud Monitoring 自动填充。

执行以下步骤来访问预定义的信息中心:

  1. 转到 Google Cloud 控制台中的 Monitoring

    转到 Monitoring

  2. 在 Monitoring 导航面板中,点击信息中心

  3. 类别下,点击 GCP

    • 如需查看所有 Google Cloud 负载均衡器的信息中心列表,请选择名为 Google Cloud 负载均衡器 (Google Cloud Load Balancers) 的信息中心。如需查看特定负载均衡器的信息中心,请在列表中找到负载均衡器,然后点击其名称。

    • 如需仅查看外部应用负载均衡器的预定义信息中心,请选择名为外部 HTTP(S) 负载均衡器的信息中心。此页面会显示一个信息中心,其中显示项目中所有外部应用负载均衡器的 5XX 响应比率和后端延迟时间。它还会列出项目中所有外部应用负载均衡器的信息中心。

      您可以点击进入每个负载均衡器的信息中心。每个信息中心包含以下内容:

      • 预填充图表,按响应代码类别(5XX、4XX、3XX、2XX)显示响应的细分
      • 总延迟时间
      • 后端延迟时间
      • 前端 RTT
      • 请求数
      • 指向负载均衡器日志的链接
  4. 如需查看第三方服务的信息中心,请返回信息中心页面。在类别下,点击其他

    • 如需查看特定的第三方服务信息中心,请在列表中找到它,然后点击其名称。

定义提醒政策


如需在 Google Cloud 控制台中直接遵循有关此任务的分步指导,请点击操作演示

操作演示


您可以创建提醒政策来监控指标的值,当这些指标违反条件时便会通知您。

  1. 在 Google Cloud 控制台中,转到 提醒页面:

    进入提醒

    如果您使用搜索栏查找此页面,请选择子标题为监控的结果。

  2. 如果您尚未创建通知渠道并希望收到通知,请点击修改通知渠道并添加通知渠道。添加渠道后,返回到提醒页面。
  3. 提醒页面中,点击创建政策
  4. 如需选择指标,请展开选择指标菜单,然后执行以下操作:
    1. 如需将菜单限制为相关条目,请在过滤栏中输入 Global External Application Load Balancer Rule。如果过滤菜单后没有显示任何结果,请停用仅显示活跃的资源和指标切换开关。
    2. 对于资源类型,请选择全球外部应用负载均衡器规则
    3. 选择指标类别指标,然后选择应用
  5. 点击下一步
  6. 配置提醒触发器页面中的设置决定了何时触发提醒。 选择条件类型,并在必要时指定阈值。如需了解详情,请参阅创建指标阈值提醒政策
  7. 点击下一步
  8. 可选:如需将通知添加到您的提醒政策中,请点击通知渠道。在对话框中,从菜单中选择一个或多个通知渠道,然后点击确定
  9. 可选:更新突发事件自动关闭持续时间。此字段用于确定在缺少指标数据的情况下 Monitoring 何时关闭突发事件。
  10. 可选:点击文档,然后添加您希望包含在通知消息中的任何信息。
  11. 点击提醒名称,然后输入提醒政策的名称。
  12. 点击创建政策
如需了解详情,请参阅提醒政策

定义 Cloud Monitoring 自定义信息中心

您可以为负载均衡器的指标创建自定义 Cloud Monitoring 信息中心:

  1. 在 Google Cloud 控制台中,前往 Monitoring 页面。

    进入 Monitoring

  2. 选择信息中心 > 创建信息中心

  3. 点击添加图表,然后为图表输入一个标题。

  4. 如需确定要显示的时序,请选择资源类型和指标类型:

    1. 资源和指标部分,点击图表,然后在选择指标部分,从可用选项中进行选择:
      • 对于全球外部应用负载均衡器,请选择资源类型全球外部应用负载均衡器规则
    2. 点击应用
  5. 如需指定监控过滤条件,请依次点击过滤条件 > 添加过滤条件

  6. 点击保存

指标报告频率和保留

系统会每隔 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

延迟时间的分布。延迟时间是指收到的请求的第一个字节到 GFE 发送的响应的最后一个字节之间的时间。

总延迟时间通过请求/响应来计算。同一连接上的请求之间使用 Connection: keep-alive 的暂停不会影响测量结果。在 Cloud Monitoring 视图中,测量结果通常会降低到第 95 百分位。

对于 WebSocket 连接,此字段表示连接的整个时长。

示例:负载均衡器每秒收到来自英国的 1 个请求,所有延迟时间为 100 毫秒,每秒收到来自美国的 9 个请求,所有延迟时间均为 50 毫秒。在一定时间内,英国发出 60 个请求,美国发出 540 个请求。监控指标保留了所有维度的分布。您可以请求如下所示的信息:

  • 总体延迟时间的中位数 (300/600) - 50 毫秒
  • 英国延迟时间的中位数 (30/60) - 100 毫秒
  • 总体延迟时间的第 95 百分位 (570/600) - 100 毫秒
前端 RTT* https/frontend_tcp_rtt 针对客户端和 GFE 之间的每个连接测量的平滑往返时间 (RTT) 分布(通过 GFE 的 TCP 栈测量)。平滑 RTT 是一种算法,用于处理 RTT 测量中可能发生的变体和异常。
后端延迟时间* https/backend_latencies

从 GFE 向后端发送首个请求字节开始,直到 GFE 从后端接收到响应的最后一个字节,测量延迟的分布。

对于 websocket 连接,后端延迟时间针对 websocket 会话的整个时长进行计算。

响应代码类别比例 每种响应代码类别(2XX、4XX…)的响应次数占外部应用负载均衡器总响应次数的比例。在 Cloud Monitoring 中,该值只会显示在默认信息中心,而不适用于自定义信息中心。您可以使用 API 为该指标设置提醒。
后端请求数 https/backend_request_count 从外部应用负载均衡器发送到后端的请求数。
后端请求字节数 https/backend_request_bytes_count 以请求形式从外部应用负载均衡器发送到后端的字节数。
后端响应字节数 https/backend_response_bytes_count 以响应形式从后端(包括缓存)发送到外部应用负载均衡器的字节数。

*前端 RTT 和后端延迟时间的总和不保证小于或等于总延迟时间。这是因为,虽然在 HTTP 响应收到 ACK 时,我们会对 GFE 到客户端的套接进行 RTT 轮询,但我们依赖部分测量结果的内核报告,无法保障内核对特定的 HTTP 响应进行 RTT 测量。最终结果是平滑计算 RTT 值也受以前的 HTTP 响应、SYN/ACK 和 SSL握手(不会影响当前 HTTP 请求实际耗时)的影响。

如需监控 websocket 连接,请专门为 websocket 创建后端服务。

过滤指标的维度

您可以为外部应用负载均衡器的指标应用过滤条件。

系统会为每个传统应用负载均衡器和全球外部应用负载均衡器汇总指标。您可以按照以下维度对 resource.type="http_load_balancer"resource.type="https_lb_rule" 过滤汇总的指标。请注意,并非所有维度都适用于所有指标。

属性 说明
backend_scope 传送连接的后端服务实例组的 Google Cloud 范围(区域或可用区)。

如果没有可用的实例组或者请求已由其他实体处理,您将会看到以下某个值,而不会看到后端服务实例组的区域或可用区。

  • FRONTEND_5XX - 发生了内部错误,导致 GFE 无法选择后端。GFE 向客户端返回了“5XX”。
  • INVALID_BACKEND - GFE 找不到健康状况良好的后端来分配请求,因此向请求者返回了“5XX”响应。
  • NO_BACKEND_SELECTED - 在选择后端或进行网址重定向之前发生了错误或其他中断。
  • MULTIPLE_BACKENDS - 请求可能已由多个后端处理。如果 Cloud CDN 已从其缓存部分响应请求,并且还向后端发送了一个或多个字节范围请求,就会发生这种情况。使用 backend_scope 细分项可以直观呈现每个负载均衡器到后端的请求。

选择此细分项后,图表会显示后端指标(负载均衡器到后端),而非前端指标(客户端到负载均衡器)。
backend_type

响应客户端请求的后端组的名称。 可以是 INSTANCE GROUPNETWORK_ENDPOINT_GROUP;如果未分配后端,则系统会返回 UNKNOWN。 如果没有可用的后端组,或者请求已由其他实体响应,系统会显示以下某个值,而不是后端组。

  • FRONTEND_5XX - 发生了内部错误,导致 GFE 无法选择后端。GFE 向客户端返回了“5XX”。
  • INVALID_BACKEND - GFE 找不到健康状况良好的后端来分配请求,因此向请求者返回了“5XX”响应。
  • NO_BACKEND_SELECTED - 在选择后端或进行网址重定向之前发生了错误或其他中断。
  • MULTIPLE_BACKENDS - 请求可能已由多个后端处理。如果 Cloud CDN 已从其缓存部分响应请求,并且还向后端发送了一个或多个字节范围请求,就会发生这种情况。使用 backend_scope 细分项可以直观呈现每个负载均衡器到后端的请求。
backend_target_type 处理请求的后端服务的名称。 可以是 BACKEND_SERVICEBACKEND_BUCKET;如果未分配后端,则可以是 UNKNOWN;如果在选择后端或进行网址重定向之前发生了错误或其他中断,则可以是 NO_BACKEND_SELECTED
matched_url_path_rule 与 HTTP(S) 请求前缀匹配的网址映射路径规则(最多 50 个字符)。
forwarding_rule_name 客户端用于发送请求的转发规则的名称。
url_map_name

作为网址映射键的一部分配置的网址映射路径规则或路由规则。可以是 UNMATCHEDUNKNOWN(用作后备)。

  • UNMATCHED 表示与任何网址路径规则均不匹配的请求,因此 url_map_name 使用默认路径规则。
  • UNKNOWN 表示内部错误。
target_proxy_name 转发规则引用的目标 HTTP(S) 代理对象的名称。
backend_target_name 后端目标的名称。目标可以是后端服务或后端存储桶。如果未分配后端,则系统会返回 UNKNOWN
backend_name 后端实例组、存储桶或网络端点组 (NEG) 的名称。如果未分配后端,则系统会返回 UNKNOWN;如果在选择后端或进行网址重定向之前发生了错误或其他中断,则系统会返回 NO_BACKEND_SELECTED
backend_scope_type

后端组范围的类型。可以是 GLOBALREGIONZONEMULTIPLE_BACKENDS;如果在选择后端或进行网址重定向之前发生了错误或其他中断,则可以是 NO_BACKEND_SELECTED;或者是其他可能的 backend_type 输出。

在使用块缓存时使用 MULTIPLE_BACKENDS。系统会针对不同的数据块向同一后端发送多个查询,以支持单个客户端请求。

proxy_continent 终止 HTTP(S) 连接的 HTTP(S) GFE 所在的大洲。(示例:AmericaEuropeAsia
protocol 客户端使用的协议,为以下项之一:HTTP/1.0HTTP/1.1HTTP/2.0QUIC/HTTP/2.0UNKNOWN
response_code 请求的 HTTP 响应代码。
response_code_class 请求的 HTTP 响应代码类:200、300、400、500 或 0(表示无响应)。
cache_result 通过代理响应 HTTP 请求的缓存结果:HITMISSDISABLEDPARTIAL_HIT(适用于部分从缓存响应且部分从后端响应的请求)或 UNKNOWN
client_country 发出 HTTP 请求的客户端所在的国家/地区(例如 United StatesGermany
load_balancing_scheme 所使用的负载均衡方案。如果使用的是传统应用负载均衡器,值为 EXTERNAL。如果使用的是全球外部应用负载均衡器,值为 EXTERNAL_MANAGED

后续步骤