内部应用负载均衡器日志记录和监控

本文档提供了您了解内部应用负载均衡器的日志记录和监控指标所需的信息。 区域级内部应用负载均衡器和跨区域内部应用负载均衡器的日志记录和监控指标相同。

日志记录

您可以逐个后端服务地启用日志记录功能。一个内部应用负载均衡器的网址映射可引用多个后端服务。根据您的具体配置,您可能需要为多个后端服务启用日志记录功能。

日志采样和收集

系统会对负载均衡器后端虚拟机 (VM) 实例处理的请求(及相应响应)进行采样。然后,系统会处理这些采样的请求以生成日志。您可以根据 logConfig.sampleRate 参数控制系统以日志条目形式发出的请求的比例。当 logConfig.sampleRate1.0 (100%) 时,表示系统会为所有请求生成日志并写入 Cloud Logging。

可选字段

日志记录包含必填字段和可选字段。记录的内容部分列出了哪些字段是可选字段,以及哪些是必填字段。所有必填字段始终包含在内。您可以自定义要保留哪些可选字段。

  • 如果您选择包括所有可选字段,则日志记录格式中的所有可选字段都将包含在流日志中。向记录格式添加新的可选字段后,流日志会自动包含新字段。

  • 如果您选择排除所有可选字段,则所有可选字段都将被省略。

  • 如果您选择自定义,则可以指定要包含的可选字段,例如 tls.protocol,tls.cipher

如需了解如何自定义可选字段,请参阅在现有后端服务上启用日志记录

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

对于区域级内部应用负载均衡器,请按以下步骤操作:

控制台

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

    进入“负载均衡”

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

  3. 点击修改

  4. 点击后端配置

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

  6. 点击高级配置(会话亲和性、连接排空超时时间)

  7. 点击启用日志记录

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

  9. 可选:如需在日志中包含所有可选字段,请在可选字段部分中,点击包括所有可选字段

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

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

gcloud

如需更新后端服务以启用日志记录功能,请使用 gcloud compute backend-services update 命令

gcloud compute backend-services update BACKEND_SERVICE \
    --enable-logging \
    --logging-sample-rate=RATE \
    --region=REGION \
    --logging-optional=LOGGING_OPTIONAL_MODE \
    --logging-optional-fields=OPTIONAL_FIELDS

其中

  • --enable-logging 表示对该后端服务启用日志记录功能。
  • --logging-sample-rate 接受介于 0.01.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

对于跨区域内部应用负载均衡器,请按以下步骤操作:

控制台

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

    进入“负载均衡”

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

  3. 点击修改

  4. 点击后端配置

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

  6. 点击高级配置(会话亲和性、连接排空超时时间)

  7. 点击启用日志记录

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

  9. 可选:如需在日志中包含所有可选字段,请在可选字段部分中,点击包括所有可选字段

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

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

gcloud

如需更新后端服务以启用日志记录功能,请使用 gcloud compute backend-services update 命令

gcloud compute backend-services update BACKEND_SERVICE \
    --enable-logging \
    --logging-sample-rate=RATE \
    --global \
    --logging-optional=LOGGING_OPTIONAL_MODE \
    --logging-optional-fields=OPTIONAL_FIELDS

其中

  • --enable-logging 表示对该后端服务启用日志记录功能。
  • --logging-sample-rate 接受介于 0.01.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

为后端服务启用日志记录功能后,每个 HTTP(S) 请求都会通过 Cloud Logging 记录到日志中。

如何查看日志

如需查看日志,请在 Google Cloud 控制台中转到日志浏览器页面。

内部应用负载均衡器日志会相继按网络和区域编入索引。

  • 如需查看所有内部应用负载均衡器的日志,请在第一个下拉菜单中选择内部应用负载均衡器规则
  • 如需仅查看一个网络的日志,请选择内部应用负载均衡器规则,然后选择网络的名称。
  • 如需仅查看网络中一个区域的日志,请选择内部应用负载均衡器规则 > NETWORK > REGION

布尔值类型的日志字段通常仅在其值为 true 时才会显示。如果某个布尔值字段的值为 false,则日志中将不会出现该字段。

