内部直通式网络负载均衡器日志记录和监控

本文档介绍如何为内部直通网络负载均衡器配置和使用 Cloud LoggingCloud Monitoring

日志记录

日志提供排查和监控 Google Cloud 直通式负载均衡器的有用信息。日志会按连接汇总并近乎实时地导出。系统会为每个负载均衡实例 TCP 和 UDP 流生成入站和出站流量日志。如需详细了解日志条目中提供的字段,请参阅日志字段

使用日志无需额外费用。根据您提取日志的方式,您需要按 Cloud Logging、BigQuery 或 Pub/Sub 的标准价格付费。启用日志不会影响负载均衡器的性能。

Logging 具有以下优势:

  • 内部直通式网络负载均衡器流量监控。通过每个连接的日志记录,您可以深入了解每个连接如何路由到服务后端。

  • 网络问题排查。您可以利用内部直通式网络负载均衡器日志进行问题排查。如需了解详情,请参阅排查内部直通式网络负载均衡器问题

虚拟机到虚拟机流的日志格式示例

下图显示了内部客户端 (192.168.1.2)、内部直通网络负载均衡器 (10.240.0.200) 和后端实例 (10.240.0.3) 的入站和出站流量。

内部客户端到后端虚拟机服务的流。
虚拟机到虚拟机的流的入站和出站流。

从客户端到后端实例的连接的内部直通网络负载均衡器日志的格式如下:

  • connection.clientIp:192.168.1.2
  • connection.serverIp:10.240.0.200
  • bytesSent:1256
  • bytesReceived:4521

日志采样和收集

Google Cloud 会对离开和进入负载均衡器后端虚拟机的数据包进行采样。系统会处理这些采样数据包以生成日志。

不会对每个数据包都进行采样。Google Cloud 会根据物理主机上的流量大小对可变的数据包子集进行采样。可能达到的数据包最低采样率为 1/1,024。采样率由 Google Cloud 动态控制。您无法调整采样率。

数据包采样通过以下方式与防火墙规则进行交互:

  • 在应用出站防火墙规则之前对数据包进行采样。
  • 在应用入站防火墙规则之后对数据包进行采样。

数据包采样后,Google Cloud 会按照以下过程处理采样的数据包:

  1. 聚合:采样数据包在五秒间隔内进行聚合,以生成单个流条目。

  2. 可配置(次要)日志采样:这是第二个采样流程,用于采样流。您可以根据 logConfig.sampleRate 参数控制系统以日志条目形式发出的流条目的比例。当 logConfig.sampleRate1.0 (100%) 时,表示系统会处理所有采样的数据包

  3. 写入 Logging:日志条目会写入 Cloud Logging。

可选字段

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

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

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

  • 如果您选择自定义,则可以指定要包含在父字段中的可选字段(例如 serverInstance)或使用其全名(例如 serverInstance.vm)。

    将新的可选字段添加到记录格式后,流日志将不会包含这些字段,除非这些字段是您在父字段中指定要包含的新字段。

    如果使用父字段指定自定义可选字段,则在向父字段内的记录格式添加新的可选字段后,日志会自动包含新字段。例如,如果您选择添加 optionalFieldA,则系统会自动添加名为 optionalFieldA.subField1 的日志的新字段。

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

响应数据包来源 IP 地址要求

仅当数据包的来源 IP 地址与负载均衡器的转发规则 IP 地址匹配时,内部直通网络负载均衡器日志记录才会对来自后端虚拟机的响应数据包进行采样。对于 TCP 连接,响应数据包必须始终具有与请求数据包的目标匹配的来源。但是,对于其他协议,响应数据包可以使用不同的来源 IP 地址。如需了解详情,请参阅请求和返回数据包的 IP 地址

如果有任何来自后端虚拟机的响应数据包的来源与内部直通网络负载均衡器的转发规则的 IP 地址不匹配,内部直通网络负载均衡器使用的数据包采样过程便会忽略这些响应数据包。

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

