内部 TCP/UDP 负载均衡日志记录和监控

使用集合让一切井井有条 根据您的偏好保存内容并对其进行分类。

本文档介绍如何为内部 TCP/UDP 负载均衡配置和使用 Cloud LoggingCloud Monitoring

日志记录

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

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

好处

以下是使用日志记录的好处:

内部 TCP/UDP 负载均衡器流量监控

通过每个连接的日志记录,您可以深入了解每个连接如何路由到服务后端。

网络问题排查

您可以利用内部 TCP/UDP 负载均衡器日志进行问题排查。如需了解详情,请参阅排查内部 TCP/UDP 负载均衡器问题

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

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

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

从客户端到后端实例的连接的内部 TCP/UDP 负载均衡器日志的格式如下:

  • 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。

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

只有在以下情况下,内部 TCP/UDP 负载均衡日志记录功能才会对来自后端虚拟机的响应数据包进行采样:这些数据包的来源 IP 地址与相应的请求数据包发送到的负载均衡器的转发规则 IP 地址匹配。对于 TCP 连接,响应数据包必须始终具有与请求数据包的目标匹配的来源。但是,对于其他协议,响应数据包可以使用不同的来源 IP 地址。如需了解详情,请参阅请求和返回数据包的 IP 地址

内部 TCP/UDP 负载均衡日志记录功能使用的数据包采样过程会忽略来自后端虚拟机的任何响应数据包,前提是这些响应数据包的来源与内部 TCP/UDP 负载均衡器的转发规则的 IP 地址不匹配。

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

gcloud

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

gcloud beta compute backend-services create BACKEND_SERVICE \
--region=REGION \
--enable-logging \
--logging-sample-rate=SAMPLE_RATE

替换以下内容:

  • BACKEND_SERVICE:后端服务的名称。
  • REGION:要创建的后端服务的区域。
  • SAMPLE_RATE:只有在为此后端服务启用日志记录功能时,才能指定此字段。该字段的值必须介于 0.0 到 1.0 之间,其中 0.0 表示不报告任何日志,1.0 表示报告所有记录的请求。启用日志记录功能时,如果将采用率设置为 0.0,那么效果将相当于停用日志记录功能。默认值为 1.0。

api

regionBackendServices.insert 方法发出 POST 请求。

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

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

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

gcloud

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

gcloud beta compute backend-services update BACKEND_SERVICE \
--region=REGION \
--enable-logging \
--logging-sample-rate=SAMPLE_RATE

替换以下内容:

  • BACKEND_SERVICE:后端服务的名称。
  • REGION:要创建的后端服务的区域。
  • SAMPLE_RATE:只有在为此后端服务启用日志记录功能时,才能指定此字段。该字段的值必须介于 0.0 到 1.0 之间,其中 0.0 表示不报告任何日志,1.0 表示报告所有记录的请求。启用日志记录功能时,如果将采用率设置为 0.0,那么效果将相当于停用日志记录功能。默认值为 1.0。

api

regionBackendServices/patch 方法发出 PATCH 请求。

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

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

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

gcloud

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

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

替换以下内容:

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

api

regionBackendServices/patch 方法发出 PATCH 请求。

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

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

查看日志

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

如需查看所有内部 TCP/UDP 负载均衡器日志,请执行以下操作:

控制台

  1. 在 Google Cloud 控制台中,转到“日志浏览器”页面。
    转到“日志浏览器”
  2. 选择 Google Cloud 内部网络负载均衡器规则资源类型。
  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. 点击运行查询

查看特定后端服务的日志

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

控制台

  1. 在 Google Cloud 控制台中,转到“日志浏览器”页面。
    转到“日志浏览器”
  2. 启用日志字段
  3. 选择 Google Cloud 内部网络负载均衡器规则资源类型。
  4. 选择 loadbalancing.googleapis.com/flows 日志名称。

控制台查询

  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) 的内部 TCP/UDP 负载均衡器日志,请按照以下步骤操作:

控制台

  1. 在 Google Cloud 控制台中,转到“日志浏览器”页面。
    转到“日志浏览器”
  2. 启用日志字段
  3. 选择 Google Cloud 内部网络负载均衡器规则资源类型。
  4. 选择 loadbalancing.googleapis.com/flows 日志名称。

控制台查询

  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 string 在聚合时间间隔内观察到的第一个数据包的时间戳(RFC 3339 日期字符串格式)。
endTime string 在聚合时间间隔内观察到的最后一个数据包的时间戳(RFC 3339 日期字符串格式)。
bytesSent int64 从服务器发送到客户端的字节数。
bytesReceived Int64 服务器从客户端接收的字节数。
packetsSent int64 从服务器发送到客户端的数据包数。
packetsReceived int64 服务器从目的地接收的数据包数。
rtt string 仅针对 TCP 连接测量延迟时间。延迟时间是估算的网络往返时间 (RTT) 加上在客户端的虚拟机操作系统中处理数据包所花费的时间的总和。对于采样的数据包,RTT 从负载均衡后端的角度计算,方法是测量后端发送 TCP 分段与后端收到对已发送分段的序列号的 TCP 确认之间的时间差。延迟时间的格式为字符串,以秒数开头,以“s”结尾(表示秒)。纳秒表示为小数秒。例如,250 毫秒的延迟时间格式为“0.250000000s”。

IpConnection

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

Monitoring

内部 TCP/UDP 负载均衡将监控数据导出到 Cloud Monitoring

监控指标具有以下用途:

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

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

查看 Monitoring 信息中心

  1. 在 Google Cloud 控制台中,转到 Monitoring
    转到 Monitoring
  2. 如果导航窗格中出现 Resources,请选择 Resources,然后选择 Google Cloud Load Balancers。否则,选择 Dashboards,然后选择名为 Google Cloud Load Balancers 的信息中心。
  3. 点击您的负载均衡器的名称。

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

定义 Monitoring 自定义信息中心

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

  1. 在 Google Cloud 控制台中,转到 Monitoring
    转到 Monitoring
  2. 选择 Dashboards > Create Dashboard
  3. 点击 Add Chart
  4. 给图表添加一个标题。
  5. 选择指标和过滤条件。对于指标,资源类型为 Google Cloud TCP Load Balancer (Internal) Rule (internal_tcp_lb_rule) 或 Google Cloud UDP Load Balancer (Internal) Rule (internal_udp_lb_rule)。
  6. 点击保存

定义提醒政策

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

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

    打开 Monitoring

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

内部 TCP/UDP 负载均衡器的指标

内部 TCP/UDP 负载均衡器的以下指标会报告给 Monitoring。

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

(*) 仅适用于 TCP 流量。

内部 TCP/UDP 负载均衡器指标的过滤维度

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

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

指标报告频率和保留

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

后续步骤