系统为日志字段强制执行 UTF-8 编码。非 UTF-8 字符将被替换为问号。

您可以为资源日志 (resource.type="internal_http_lb_rule") 配置导出基于日志的指标。这些指标是基于“内部应用负载均衡器规则”资源创建的,您可以在 Cloud Monitoring 信息中心下找到该资源:

进入 Monitoring

记录的内容

内部应用负载均衡器日志条目包含对监控和调试 HTTP(S) 流量有用的信息。日志记录包含必填字段(这些字段是每个日志记录的默认字段)和可选字段(用于添加有关 HTTP(S) 流量的其他信息)。可以省略可选字段,以节省存储费用。 日志条目包含以下类型的信息:

  • 大多数 Google Cloud 日志中显示的常规信息,例如严重性、项目 ID、项目编号和时间戳(如 LogEntry 中所述)。
  • HttpRequest 日志字段。

某些日志字段采用多字段格式,在给定字段中包含多段数据。例如,tls 字段采用 TlsDetails 格式,它在单个字段中包含 TLS 协议和 TLS 加密。以下记录格式表介绍了这些采用多字段格式的字段。

字段 类型 字段类型:必填或可选 说明
logName 字符串 必填 此日志条目所属日志的资源名称。
采用 "projects/PROJECT_ID/logs/requests" 的形式。
timestamp 字符串 必填 请求的开始时间。
severity LogSeverity 格式 必填 日志条目的严重性。默认值为 LogSeverity.DEFAULT
httpRequest HttpRequest 对象 必填 一个 HttpRequest proto,用于描述要在日志中记录的 HTTP(S) 请求。
trace 字符串 必填 与日志条目关联的跟踪记录的资源名称(如果有)。如果其中包含相对资源名称,则假定该名称相对于 https://tracing.googleapis.com。示例:projects/PROJECT_ID/traces/06796866738c859f2f19b7cfb3214824

内部应用负载均衡器不支持此字段。

spanId 字符串 必填 与日志条目相关联的跟踪记录内的 Span ID。对于 Trace span,这与 Trace API v2 所用格式相同:一个 8 字节数组的十六进制编码,长度为 16 个字符,例如 000000000000004a

内部应用负载均衡器不支持此字段。

resource MonitoredResource 对象 必填

生成此日志条目的受监控的资源。

MonitoredResourceDescriptor 对象使用类型名称和一组标签来描述 MonitoredResource 对象的架构。

例如,内部应用负载均衡器的受监控资源描述符的资源类型为 internal_http_lb_rule,并且使用资源标签来标识实际资源及其属性。如需查看资源标签列表,请参阅 resource.type="internal_http_lb_rule" 的资源标签

jsonPayload 对象 (结构体格式) 必填 以 JSON 对象表示的日志条目载荷。JSON 对象包含以下字段:
  • tls
  • proxyStatus
  • backendTargetProjectNumber
  • serviceDirectoryService
  • cloudFitExperiment
  • cloudFitFault
  • serviceExtensionInfo
  • mtls
  • authzPolicyInfo
字符串 必填

proxyStatus 字段包含一个字符串,用于指定内部应用负载均衡器返回 HttpRequest.status 的原因。 仅当代理返回错误代码时,才会填充此字段。

如果值为空字符串,则系统不会记录该字段。如果代理或后端未返回错误,或者错误代码不是 04XX5XX,则可能会发生这种情况。

proxyStatus 字段包含两个部分:

字符串 必填 backendTargetProjectNumber 字段包含用于标识后端服务或后端存储桶所有者的项目编号。
字符串 必填 serviceDirectoryService 字段用于存储配置了 Cloud FIT 故障的 Service Directory 服务的名称。
字符串 必填 cloudFitExperiment 字段用于存储 Cloud FIT 实验的名称。
字符串 必填 cloudFitFault 字段用于存储 Cloud FIT 故障实验在此请求路径中注入的故障的名称。
ServiceExtensionInfo 必填 serviceExtensionInfo 字段存储有关从负载均衡器到 Service Extensions 的 gRPC 流的信息。如需了解详情,请参阅 系统会为附加宣传信息记录哪些信息
AuthzPolicyInfo 必填 authzPolicyInfo 字段用于存储与授权政策结果相关的信息。此信息仅适用于启用了 授权政策的内部应用负载平衡器。如需了解详情,请参阅 授权政策记录的内容
TlsDetails 可选 tls 字段包含 TlsDetails,用于指定客户端与内部应用负载均衡器之间的连接的 TLS 元数据。仅当客户端使用 TLS/SSL 加密时,此字段才可用。
MtlsDetails 可选 mtls 字段包含 MtlsDetails 值,用于指定客户端与内部应用负载均衡器之间的连接的 mTLS 元数据。仅当负载均衡器使用前端双向 TLS (mTLS) 时,此字段才可用。