控制台

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

    进入“负载均衡”

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

  3. 点击 修改,然后点击后端配置

  4. 选择创建后端服务,然后填写必填的后端服务字段。

  5. 点击启用日志记录

  6. 设置采样率比例。您可以将采样率设置为介于 0.01.0(默认值)之间的任何值。

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

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

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

gcloud

使用 gcloud compute backend-services create 命令创建后端服务并启用日志记录功能。

gcloud compute backend-services create BACKEND_SERVICE \
  --region=REGION \
  --enable-logging \
  --logging-sample-rate=SAMPLE_RATE
  --logging-optional=LOGGING_OPTIONAL \
  --logging-optional-fields=OPTIONAL_FIELDS

请替换以下内容:

  • BACKEND_SERVICE:后端服务的名称。
  • REGION:要创建的后端服务的区域。
  • SAMPLE_RATE:只有在为此后端服务启用日志记录功能时,才能指定此字段。

    该字段的值必须介于 0.01.0 之间,其中 0.0 表示未报告任何日志,1.0 表示为所有采样数据包生成了日志。如果启用日志记录功能,但将采样率设置为 0.0,则相当于停用日志记录功能。默认值为 1.0

  • LOGGING_OPTIONAL:您希望包括在日志中的元数据注释:

    • INCLUDE_ALL_OPTIONAL:包括所有可选注释。

    • EXCLUDE_ALL_OPTIONAL(默认值)用于排除所有可选注释。

    • CUSTOM:包括您在 OPTIONAL_FIELDS 中指定的可选字段的自定义列表。

  • OPTIONAL_FIELDS:您希望包括在日志中的可选字段列表(以英文逗号分隔)。

    例如 serverInstance.vm, serverGkeDetails。只有当 LOGGING_OPTIONAL 设置为 CUSTOM 时才能设置此项。

API

regionBackendServices.insert 方法发出 POST 请求。

 POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/backendServices
 

排除所有选填字段

 {
 "name": "BACKEND_SERVICE",
  "loadBalancingScheme": "INTERNAL",
  "logConfig": {
   "enable": true,
   "sampleRate": SAMPLE_RATE,
   "optionalMode": "EXCLUDE_ALL_OPTIONAL"
  }
 }

包含所有选填字段

{
 "name": "BACKEND_SERVICE",
 "loadBalancingScheme": "INTERNAL",
 "logConfig": {
   "enable": true,
   "sampleRate": SAMPLE_RATE,
   "optionalMode": "INCLUDE_ALL_OPTIONAL"
  }
}

包含可选字段的自定义列表

{
 "name": "BACKEND_SERVICE",
 "loadBalancingScheme": "INTERNAL",
 "logConfig": {
   "enable": true,
   "sampleRate": SAMPLE_RATE,
   "optionalMode": "CUSTOM",
   "optionalFields": ["field1","field2",...]
  }
}

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

控制台

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

    进入“负载均衡”

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

  3. 点击 修改,然后点击后端配置

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

  5. 点击启用日志记录

  6. 设置采样率比例。您可以将采样率设置为介于 0.01.0(默认值)之间的任何值。

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

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

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

gcloud

使用 gcloud compute backend-services update 命令在现有后端服务上启用日志记录。

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

请替换以下内容:

  • BACKEND_SERVICE:后端服务的名称。
  • REGION:要创建的后端服务的区域。
  • SAMPLE_RATE:只有在为此后端服务启用日志记录功能时,才能指定此字段。

    该字段的值必须介于 0.01.0 之间,其中 0.0 表示未报告任何日志,1.0 表示为所有采样数据包生成了日志。如果启用日志记录功能,但将采样率设置为 0.0,则相当于停用日志记录功能。默认值为 1.0

  • LOGGING_OPTIONAL:您希望包括在日志中的元数据注释。

    • INCLUDE_ALL_OPTIONAL:包括所有可选注释。

    • EXCLUDE_ALL_OPTIONAL(默认值)用于排除所有可选注释。

    • CUSTOM:包括您在 OPTIONAL_FIELDS 中指定的可选字段的自定义列表。

  • OPTIONAL_FIELDS:您希望包括在日志中的可选字段列表(以英文逗号分隔)。

    例如 serverInstance.vm,serverGkeDetails。只有当 LOGGING_OPTIONAL 设置为 CUSTOM 时才能设置此项。

API

regionBackendServices/patch 方法发出 PATCH 请求。

 PATCH https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/backendServices/BACKEND_SERVICE
 

排除所有选填字段

 "logConfig": {
   "enable": true,
   "sampleRate": SAMPLE_RATE,
   "optionalMode": "EXCLUDE_ALL_OPTIONAL"
  }
 

包含所有选填字段

 "logConfig": {
   "enable": true,
   "sampleRate": SAMPLE_RATE,
   "optionalMode": "INCLUDE_ALL_OPTIONAL"
  }
 

包含可选字段的自定义列表

 "logConfig": {
   "enable": true,
   "sampleRate": SAMPLE_RATE,
   "optionalMode": "CUSTOM",
   "optionalFields": ["field1","field2",...]
  }

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

控制台

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

    进入“负载均衡”

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

  3. 点击 修改,然后点击后端配置

  4. 要完全停用日志记录功能,请清除启用日志记录功能

  5. 如果要保持启用日志记录功能,可以设置其他采样率比例。您可以将采样率设置为介于 0.01.0(默认值)之间的任何值。如需仅为 20% 的采样数据包生成日志,请将值设置为 0.2

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

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

gcloud

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

gcloud compute backend-services update BACKEND_SERVICE \
  --region=REGION \
  --no-enable-logging

请替换以下内容:

  • BACKEND_SERVICE:后端服务的名称。
  • REGION:要创建的后端服务的区域。

API

regionBackendServices/patch 方法发出 PATCH 请求。

 PATCH https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/backendServices/BACKEND_SERVICE

 {
 "logConfig": {
   "enable": false
  }
 }
 

查看日志

如果日志提取到 Cloud Logging 中,但未通过日志路由器接收器排除,则可以使用 Cloud Logging APIGoogle Cloud CLI 读取日志。

如需查看所有内部直通式网络负载均衡器日志,请执行以下操作:

控制台

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

    转到日志浏览器

  2. 选择内部直通式网络负载均衡器规则资源类型。

  3. 选择 loadbalancing.googleapis.com/flows 日志名称。

控制台查询

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

    转到日志浏览器

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

  3. 将以下内容粘贴到查询字段中。将 PROJECT_ID 替换为您的项目 ID。

    resource.type="loadbalancing.googleapis.com/InternalNetworkLoadBalancerRule"
    logName="projects/PROJECT_ID/logs/loadbalancing.googleapis.com%2Fflows"
    
  4. 点击运行查询

查看后端服务的日志

如需查看特定后端服务的内部直通网络负载均衡器日志,请执行以下操作:

控制台查询

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

    转到日志浏览器

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

  3. 将以下内容粘贴到查询字段中。将 PROJECT_ID 替换为您的项目 ID,将 BACKEND_SERVICE_NAME 替换为您的后端服务的名称。

    resource.type="loadbalancing.googleapis.com/InternalNetworkLoadBalancerRule"
    logName="projects/PROJECT_ID/logs/loadbalancing.googleapis.com%2Fflows"
    resource.labels.backend_service_name="BACKEND_SERVICE_NAME"
    
  4. 点击运行查询

查看后端实例组的日志

如需查看具有 GCE_VM_IP 端点的特定后端实例组或网络端点组 (NEG) 的内部直通网络负载均衡器日志,请按照以下步骤操作:

控制台查询

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

    转到日志浏览器

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

  3. 将以下内容粘贴到查询字段中。将 PROJECT_ID 替换为您的项目 ID,将 BACKEND_GROUP_NAME 替换为实例组或 NEG 的名称。

    resource.type="loadbalancing.googleapis.com/InternalNetworkLoadBalancerRule"
    logName="projects/PROJECT_ID/logs/loadbalancing.googleapis.com%2Fflows"
    resource.labels.backend_group_name="BACKEND_GROUP_NAME"
    
  4. 点击运行查询