TlsDetails 字段格式

字段 字段格式 字段类型:必填或可选 说明
protocol 字符串 可选 客户端用于与负载均衡器建立连接的 TLS 协议。可能的值包括 TLS 1.0, 1.1, 1.2, 1.3QUIC。如果客户端未使用 TLS/SSL 加密,则此值设置为 NULL
加密方式 字符串 可选 客户端用于与负载均衡器建立连接的 TLS 加密。如果客户端未使用 HTTP(S) 或客户端未使用 TLS/SSL 加密,则此值设置为 NULL

MtlsDetails 字段格式

字段 字段格式 字段类型:必填或可选 说明
clientCertPresent 布尔值 可选

如果客户端在 TLS 握手期间提供了证书,则为 true;否则为 false

clientCertChainVerified 布尔值 可选

如果根据配置的 TrustStore 验证了客户端证书链,则为 true;否则为 false

clientCertError 字符串 可选

代表错误情况的预定义字符串。如需详细了解错误字符串,请参阅 mTLS 客户端验证模式

clientCertSha256Fingerprint 字符串 可选

客户端证书的 Base64 编码 SHA-256 指纹。

clientCertSerialNumber 字符串 可选

客户端证书的序列号。如果序列号长度超过 50 字节,则将字符串 client_cert_serial_number_exceeded_size_limit 添加到 client_cert_error,并将序列号设置为空字符串。

clientCertValidStartTime 字符串 可选

在此时间戳(RFC 3339 日期字符串格式)之前,客户端证书无效。 例如 2022-07-01T18:05:09+00:00

clientCertValidEndTime 字符串 可选

在此时间戳(RFC 3339 日期字符串格式)之后,客户端证书无效。 例如 2022-07-01T18:05:09+00:00

clientCertSpiffeId 字符串 可选

主题备用名称 (SAN) 字段中的 SPIFFE ID。如果值无效或超过 2048 字节,则 SPIFFE ID 设置为空字符串。

如果 SPIFFE ID 长度超过 2048 字节,则将字符串 client_cert_spiffe_id_exceeded_size_limit 添加到 client_cert_error

clientCertUriSans 字符串 可选

URI 类型的 SAN 扩展的 Base64 编码列表(以英文逗号分隔)。SAN 扩展从客户端证书中提取。 client_cert_uri_sans 字段中不包含 SPIFFE ID。

如果 client_cert_uri_sans 字段长度超过 512 字节,则将字符串 client_cert_uri_sans_exceeded_size_limit 添加到 client_cert_error,并将英文逗号分隔列表设置为空字符串。

clientCertDnsnameSans 字符串 可选

DNSName 类型的 SAN 扩展的 Base64 编码列表(以英文逗号分隔)。SAN 扩展从客户端证书中提取。

如果 client_cert_dnsname_sans 字段长度超过 512 字节,则将字符串 client_cert_dnsname_sans_exceeded_size_limit 添加到 client_cert_error,并将英文逗号分隔列表设置为空字符串。

clientCertIssuerDn 字符串 可选

证书中采用 Base64 编码的完整“颁发者”字段。

如果 client_cert_issuer_dn 字段长度超过 512 字节,则将字符串 client_cert_issuer_dn_exceeded_size_limit 添加到 client_cert_error,并将 client_cert_issuer_dn 设置为空字符串。

clientCertSubjectDn 字符串 可选

证书中采用 Base64 编码的完整“主题”字段。

如果 client_cert_subject_dn 字段长度超过 512 字节,则将字符串 client_cert_subject_dn_exceeded_size_limit 添加到 client_cert_error,并将 client_cert_subject_dn 设置为空字符串。

clientCertLeaf 字符串 可选

已建立的 mTLS 连接(证书在其中通过了验证)的客户端叶证书。证书编码符合 RFC 9440 标准:二进制 DER 证书使用 Base64 编码(不含换行符、空格或 Base64 字母表之外的其他字符),两侧都用英文冒号分隔。

如果 client_cert_leaf 超过 16 KB(未编码),则将字符串 client_cert_validated_leaf_exceeded_size_limit 添加到 client_cert_error,并将 client_cert_leaf 设置为空字符串。

clientCertChain 字符串 可选

已建立的 mTLS 连接(客户端证书在其中通过了验证)的客户端证书链的英文逗号分隔证书列表(按标准 TLS 顺序排列),不包括叶证书。证书编码符合 RFC 9440 标准。

如果 client_cert_leafclient_cert_chain 的总大小在 Base64 编码之前超过 16 KB,则将字符串 client_cert_validated_chain_exceeded_size_limit 添加到 client_cert_error,并将 client_cert_chain 设置为空字符串。

proxyStatus 错误字段

proxyStatus 字段包含一个字符串,用于指定负载均衡器返回错误的原因。proxyStatus 字段包含两个部分:proxyStatus errorproxyStatus details。本部分介绍了 proxyStatus error 字段支持的字符串。

proxyStatus 错误字段适用于以下负载均衡器:

  • 区域级外部应用负载均衡器
  • 跨区域内部应用负载均衡器
  • 区域级内部应用负载均衡器
proxyStatus 错误 说明 通用的附带响应代码
destination_unavailable 负载均衡器认为后端不可用。例如,最近尝试与后端通信失败,或者健康检查可能导致失败。 500、503
connection_timeout 负载均衡器尝试打开与后端的连接时超时。 504
connection_terminated

在收到完整响应之前,负载均衡器与后端的连接已终结。

在出现以下任一情况时,系统会返回此 proxyStatus error

  • 在收到完整响应之前,负载均衡器与后端的连接已终结。
  • TLS 连接在 SSL 握手时失败,并且客户端未与负载均衡器建立连接。

0、502、503
connection_refused 负载均衡器与后端的连接被拒绝。 502、503
connection_limit_reached

负载均衡器配置为限制其与后端的连接数,并且超出了该限制。

在出现以下任一情况时,系统会返回此 proxyStatus error

  • 如果任何后端处于维护模式,则流量无法路由到相应后端。
  • 如果请求在本地受速率限制。
  • Envoy 正在处理内存不足等错误情况。
502、503
destination_not_found 负载均衡器无法确定要用于此请求的适当后端。例如,可能未配置后端。 500、404
dns_error 负载均衡器在尝试查找后端主机名的 IP 地址时遇到 DNS 错误。 502、503
proxy_configuration_error 负载均衡器遇到内部错误。 500
proxy_internal_error 负载均衡器遇到内部错误。 0、500、502
proxy_internal_response 负载均衡器在未尝试连接到后端的情况下生成响应。 任何响应代码,具体取决于问题类型。例如,410 响应代码表示后端因欠费而不可用。
http_response_timeout 负载均衡器在等待来自后端的完整响应时已达到配置的后端服务超时限制。 504、408
http_request_error 负载均衡器遇到 HTTP 4xx 错误,表明客户端请求存在问题。 400、403、405、406、408、411、413、414、415、416、417 或 429
http_protocol_error 负载均衡器在与后端通信时遇到 HTTP 协议错误。 502
tls_protocol_error 负载均衡器在 TLS 握手期间遇到 TLS 错误。 0
tls_certificate_error 负载均衡器在启用了 mTLS 情况下验证服务器或客户端提供的证书时遇到错误。 0
tls_alert_received 负载均衡器在 TLS 握手期间遇到严重 TLS 提醒。 0

proxyStatus 详细信息字段

proxyStatus 字段包含一个字符串,用于指定负载均衡器返回错误的原因。proxyStatus 字段包含两个部分:proxyStatus errorproxyStatus detailsproxyStatus details 字段为可选字段,仅在提供更多信息时才会显示。本部分介绍了 proxyStatus details 字段支持的字符串。