日志字段

日志记录包含必填字段(每个日志记录的默认字段)以及添加额外信息的可选字段。可以省略可选字段,以节省存储费用。

某些日志字段采用多字段格式,在给定字段中包含多段数据。例如,connection 字段采用 IpConnection 格式,它在单个字段中包含来源 IP 地址和目的地 IP 地址、端口以及协议。以下记录格式表介绍了这些含有多个字段的字段。

受监控的资源为 loadbalancing.googleapis.com/InternalNetworkLoadBalancerRule

字段 字段格式 字段类型:必填或可选 说明
连接 IpConnection 必需 描述此连接的 5 元组。
startTime 字符串 必需 在聚合时间间隔内观察到的第一个数据包的时间戳(RFC 3339 日期字符串格式)。
endTime 字符串 必需 在聚合时间间隔内观察到的最后一个数据包的时间戳(RFC 3339 日期字符串格式)。
bytesSent 字符串 必需 从服务器发送到客户端的字节数。
bytesReceived int64 必需 服务器从客户端接收的字节数。
packetsSent int64 必需 从服务器发送到客户端的数据包数。
packetsReceived int64 必需 服务器从目的地接收的数据包数。
rtt 字符串 必需

仅针对 TCP 连接测量延迟时间。 延迟时间是估算的网络往返时间 (RTT) 加上在客户端的虚拟机操作系统中处理数据包所花费的时间的总和。

对于采样的数据包,RTT 从负载均衡后端的角度计算,方法是测量后端发送 TCP 分段与后端收到对已发送分段的序列号的 TCP 确认之间的时间差。

延迟时间的格式为字符串,以秒数开头,以“s”结尾(表示秒)。纳秒表示为小数秒。例如,250 毫秒的延迟时间格式为“0.250000000s”。

clientInstance InstanceDetails 可选 客户端的虚拟机实例详情。仅在客户端的虚拟机实例位于同一项目中时可用。
serverInstance InstanceDetails 可选 后端虚拟机的虚拟机实例详情。
clientVpc VpcDetails 可选 客户端的 VPC 网络详细信息。仅当客户端是位于同一项目中的 VPC 网络内的端点时可用。
clientGkeDetails GkeDetails 可选 客户端的 GKE 元数据。仅在客户端是同一项目中的 GKE 端点时可用。
serverGkeDetails GkeDetails 可选 服务器后端的 GKE 元数据。只有在后端是 GKE 端点时才可用。

IpConnection 字段格式

字段 类型 说明
clientIp 字符串 客户端 IP 地址
clientPort int32 客户端端口。仅针对 TCP 和 UDP 连接设置。
serverIp 字符串 服务器 IP 地址(转发规则 IP 地址)
serverPort int32 服务器端口。仅针对 TCP 和 UDP 连接设置。
protocol int32 IANA 协议编号

InstanceDetails 字段格式

字段 类型 说明
projectId 字符串 包含虚拟机的项目的 ID
vm 字符串 虚拟机的实例名称
区域 字符串 虚拟机的区域
可用区 字符串 虚拟机所在的区域
vmIp 字符串 发起连接的 NIC 的主要内部 IP

VpcDetails 字段格式

字段 类型 说明
projectId 字符串 包含 VPC 的项目的 ID
vpc 字符串 运行虚拟机的网络
子网 字符串 运行虚拟机的子网

GkeDetails 字段格式

字段 类型 说明
集群 ClusterDetail GKE 集群元数据
Pod PodDetails GKE Pod 元数据,当流量的来源或目的地是 Pod 时填充
service ServiceDetails GKE Service 元数据,仅填充在 Service 端点中。记录最多包含两项 Service。如果有两项以上的相关 Service,则此字段包含一个带有特殊 MANY_SERVICES 标记的 Service。