proxyStatus 详细信息字段适用于以下负载均衡器:

  • 区域级外部应用负载均衡器
  • 区域级内部应用负载均衡器
  • 跨区域内部应用负载均衡器
proxyStatus 详细信息 说明 通用的附带响应代码
client_disconnected_before_any_response 在负载均衡器发送任何响应之前,与客户端的连接已中断。 0
backend_connection_closed 后端意外关闭与负载均衡器的连接。如果负载均衡器正在向另一个实体(例如 TCP 超时短于负载均衡器 10 分钟 [600 秒] 超时的第三方应用)发送流量,可能会发生这种情况。 502
failed_to_connect_to_backend 负载均衡器无法连接到后端。此失败包括连接阶段的超时。 503
failed_to_pick_backend 负载均衡器无法挑选运转状况良好的后端来处理请求。 502
response_sent_by_backend HTTP 请求已成功代理到后端,响应由后端返回。 HTTP 响应代码由后端上运行的软件设置。
client_timed_out

负载均衡器和客户端之间的连接超出了空闲超时。

如需详细了解区域级外部应用负载均衡器,请参阅客户端 HTTP keepalive 超时。如需详细了解内部应用负载均衡器,请参阅客户端 HTTP keepalive 超时
0、408
backend_timeout

后端在生成响应时超时。

502
http_protocol_error_from_backend_response 后端响应包含 HTTP 协议错误。 501、502
http_protocol_error_from_request 客户端请求包含 HTTP 协议错误。 400、503
http_version_not_supported HTTP 协议版本不受支持。目前仅支持 HTTP 0.9、1.0、1.1 和 2.0。 400
handled_by_identity_aware_proxy 此响应由 Identity-Aware Proxy (IAP) 在允许访问之前验证客户端身份期间生成。 200、302、400、401、403、500、502
invalid_request_headers

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

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

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

400、404
ip_detection_failed 无法检测到原始 IP 地址。 任何可能的响应代码,具体取决于失败的性质。值必须介于 400 到 599 之间。
request_body_too_large HTTP 请求正文超出了负载均衡器支持的长度上限。 413、507
request_header_timeout 由于负载均衡器在 5 秒内未收到完整请求,因此请求标头超时。 408、504
denied_by_security_policy 负载均衡器因 Google Cloud Armor 安全政策而拒绝了此请求。 403
throttled_by_security_policy 该请求被 Google Cloud Armor 节流规则阻止。 429
client_cert_chain_invalid_eku 客户端证书或其颁发者没有包含 clientAuth 的扩展密钥用途。如需了解详情,请参阅关闭连接时记录的错误 0
client_cert_chain_max_name_constraints_exceeded 为验证提供的中间证书有超过 10 个名称限制。 如需了解详情,请参阅关闭连接时记录的错误 0
client_cert_invalid_rsa_key_size 客户端叶或中间证书的 RSA 密钥大小无效。 如需了解详情,请参阅关闭连接时记录的错误 0
client_cert_not_provided 客户端在握手期间未提供请求的证书。如需了解详情,请参阅关闭连接时记录的错误 0
client_cert_pki_too_large 用于验证的 PKI 具有三个以上的中间证书,它们共享相同的 SubjectSubject Public Key Info。如需了解详情,请参阅关闭连接时记录的错误 0
client_cert_unsupported_elliptic_curve_key 客户端证书或中间证书使用的是不受支持的椭圆曲线。如需了解详情,请参阅关闭连接时记录的错误 0
client_cert_unsupported_key_algorithm 客户端证书或中间证书使用的是非 RSA 或非 ECDSA 算法。如需了解详情,请参阅关闭连接时记录的错误 0
client_cert_validation_failed 客户端证书未通过 TrustConfig 验证。如需了解详情,请参阅关闭连接时记录的错误 0
client_cert_validation_not_performed 您在未设置 TrustConfig 的情况下配置了双向 TLS。如需了解详情,请参阅关闭连接时记录的错误 0
client_cert_validation_search_limit_exceeded 在尝试验证证书链时达了深度或迭代限制。如需了解详情,请参阅关闭连接时记录的错误 0
client_cert_validation_timed_out 验证证书链时超出了时间限制(200 毫秒)。如需了解详情,请参阅关闭连接时记录的错误 0
tls_version_not_supported 系统可以识别 TLS 协议版本,但不支持该版本。该错误会导致 TLS 连接关闭。 0
unknown_psk_identity 如果需要建立 PSK 密钥,但客户端未提供可接受的 PSK 身份,则服务器会发送此错误。该错误会导致 TLS 连接关闭。 0
no_application_protocol 当客户端“application_layer_protocol_negotiation”扩展仅通告服务器不支持的协议时,服务器会发送此错误。请参阅 TLS 应用层协议协商扩展。该错误会导致 TLS 连接关闭。 0
no_certificate 未找到任何证书。该错误会导致 TLS 连接关闭。 0
bad_certificate 证书无效,或者包含无法验证的签名。该错误会导致 TLS 连接关闭。 0
unsupported_certificate 证书的类型不受支持。该错误会导致 TLS 连接关闭。 0
certificate_revoked 证书签名者已撤消该证书。该错误会导致 TLS 连接关闭。 0
certificate_expired 证书已过期或无效。该错误会导致 TLS 连接关闭。 0
certificate_unknown 处理证书时出现了一些未指定的问题,导致证书不可接受。该错误会导致 TLS 连接关闭。 0
unknown_ca 收到了有效的证书链或部分链,但证书未被接受,因为找不到 CA 证书或者无法与已知的信任锚匹配。该错误会导致 TLS 连接关闭。 0
unexpected_message 不当消息,例如收到了错误的握手消息或过早的应用数据。该错误会导致 TLS 连接关闭。 0
bad_record_mac 收到了无法去保护的记录。该错误会导致 TLS 连接关闭。 0
record_overflow 收到了长度超过 214+256 字节的 TLSCiphertext 记录,或者记录解密为长度超过 214 字节(或某个其他协商的限制)的 TLSPlaintext 记录。该错误会导致 TLS 连接关闭。 0
handshake_failure 在提供可用选项的情况下,无法协商可接受的一组安全参数。该错误会导致 TLS 连接关闭。 0
illegal_parameter 握手中的字段不正确或与其他字段不一致。该错误会导致 TLS 连接关闭。 0
access_denied 已收到有效的证书或 PSK,但应用访问权限控制时,客户端未继续协商。该错误会导致 TLS 连接关闭。 0
decode_error 由于某些字段超出了指定范围或消息长度不正确,因此无法对消息进行解码。该错误会导致 TLS 连接关闭。 0
decrypt_error 握手(非记录层)加密操作失败,包括无法正确验证签名,或者无法正确验证已完成的消息或 PSK Binder。该错误会导致 TLS 连接关闭。 0
insufficient_security 由于服务器需要的参数比客户端支持的参数更安全,因此协商失败。该错误会导致 TLS 连接关闭。 0
inappropriate_fallback 服务器在响应来自客户端的无效连接重试尝试时发送此错误。该错误会导致 TLS 连接关闭。 0
user_cancelled 用户由于与协议失败无关的某种原因而取消握手。该错误会导致 TLS 连接关闭。 0
missing_extension 由接收握手消息的端点发送此错误,该消息不包含必须为提供的 TLS 版本或其他协商参数发送的扩展。该错误会导致 TLS 连接关闭。 0
unsupported_extension 由接收任何握手消息的端点发送此错误,该消息包含已知被禁止纳入给定握手消息中的扩展,或者包含并非第一次在相应 ClientHelloCertificateRequest 中提供的 ServerHelloCertificate 中的任何扩展。 该错误会导致 TLS 连接关闭。 0
unrecognized_name 当不存在可以由客户端通过“server_name”扩展提供的名称来标识的服务器时,服务器会发送此错误。请参阅 TLS 扩展定义 0
bad_certificate_status_response 当服务器通过“status_request”扩展提供无效或不可接受的 OCSP 响应时,客户端会发送此错误。请参阅 TLS 扩展定义。 该错误会导致 TLS 连接关闭。 0
load_balancer_configured_resource_limits_reached 负载均衡器达到了配置的资源限制,例如连接数上限。 400、500、503