ClusterDetails 字段格式

字段 类型 说明
集群 字符串 GKE 集群名称。
clusterLocation 字符串 集群的位置。集群位置可以是地区或区域。

PodDetails 字段格式

字段 类型 说明
Pod 字符串 Pod 的名称
podNamespace 字符串 Pod 的命名空间

ServiceDetails 字段格式

字段 类型 说明
service 字符串 Service 的名称。如果有两个以上的相关服务,则该字段设置为特殊 Many_SERVICES 标记。
serviceNamespace 字符串 Service 的命名空间

监控

内部直通式网络负载均衡器将监控数据导出到 Cloud Monitoring

监控指标具有以下用途:

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

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

查看 Monitoring 信息中心

控制台

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

    进入 Monitoring

  2. 如果导航窗格中出现资源,请选择资源,然后选择 Google Cloud 负载均衡器。否则,选择信息中心,然后选择名为 Google Cloud 负载均衡器的信息中心。

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

在左侧窗格中,您可以查看所选负载均衡器的各项详细信息。在右侧窗格中,您可以看到时间序列图表。点击 Breakdowns 链接以查看具体的细分类别。左侧窗格显示当前配置的数据,而右侧窗格可显示历史配置提供的、当前未反映在左侧窗格中的数据。

定义 Monitoring 自定义信息中心

您可以为内部直通式网络负载均衡器指标创建自定义 Monitoring 信息中心。

控制台

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

    进入 Monitoring

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

  3. 点击 Add Chart

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

  5. 选择指标和过滤条件。对于指标,资源类型为内部直通式 TCP 网络负载均衡器规则 (internal_tcp_lb_rule) 或内部直通式 UDP 网络负载均衡器规则 (internal_udp_lb_rule)。

  6. 点击保存

定义提醒政策

控制台

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

  1. 在 Google Cloud 控制台的导航面板中,选择 Monitoring,然后选择  提醒

    进入提醒

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

内部直通式网络负载均衡器的指标

内部直通式网络负载均衡器的以下指标会报告给 Monitoring。

指标 说明
入站吞吐量 发送给内部直通式网络负载均衡器转发规则(由后端接收)的字节数。
入站数据包 发送给内部直通式网络负载均衡器转发规则(由后端接收)的数据包数量。
出站吞吐量 绑定转发规则 IP 地址的连接上经内部负载均衡后的后端发送的字节数。
出站数据包 绑定转发规则 IP 地址的连接上经内部负载均衡后的后端发送的数据包数量。
延迟时间 (*) 针对每个内部负载均衡连接上传输的数据包集测量得到的 RTT 分布。在 Monitoring 视图中,这通常会缩减到第 95 百分位。

(*) 仅适用于 TCP 流量。

内部直通式网络负载均衡器指标的过滤维度

系统会为每个内部直通网络负载均衡器汇总指标。指标可以进一步细分为以下几个维度:

属性 说明
后端名称 具有 GCE_VM_IP 端点的实例组或网络端点组 (NEG) 的名称。
后端范围 接收连接的后端的范围(区域或可用区)。
后端区域 对于可用区级实例组和网络端点组,发起连接的后端是可用区
客户端网络 连接到内部直通式网络负载均衡器的客户端实例网络。
客户子网络 连接到内部直通网络负载均衡器的客户端实例的子网。
客户端区域 连接到转发规则的实例的 Google Cloud 可用区
转发规则 内部直通式网络负载均衡器的转发规则的名称。

指标报告频率和保留

每隔 1 分钟,系统就会将内部直通式网络负载均衡器的指标批量导出到 Monitoring 中。监控数据会保留六周。指标基于抽样流量(采样率是动态的,且无法调整)。默认情况下,信息中心可按 1 小时 (1H)、6 小时 (6H)、1 天 (1D)、1 周 (1W)、6 周 (6W) 时间间隔提供数据分析。您可以在 6 周到 1 分钟的时间间隔内手动请求执行分析。

后续步骤