失败的 TLS 连接日志条目

如果在选择任何后端之前客户端与负载均衡器之间的 TLS 连接失败,则日志条目会记录错误。您可以为后端服务配置不同的日志采样率。TLS 连接失败时,失败的 TLS 连接日志采样率是任何后端服务的最高采样率。例如,如果您对两个后端服务将日志记录采样率配置为 0.30.5,则失败的 TLS 连接日志采样率为 0.5

您可以通过检查以下日志条目详细信息来识别失败的 TLS 连接:

  • proxyStatus 错误类型为 tls_alert_receivedtls_certificate_errortls_protocol_errorconnection_terminated
  • 没有后端信息。

以下示例显示了包含 proxyStatus error 字段的 TLS 日志条目:

   json_payload:    {
   @type: "type.googleapis.com/google.cloud.loadbalancing.type.LoadBalancerLogEntry"
   proxyStatus: "error="tls_alert_received"; details="server_to_client: handshake_failure""
   log_name: "projects/529254013417/logs/mockservice.googleapis.com%20name"
   }
   http_request {
    latency {
      nanos: 12412000
    }
    protocol: "HTTP/1.0"
    remote_ip: "127.0.0.2"
   }
  resource {
    type: "mock_internal_http_lb_rule"
    labels {
      backend_name: ""
      backend_scope: ""
      backend_scope_type: "UNKNOWN"
      backend_target_name: ""
      backend_target_type: "UNKNOWN"
      backend_type: "UNKNOWN"
      forwarding_rule_name: "l7-ilb-https-forwarding-rule-dev"
      matched_url_path_rule: "UNKNOWN"
      network_name: "lb-network"
      region: "REGION"
      target_proxy_name: "l7-ilb-https-proxy-dev"
      url_map_name: ""
    }
  }
  timestamp: "2023-08-15T16:49:30.850785Z"
  

资源标签

下表列出了 resource.type="internal_http_lb_rule" 的资源标签。

字段 类型 说明
network_name 字符串 负载均衡器的 VPC 网络名称。
project_id 字符串 与相应资源关联的 Google Cloud 项目的标识符。
region 字符串 在其中定义负载均衡器的区域。
url_map_name 字符串 配置为选择一项后端服务的网址映射对象的名称。
forwarding_rule_name 字符串 转发规则对象的名称。
target_proxy_name 字符串 转发规则引用的目标代理对象的名称。
matched_url_path_rule 字符串 作为网址映射键的一部分配置的网址映射路径规则或路由规则。可以是 UNMATCHEDUNKNOWN(用作回退)。
  • UNMATCHED 表示因不符合网址路径规则而使用默认路径规则的请求。
  • UNKNOWN 表示内部错误。
backend_target_name 字符串 根据与请求匹配的网址映射路径规则或路由规则,为处理请求而选择的后端的名称。
backend_target_type 字符串 后端目标的类型 (BACKEND_SERVICE/UNKNOWN)。
backend_name 字符串 后端实例组或网络端点组 (NEG) 的名称。
backend_type 字符串

后端类型,实例组或 NEG,或者未知。

backend_typeUNKNOWN 时,即使日志记录功能已停用,Cloud Logging 也会记录请求。例如,如果客户端在负载均衡器可以选择后端之前关闭与负载均衡器的连接,则 backend_type 设置为 UNKNOWN,并记录请求。这些日志提供有关由于客户端无法选择后端而关闭的客户端请求的有用调试信息。

backend_scope 字符串 后端的范围,可以是可用区名称或区域名称。如果 backend_name 未知,该字段可能为 UNKNOWN
backend_scope_type 字符串 后端的范围 (REGION/ZONE)。如果 backend_name 未知,该字段可能为 UNKNOWN
backend_target_cross_project_id 字符串 后端目标服务或存储桶的项目 ID。仅当后端目标资源是在与创建 url_map 资源的项目不同的项目中创建时,此字段才可用。

授权政策请求日志

负载均衡器日志条目 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

查看 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. 点击运行查询

监控

内部应用负载均衡器会将监控数据导出到 Monitoring

监控指标具有以下用途:

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

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

查看 Cloud Monitoring 指标

控制台

如需使用 Metrics Explorer 查看受监控资源的指标,请执行以下操作:

  1. 在 Google Cloud 控制台中,转到 Metrics Explorer 页面:

    进入 Metrics Explorer

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

  2. 指标元素中,展开选择指标菜单,在过滤栏中输入 Internal Application Load Balancer Rule,然后使用子菜单选择一个特定资源类型和指标:
    1. 活跃资源菜单中,选择内部应用负载均衡器规则
    2. 如需选择指标,请使用活跃指标类别活跃指标菜单。
    3. 点击应用
  3. 如需从显示结果中移除时序,请使用过滤条件元素

  4. 如需组合时序,请使用聚合元素上的菜单。例如,如需根据虚拟机所在的可用区显示虚拟机的 CPU 利用率,请将第一个菜单设置为平均值,并将第二个菜单设置为可用区

    聚合元素的第一个菜单设置为未聚合时,系统会显示所有时序。聚合元素的默认设置由您选择的指标类型决定。

  5. 对于配额和每天报告一个样本的其他指标,请执行以下操作:
    1. 显示窗格中,将微件类型设置为堆叠条形图
    2. 将时间段设置为至少一周。

定义提醒政策

控制台

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

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

    进入提醒

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

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

定义 Monitoring 自定义信息中心

控制台

您可以针对内部应用负载均衡器指标创建自定义 Monitoring 信息中心:

  1. 在 Google Cloud 控制台中,转到 Monitoring 页面。

    进入 Monitoring

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

  3. 点击 Add Chart

  4. 给图表添加一个标题。

  5. 选择指标和过滤条件。对于指标,资源类型为内部 HTTP/S 负载均衡器

  6. 点击保存

指标报告频率与保留

系统会每隔 1 分钟将负载均衡器的指标批量导出到 Monitoring 中。监控数据会保留六 (6) 周。 默认情况下,信息中心可按 1H(1 小时)、6H(6 小时)、1D(1 天)、1W(1 周)和 6W(6 周)时间间隔提供数据分析。您可以在 1 分钟到 6 周的范围内手动指定分析时间间隔。

内部应用负载均衡器的监控指标

内部应用负载均衡器的以下指标会报告给 Monitoring

指标 FQDN 说明
请求数 loadbalancing.googleapis.com/https/internal/request_count 内部应用负载均衡器传送的请求数。
请求字节数 loadbalancing.googleapis.com/https/internal/request_bytes 以请求形式从客户端发送到内部应用负载均衡器的字节数。
响应字节数 loadbalancing.googleapis.com/https/internal/response_bytes 以响应形式从内部 HTTP(S) 负载均衡器发送到客户端的字节数。
总延迟时间 loadbalancing.googleapis.com/https/internal/total_latencies 延迟时间的分布(以毫秒为单位)。延迟时间从代理收到请求的第一个字节开始计算,直到代理发送响应的最后一个字节为止。
后端延迟时间 loadbalancing.googleapis.com/https/internal/backend_latencies 延迟时间的分布(以毫秒为单位)。延迟时间从代理向后端发送请求的第一个字节开始计算,直到代理收到来自后端的响应的最后一个字节为止。

内部应用负载均衡器指标的过滤维度

系统会为每个内部应用负载均衡器汇总指标。您可以按照以下维度过滤汇总的指标:

属性 说明
BACKEND_SCOPE 传送客户端请求的后端组所在的 Google Cloud 区域或地区,如果未分配后端组,则此属性的值为特殊字符串。示例:us-central1-aeurope-west1-basia-east1UNKNOWN
PROXY_REGION 内部应用负载均衡器、客户端和后端所在的区域。示例:us-central1europe-west1asia-east1
BACKEND 传送客户端请求的后端实例组或网络端点组的名称。
BACKEND_TARGET 传送客户端请求的后端服务的名称。
MATCHED_URL_RULE 与客户端 HTTP(S) 请求前缀匹配的网址映射路径规则或路由规则(最多 50 个字符)。

整个负载均衡器均支持 Response code class fraction 指标,不再支持进一步细分。

后续步骤