迁移到 Cloud Operations for GKE

Google Kubernetes Engine (GKE) 中的监控和日志记录支持有两个选项。

本页面介绍了这两个选项之间的区别,以及从旧版 Logging 和 Monitoring 迁移到 Cloud Operations for GKE 时必须进行哪些更改。

何时需要迁移?

您可以随时将现有 Cloud Monitoring 和 Cloud Logging 配置从旧版 Logging 和 Monitoring 迁移到 Cloud Operations for GKE。不过,请注意,GKE 1.20 版不支持旧版 Logging 和 Monitoring。

下表汇总了每个 GKE 发布版本中提供的监控和日志记录选项:

GKE 版本 旧版 Logging 和 Monitoring Cloud Operations for GKE
1.14 可用 默认
1.15 可用 默认
1.16 可用 默认
1.17 可用 默认
1.18 可用 默认
1.19 可用 默认
1.20 不可用 默认

如需了解弃用旧版 Logging 和 Monitoring 的情况,请参阅针对 GKE 的旧版支持的弃用指南。

使用 Cloud Operations for GKE 有哪些好处?

Cloud Operations for GKE 可为您提供包括以下好处在内的一些重要好处:

有何变化?

Cloud Operations for GKE 使用与旧版 Logging 和 Monitoring 不同的资源模型来组织其指标、日志和元数据。对于使用 Cloud Operations for GKE 的集群,以下是一些特定的更改:

  • 导航变化:Cloud Monitoring 信息中心名为 GKE。如果您没有集群使用 Cloud Operations for GKE,此信息中心不会显示。

  • 受监控的资源类型名称发生了变化:例如,Kubernetes 节点列在受监控的资源类型 k8s_node(Kubernetes 节点)之下,而不是列在 gce_instance(Compute Engine 虚拟机实例)之下。

  • Kubernetes 指标名称发生了变化:在 Cloud Operations for GKE 中,指标类型名称现在以前缀 kubernetes.io/ 开头,而不是以 container.googleapis.com/ 开头。

  • logEntry 元数据变化:Cloud Operations for GKE 日志条目更改了某些 resource.labellabels 字段的名称。例如,字段 resource.labels.namespace_id 已更改为 resource.labels.namespace_name,而值未更改。

  • logName 变化:Cloud Operations for GKE 日志条目在其日志名称中使用 stdoutstderr,而旧版 Logging 和 Monitoring 使用更广泛的名称,包括容器名称。在 Cloud Operations for GKE 中,容器名称仍可作为 resource.labels.container_name 下的资源标签使用。

下表汇总了上述更改:

更改 (旧)旧版 Logging 和 Monitoring (新)Cloud Operations for GKE
信息中心菜单 信息中心 > GKE 集群 信息中心 > GKE
指标前缀 container.googleapis.com kubernetes.io
指标资源类型 gke_container
gce_instance
(无)
k8s_container
k8s_node
k8s_pod
日志资源类型 container
gke_cluster
gce_instance
gke_nodepool
k8s_container
k8s_cluster
gke_cluster(仅审核日志)
k8s_node
k8s_pod

资源类型变化

Cloud Operations for GKE 具有新的资源类型名称、新的资源类型显示名称以及用于识别特定资源的新标签名称。下表列出了这些变化。

资源类型变化
(旧)旧版 Logging 和 Monitoring 资源类型 (新)Cloud Operations for GKE 资源类型
表格脚注
1 在仅用于监控的新资源类型中,metadata.system_labels 中的 instance_id 会变成 node_name
2 zone 是指容器或实例的位置。location 是指集群主节点的位置。
3 在用于日志记录的 k8s_container 资源类型中未提供 metadata.system_labels.node_name。您无法按节点名称搜索日志。
4 gce_instance 资源类型可以表示 Kubernetes 节点以及非 Kubernetes 虚拟机实例。升级到 Cloud Operations for GKE 时,与节点相关的用途会更改为使用新资源类型 k8s_node,包括具有以下名称的节点级日志:kubeletdockerkube-proxystartupscriptnode-problem-detector
5 k8s_podk8s_cluster 节点可能包含旧版 Logging 和 Monitoring 支持中不存在的日志。
仅限 Monitoring
gke_container (GKE 容器)

标签
  cluster_name
  container_name
  instance_id1
  namespace_id
  pod_id
  project_id
  zone2

仅限 Logging
container (GKE 容器)

标签
  cluster_name
  container_name
  instance_id1
  namespace_id
  pod_id
  project_id
  zone2

Monitoring 和 Logging
k8s_container (Kubernetes 容器)

标签
  cluster_name
  container_name
  metadata.system_labels.node_name3
  namespace_name
  pod_name
  project_id
  location2

仅限 Logging
gce_instance (Compute Engine 虚拟机实例)4

标签
  cluster_name
  instance_id
  project_id
  zone2
Monitoring 和 Logging
k8s_node4(Kubernetes 节点)

标签
  cluster_name
  node_name
  project_id
  location2
 
(无)
Monitoring 和 Logging
k8s_pod5 (Kubernetes Pod)

标签
  cluster_name
  namespace_name
  pod_name
  project_id
  location2

仅限 Logging
gke_cluster (GKE_cluster)

标签
  cluster_name
  project_id
  location

Monitoring 和 Logging
k8s_cluster5(Kubernetes 集群)

标签
  cluster_name
  project_id
  location

我需要做什么?

关于 Cloud Operations for GKE 中的资源模型更改以及这些更改对现有监控和日志记录配置的影响,本部分包含了更多具体信息。

您应该执行以下步骤,将集群迁移到 Cloud Operations for GKE:

  1. 确定 Logging 和 Monitoring 配置:确定任何可能使用旧版 Logging 和 Monitoring 与 Cloud Operations for GKE 之间已发生变化的值的 Logging 和 Monitoring 配置。

  2. 更新 LoggingMonitoring 配置:更新任何 Logging 和 Monitoring 配置,以反映 Cloud Operations for GKE 中的变化。

  3. 更新 GKE 集群配置:更新 GKE 集群以使用 Cloud Operations for GKE 设置。

由于旧版 Logging 和 Monitoring 与 Cloud Operations for GKE 之间的资源模型和 logName 已发生变化,因此引用资源模型变化内容的任何 Logging 或 Monitoring 配置也必须更新。迁移可能需要您更新 Logging 和 Monitoring 配置,这些配置包括但不限于:

  • 自定义信息中心
  • 图表
  • 群组过滤器
  • 提醒政策
  • 日志接收器
  • 日志排除项
  • Cloud Logging 和 Cloud Monitoring 中基于日志的指标

识别使用旧版 Logging 和 Monitoring 的集群

有两种方法可以识别项目中的哪些集群使用旧版 Logging 和 Monitoring。

  1. 按项目使用 gcloud 命令行工具

    您可以使用以下 gcloud 命令列出当前项目中每个集群的 loggingServicemonitoringService 的值。

    gcloud container clusters list | tail +2 | while read name loc rest ; do echo $name ; gcloud container clusters describe $name --zone $loc | egrep 'loggingService|monitoringService' ; echo ; done
    

    您应该会看到类似如下文本的命令输出结果。

      cluster-1
      loggingService: logging.googleapis.com
      monitoringService: monitoring.googleapis.com
    
      cluster-2
      loggingService: logging.googleapis.com/kubernetes
      monitoringService: monitoring.googleapis.com/kubernetes
    
      cluster-3
      loggingService: logging.googleapis.com/kubernetes
      monitoringService: none
    

    如果集群的输出包含 loggingService: logging.googleapis.commonitoringService: monitoring.googleapis.com,则说明该集群使用的是旧版 Logging 和 Monitoring。

    如果集群的输出包含 loggingService: logging.googleapis.com/kubernetesmonitoringService:monitoring.googleapis.com/kubernetes,则说明集群使用的是 Cloud Operations for GKE。

  2. 使用 Cloud Monitoring 的 GKE 集群信息中心

    1. 点击 Cloud Monitoring GKE 集群信息中心
    2. 选择“工作区”,其中包含要查看运行旧版 Logging 和 Monitoring 的集群的 Google Cloud 项目。
    3. 查看信息中心内的集群列表。只有使用旧版 Logging 和 Monitoring 的集群才会显示在信息中心内。

      例如,在以下屏幕截图中,有 4 个集群使用旧版 Logging 和 Monitoring。

      使用旧版解决方案的集群的显示内容。

迁移监控资源

如果您要将旧版 Logging 和 Monitoring 与控制层面版本为 1.15 或更高版本的 GKE 集群结合使用,则旧版 Monitoring 和 Cloud Operations for GKE 资源模型都可提供集群的指标。这意味着,即使在将集群迁移到 Cloud Operations for GKE 之前,集群也会开始使用新数据模型生成指标,而无需额外付费。

从 2021 年 1 月开始,您的自定义信息中心和提醒将自动更新,以引用新的资源模型指标。如果您想迁移自己的 Cloud Monitoring 配置(自定义信息中心、提醒、群组中的图表),则需要更新每个配置以反映新资源模型。

如果您在 Terraform 或其他部署管理器中维护配置并自动同步更改,则还需要迁移配置。

识别旧数据模型的配置

如需确定在迁移到 Cloud Operations for GKE 的过程中必须更新的 Cloud Monitoring 配置,请查看 Kubernetes 迁移状态信息中心:

  1. 在 Cloud Console 中,转到 Monitoring

    转至 Monitoring

  2. 在 Monitoring 导航窗格中,点击设置,然后选择 Kubernetes 迁移状态 (Kubernetes Migration Status) 标签页。

以下示例信息中心显示需要更新 1 个提醒政策:

显示迁移信息中心。

更新 Cloud Monitoring 配置

如果您的集群使用的是 GKE 1.15 或更高版本,并且使用旧版 Monitoring,则该集群将发布到两个数据模型。在这种情况下,您可以通过两种方式来迁移配置。

  • 克隆配置并更新克隆。通过此方式,您可以创建现有信息中心、提醒政策和群组的副本,并将副本迁移到新资源模型。这样,您就可以继续同时使用新旧数据模型对集群使用 Monitoring。例如,通过此方式,您可以使用两个信息中心:继续使用原始资源模型的原始信息中心,以及使用新资源模型的原始信息中心的克隆。

  • 就地升级受影响的配置。此方法会立即切换到 Cloud Monitoring 中的新数据模型。

以下各部分介绍了如何迁移信息中心提醒政策群组的配置。

对于决定要选择哪个方式,需要考虑的一个因素是您希望提供的监控历史记录量。目前,Cloud Monitoring 会提供 6 周的集群历史数据。在开始对数据模型进行双重写入的 GKE 集群升级后,旧数据模型仍包含集群的历史指标,而新数据模型仅包含在升级时开始的指标。

如果您不需要历史数据,则可以随时将配置就地升级到新数据模型。如果历史数据很重要,则您可以克隆配置并更新克隆,从而使用新的资源模型类型。

或者,您也可以在集群开始向两个数据模型进行双重写入后等待 6 周。6 周后,两个数据模型都具有相同的历史数据,因此您可以就地升级配置并切换到新数据模型。

更新信息中心

如需查看信息中心,请完成以下步骤:

  1. 从 Cloud Console 转到 Monitoring

    转到 Monitoring

  2. 选择信息中心

如需克隆信息中心并更新克隆,请完成以下步骤:

  1. 找到您要克隆的信息中心。

  2. 点击复制信息中心 (),并输入克隆的信息中心的名称。

  3. 根据需要更新新信息中心的配置。

如需更新信息中心内的图表定义,请完成以下步骤:

  1. 点击您要修改的图表的更多图表选项 (⋮)。

  2. 选择修改以打开修改图表面板。

  3. 更改资源类型和指标名称,以转换为新数据模型。您还可以根据需要更新过滤条件分组依据字段。

更新提醒政策

如需查看提醒政策,请完成以下步骤:

  1. 从 Cloud Console 转到 Monitoring

    转到 Monitoring

  2. 选择提醒

如需克隆和更新提醒政策,请完成以下步骤:

  1. 政策表中选择要克隆的政策。

  2. 点击复制以开始提醒政策副本的创建流程。

  3. 修改引用旧数据模型的任何条件以更新资源类型和指标名称。

    该流程的最后一步可让您为克隆的政策输入名称。

如需就地修改提醒政策,请完成以下步骤:

  1. 政策表中选择您要修改的政策。

  2. 点击修改以更新该政策。

  3. 更新所有引用旧数据模型的条件。

更新群组

您无法通过 Google Cloud Console 克隆群组,因此若要复制群组,必须使用相同的过滤条件创建新群组。

群组过滤条件可以通过多种方式引用旧数据模型。

  • 资源类型 - 群组可以定义过滤条件 resource.type="gke_container"。由于 gke_container 类型可用于引用多种不同类型的 GKE 实体,您必须将过滤条件更新为您想要匹配的资源类型:k8s_containerk8s_podk8s_node。如果您要匹配多个类型,则定义一个将多个子句与 OR 运算符相结合的过滤条件。

  • 标签 cloud_account - 群组可以定义过滤条件 resource.metadata.cloud_account="<var>CLOUD_ACCOUNT_ID</<var>"。作为单独弃用的一部分,cloud_account 元数据字段不再可用。请考虑使用 resource.labels.project_id 标签。

  • 标签 region - 群组可以定义过滤条件 resource.metadata.region="<var>REGION_NAME</<var>"。新数据模型中不再提供 region 元数据字段。如果要根据地理位置匹配 GKE 实体,请考虑使用 resource.labels.location 标签。

在数据模型之间映射指标

本部分介绍了如何将旧数据模型中的指标映射到新数据模型中的指标。如下表所示,旧数据模型发布了 17 个不同的指标。其中一些指标是针对多个 GKE 实体类型发布的,因此需要 17 个以上的映射来转换所有指标。

映射指标时,请注意以下几点:

  • 旧指标的前缀为 container.googleapis.com/。新指标的前缀为 kubernetes.io/

  • 在旧数据模型中,唯一的资源类型为 gke_container。根据您定义资源标签的方式,此资源类型可能引用与 GKE 节点对应的 GKE 容器、Pod、系统守护程序和机器。

  • 您可以结合使用与下表中列出的不匹配的 pod_idcontainer_name 来查询 Monitoring API。此类查询返回的数据未定义,并且系统不提供来自这些未定义状态的映射。

    GKE 实体类型 过滤条件
    容器 pod_id != '' 且 container_name != ''
    pod_id 不是空字符串,container_name 不是空字符串)
    Pod pod_id != '' 且 container_name == ''
    pod_id 不是空字符串,container_name 是空字符串)
    系统守护程序 pod_id == '' 且 container_name != 'machine'
    pod_id 是空字符串,container_namedocker-daemonkubeletspods 之一)
    机器 pod_id == '' 且 container_name == 'machine'
    pod_id 是空字符串,container_name 是字符串 machine

下表列出了三种映射类型:

  • 新旧数据模型之间的直接映射。

  • 需要配置的映射。

  • 旧指标在新模型中没有直接对等指标的映射。

直接映射

以下指标可在新旧数据模型之间直接转换。

旧指标名称 旧 GKE 实体类型 新指标名称 新 GKE 资源类型 备注
container/accelerator/
duty_cycle
容器 container/accelerator/
duty_cycle
k8s_container
container/accelerator/
memory_total
容器 container/accelerator/
memory_total
k8s_container
container/accelerator/
memory_used
容器 container/accelerator/
memory_used
k8s_container
container/accelerator/
request
容器 container/accelerator/
request
k8s_container
container/cpu/
reserved_cores
容器 container/cpu/
limit_cores
k8s_container 当资源为 pod 时,请参阅需要配置的映射以进行映射
container/cpu/
usage_time
容器 container/cpu/
core_usage_time
k8s_container 当资源为 pod 时,请参阅需要配置的映射以进行映射
container/cpu/
usage_time
系统守护程序 node_daemon/cpu/
core_usage_time
k8s_node 在旧数据模型中,
gke_container.container_namedocker-daemonkubeletspods 之一。 这些过滤条件值与新数据模型字段 metric.component 中的值匹配。
container/cpu/
utilization
容器 container/cpu/
limit_utilization
k8s_container
container/disk/
bytes_total
Pod pod/volume/
total_bytes
k8s_pod 通过移除前面附加的 Volume:gke_container.device_name (Volume:config-volume) 转换为 k8s_pod.volume_name (config-volume)。
container/disk/bytes_used Pod pod/volume/
used_bytes
k8s_pod 通过移除前面附加的 Volume:gke_container.device_name (Volume:config-volume) 转换为 k8s_pod.volume_name (config-volume)。
container/memory/
bytes_total
容器 container/memory/
limit_bytes
k8s_container
container/memory/
bytes_used
容器 container/memory/
used_bytes
k8s_container
container/memory/
bytes_used
系统守护程序 node_daemon/memory/
used_bytes
k8s_node 在旧数据模型中,
gke_container.container_namedocker-daemonkubeletspods 之一。这些过滤条件值与新数据模型字段 metric.component 中的值匹配。
container/disk/
inodes_free
机器 node/ephemeral_storage/
inodes_free
k8s_node 旧数据模型包含 instance_id 字段,这是一个随机数 ID。新数据模型包含 node_name,这是一个直观易懂的名称。
container/disk/
inodes_total
机器 node/ephemeral_storage/
inodes_total
k8s_node 旧数据模型包含 instance_id 字段,这是一个随机数 ID。新数据模型包含 node_name,这是一个直观易懂的名称。
container/pid_limit 机器 node/pid_limit k8s_node 旧数据模型包含 instance_id 字段,这是一个随机数 ID。新数据模型包含 node_name,这是一个直观易懂的名称。
container/pid_used 机器 node/pid_used k8s_node 旧数据模型包含 instance_id 字段,这是一个随机数 ID。新数据模型包含 node_name,这是一个直观易懂的名称。
需要配置的映射

以下指标通过一些基本操作从旧数据模型转换为新数据模型。

旧指标名称 旧 GKE 实体类型 新指标名称 新 GKE 资源类型 备注
container/cpu/
reserved_cores
Pod SUM container/cpu/limit_cores
GROUP BY pod_name
k8s_container 旧数据模型包含 pod_id 字段,这是一个 UUID。新数据模型包含 pod_name,这是一个直观易懂的名称。
container/cpu/
usage_time
Pod SUM container/cpu/core_usage_time
GROUP BY pod_name
k8s_container 旧数据模型包含 pod_id 字段,这是一个 UUID。新数据模型包含 pod_name,这是一个直观易懂的名称。
container/disk/
bytes_total
容器 node/ephemeral_storage/
total_bytes
k8s_container gke_container.device_name/logs 之一。每个值均等于新值。
container/disk/
bytes_used
容器 container/ephemeral_storage/
used_bytes
k8s_container gke_container.device_name/logs 之一。必须将这两个值相加才能获取新值。在新数据模型中,您不能分别获取 /logs 的值。
container/memory/
bytes_total
Pod SUM container/memory/limit_bytes
GROUP BY pod_name
k8s_container 旧数据模型包含 pod_id 字段,这是一个 UUID。新数据模型包含 pod_name,这是一个直观易懂的名称。
container/memory/
bytes_used
Pod SUM container/memory/used_bytes
GROUP BY pod_name
k8s_container 旧数据模型包含 pod_id 字段,这是一个 UUID。新数据模型包含 pod_name,这是一个直观易懂的名称。
在新模型中没有直接对等指标的映射

以下指标在新数据模型中没有对等指标。

Pod 的 CPU 利用率
在旧数据模型中,根据每个容器的 CPU 限制,该指标是指 pod 中所有容器的 CPU 利用率的加权平均值。
在新数据模型中,该值不存在,必须根据每个容器的限制和利用率在客户端进行计算。
正常运行时间
在旧数据模型中,该指标是一个累计指标,表示在 ms/s 单位内容器可用所占的时间比例。对于始终可用的容器,该值为 ~1000ms/s。
在新数据模型中,该指标是以小时为单位的衡量指标,用于报告系统各个部分无中断地运行时长。

资源组变化

如果您定义了自己的资源组,并使用了前面的资源类型变化表中显示的任何旧版 Logging 和 Monitoring 资源类型,请将这些类型更改为相应的 Cloud Operations for GKE 资源类型。如果您的资源组包含自定义图表,您可能必须更改它们。

迁移日志记录资源

如需迁移日志记录资源,请完成以下各部分中的步骤。

日志条目内容的变化

更新到 Cloud Operations for GKE 时,您可能会发现日志条目中的特定信息已移至不同名称的字段。此信息可能会出现在基于日志的指标、日志接收器和日志排除项所使用的日志查询中。

以下日志条目变化表中列出了新字段和标签。简要总结如下:

  • 检查过滤条件中的 logName 字段。Cloud Operations for GKE 日志条目会在其日志名称中使用 stdoutstderr,而旧版 Logging 和 Monitoring 使用了更多种类的名称,包括容器名称。容器名称仍可用作资源标签。
  • 检查日志条目中的 labels 字段。此字段可能包含以前位于 metadata 日志条目字段中的信息。
  • 检查日志条目中的 resource.labels 字段。新资源类型具有额外的标签值。
日志条目变化
(旧)旧版 Logging 和 Monitoring 日志条目 (新)Cloud Operations for GKE 日志条目
表格脚注
1 资源标签标识了产生指标的特定资源,例如特定集群和节点。
2labels 字段出现在作为 Cloud Operations for GKE 一部分的新日志条目中,并且偶尔会出现在一些旧版 Logging 和 Monitoring 日志条目中。在 Cloud Actions for GKE 中,它用于保存以前位于 metadata 日志条目字段中的一些信息。
日志条目资源
resource.labels(资源标签 1
日志条目资源
resource.labels(资源标签 1
日志条目元数据
labels(日志条目标签2

标签(示例)
  compute.googleapis.com/resource_name:
    "fluentd-gcp-v3.2.0-d4d9p"

  container.googleapis.com/namespace_name:
    "kube-system"

  container.googleapis.com/pod_name:
    "fluentd-gcp-scaler-8b674f786-d4pq2"

  container.googleapis.com/stream:
    "stdout"
日志条目元数据
labels

标签(示例)
  k8s-pod/app:
    "currencyservice"

  k8s-pod/pod-template-hash:
    "5a67f17c"

日志示例:

容器资源类型变化:

红色粗体文本突出显示了旧版 Logging 和 Monitoring 与 Cloud Operations for GKE 资源模型之间的差异。

资源模型 日志示例
旧版 Logging 和 Monitoring

{
  "insertId": "fji4tsf1a8o5h",
  "jsonPayload": {
    "pid": 1,
    "name": "currencyservice-server",
    "v": 1,
    "message": "conversion request successful",
    "hostname": "currencyservice-6995d74b95-zjkmj"
  },
  "resource": {
    "type": "container",
    "labels": {
      "project_id": "my-test-project",
      "cluster_name": "my-test-cluster",
      "pod_id": "currencyservice-6995d74b95-zjkmj",
      "zone": "us-central1-c",
      "container_name": "server",
      "namespace_id": "default",
      "instance_id": "1234567890"
    }
  },
  "timestamp": "2020-10-02T19:02:47.575434759Z",
  "severity": "INFO",
  "labels": {
    "container.googleapis.com/pod_name": "currencyservice-6995d74b95-zjkmj",
    "compute.googleapis.com/resource_name": "gke-legacy-cluster-default-pool-c534acb8-hvxk",
    "container.googleapis.com/stream": "stdout",
    "container.googleapis.com/namespace_name": "default"
  },
  "logName": "projects/my-test-project/logs/server",
  "receiveTimestamp": "2020-10-02T19:02:50.972304596Z"
}
Cloud Operations for GKE

{
  "insertId": "mye361s5zfcl55amj",
  "jsonPayload": {
    "v": 1,
    "name": "currencyservice-server",
    "pid": 1,
    "hostname": "currencyservice-5b69f47d-wg4zl",
    "message": "conversion request successful"
  },
  "resource": {
    "type": "k8s_container",
    "labels": {
      "container_name": "server",
      "project_id": "my-test-project",
      "pod_name": "currencyservice-5b69f47d-wg4zl",
      "namespace_name": "onlineboutique",
      "location": "us-central1-c",
      "cluster_name": "my-prod-cluster"

    }
  },
  "timestamp": "2020-10-02T18:41:55.359669767Z",
  "severity": "INFO",
  "labels": {
    "k8s-pod/app": "currencyservice",
    "k8s-pod/pod-template-hash": "5b69f47d",
    "compute.googleapis.com/resource_name": "gke-legacy-cluster-default-pool-c534acb8-hvxk"
  },
  "logName": "projects/my-test-project/logs/stdout",
  "receiveTimestamp": "2020-10-02T18:41:57.930654427Z"
}

集群资源类型变化:

红色粗体文本突出显示了旧版 Logging 和 Monitoring 与 Cloud Operations for GKE 资源模型之间的差异。

资源模型 日志示例
旧版 Logging 和 Monitoring

{
  "insertId": "962szqg9uiyalt",
  "jsonPayload": {
    "type": "Normal",
    "involvedObject": {
      "apiVersion": "policy/v1beta1",
      "uid": "a1bc2345-12ab-12ab-1234-123456a123456",
      "resourceVersion": "50968",
      "kind": "PodDisruptionBudget",
      "namespace": "knative-serving",
      "name": "activator-pdb"
    },
    "apiVersion": "v1",
    "reason": "NoPods",
    "source": {
      "component": "controllermanager"
    },
    "message": "No matching pods found",
    "kind": "Event",
    "metadata": {
      "selfLink": "/api/v1/namespaces/knative-serving/events/activator-pdb.163a42fcb707c1fe",
      "namespace": "knative-serving",
      "name": "activator-pdb.163a42fcb707c1fe",
      "uid": "a1bc2345-12ab-12ab-1234-123456a123456",
      "creationTimestamp": "2020-10-02T19:17:50Z",
      "resourceVersion": "1917"
    }
  },
  "resource": {
    "type": "gke_cluster",
    "labels": {
      "project_id": "my-test-project",
      "location": "us-central1-c",
      "cluster_name": "my-prod-cluster"
    }
  },
  "timestamp": "2020-10-02T21:33:20Z",
  "severity": "INFO",
  "logName": "projects/my-test-project/logs/events",
  "receiveTimestamp": "2020-10-02T21:33:25.510671123Z"
}
Cloud Operations for GKE

{
  "insertId": "1qzipokg6ydoesp",
  "jsonPayload": {
    "involvedObject": {
      "uid": "a1bc2345-12ab-12ab-1234-123456a123456",
      "name": "istio-telemetry",
      "apiVersion": "autoscaling/v2beta2",
      "resourceVersion": "90505937",
      "kind": "HorizontalPodAutoscaler",
      "namespace": "istio-system"
    },
    "source": {
      "component": "horizontal-pod-autoscaler"
    },
    "kind": "Event",
    "type": "Warning",
    "message": "missing request for cpu",
    "metadata": {
      "resourceVersion": "3071416",
      "creationTimestamp": "2020-08-22T14:18:59Z",
      "name": "istio-telemetry.162d9ce2894d6642",
      "selfLink": "/api/v1/namespaces/istio-system/events/istio-telemetry.162d9ce2894d6642",
      "namespace": "istio-system",
      "uid": "a1bc2345-12ab-12ab-1234-123456a123456"
    },
    "apiVersion": "v1",
    "reason": "FailedGetResourceMetric"
  },
  "resource": {
    "type": "k8s_cluster",
    "labels": {
      "project_id": "my-test-project"
      "location": "us-central1-a",
      "cluster_name": "my-prod-cluster1",
    }
  },
  "timestamp": "2020-10-02T21:39:07Z",
  "severity": "WARNING",
  "logName": "projects/my-test-project/logs/events",
  "receiveTimestamp": "2020-10-02T21:39:12.182820672Z"
}
   

节点资源类型变化:

红色粗体文本突出显示了旧版 Logging 和 Monitoring 与 Cloud Operations for GKE 资源模型之间的差异。

资源模型 日志示例
旧版 Logging 和 Monitoring

{
  "insertId": "16qdegyg9t3n2u5",
  "jsonPayload": {
    "SYSLOG_IDENTIFIER": "kubelet",
    [...]
    "PRIORITY": "6",
    "_COMM": "kubelet",
    "_GID": "0",
    "_MACHINE_ID": "9565f7c82afd94ca22612c765ceb1042",
    "_SYSTEMD_UNIT": "kubelet.service",
    "_EXE": "/home/kubernetes/bin/kubelet"
  },
  "resource": {
    "type": "gce_instance",
    "labels": {
      "instance_id": "1234567890",
      "zone": "us-central1-a",
      "project_id": "my-test-project"
    }
  },
  "timestamp": "2020-10-02T21:43:14.390150Z",
  "labels": {
    "compute.googleapis.com/resource_name": "gke-legacy-monitoring-default-pool-b58ff790-29rr"
  },
  "logName": "projects/my-test-project/logs/kubelet",
  "receiveTimestamp": "2020-10-02T21:43:20.433270911Z"
}
   
Cloud Operations for GKE

{
  "insertId": "kkbgd6e5tmkpmvjji",
  "jsonPayload": {
    "SYSLOG_IDENTIFIER": "kubelet",
   [...]
    "_CAP_EFFECTIVE": "3fffffffff",
    "_HOSTNAME": "gke-standard-cluster-1-default-pool-f3929440-f4dy",
    "PRIORITY": "6",
    "_COMM": "kubelet",
    "_TRANSPORT": "stdout",
    "_GID": "0",
    "MESSAGE": "E1002 21:43:14.870346    1294 pod_workers.go:190] Error syncing pod 99ba1919-d633-11ea-a5ea-42010a800113 (\"stackdriver-metadata-agent-cluster-level-65655bdbbf-v5vjv_kube-system(99ba1919-d633-11ea-a5ea-42010a800113)\"), skipping: failed to \"StartContainer\" for \"metadata-agent\" with CrashLoopBackOff: \"Back-off 5m0s restarting failed container=metadata-agent pod=stackdriver-metadata-agent-cluster-level-65655bdbbf-v5vjv_kube-system(99ba1919-d633-11ea-a5ea-42010a800113)\""
  },
  "resource": {
    "type": "k8s_node",
    "labels": {
      "cluster_name": "my-prod-cluster-1",
      "location": "us-central1-a",
      "node_name": "gke-standard-cluster-1-default-pool-f3929440-f4dy"
       "project_id": "my-test-project",
    }
  },
  "timestamp": "2020-10-02T21:43:14.870426Z",
  "logName": "projects/my-test-project/logs/kubelet",
  "receiveTimestamp": "2020-10-02T21:43:20.788933199Z"
}

Logging 配置更新

本部分介绍在迁移到 Cloud Operations for GKE 的过程中,您可能需要对 Cloud Logging 配置进行的更改。 如果您在 Terraform 或其他部署管理器中维护配置并自动同步更改,则还需要迁移配置。

Logging 查询

如果您使用查询在 Cloud Logging 中查找并过滤您的日志,并使用了前面的资源类型变化表中显示的任何旧版 Logging 和 Monitoring 资源类型,请将这些类型更改为相应的 Cloud Operations for GKE 类型。

例如,在旧版 Logging 和 Monitoring 中,您可以使用 container 资源类型查询容器日志;而在 Cloud Operations for GKE 中,您将使用资源类型 k8s_container 来查询容器日志。

  resource.type="k8s_container"

再举一例,在旧版 Logging 和 Monitoring 中,使用容器名称查询容器的特定日志名称,而在 Cloud Operations for GKE 中,使用 stdoutstderr 日志名称查询容器日志。

  resource.type="k8s_container"
  log_name="projects/YOUR_PROJECT_NAME/logs/stdout"
  resource.labels.container_name="CONTAINER_NAME"

基于日志的指标

如果您定义了自己的基于日志的指标,并使用了前面的指标名称变化资源类型变化表中显示的旧版 Logging 和 Monitoring 指标或资源类型,请将这些指标和资源类型更改为相应的 Cloud Operations for GKE 指标和资源类型。

您可以使用以下 gcloud 工具命令查找基于日志的指标:

  gcloud logging metrics list --filter='filter~resource.type=\"container\" OR filter~resource.type=container'

  gcloud logging metrics list --filter='filter~resource.labels.namespace_id'

  gcloud logging metrics list --filter='filter~resource.labels.pod_id'

  gcloud logging metrics list --filter='filter~resource.labels.zone'

您可以使用以下 gcloud 工具命令更新基于日志的指标。

  gcloud logging metrics update YOUR_LOGS_BASED_METRIC_NAME --log-filter='resource.type=\"container\" OR resource.type=\"k8s_container\"'

  gcloud logging metrics update YOUR_LOGS_BASED_METRIC_NAME --log-filter='resource.labels.namespace_id=\"YOUR_NAMESPACE\" OR resource.labels.namespace_name=\"YOUR_NAMESPACE\"'

  gcloud logging metrics update YOUR_LOGS_BASED_METRIC_NAME --log-filter='resource.labels.pod_id=\"YOUR_POD_NAME\" OR resource.labels.pod_name=\"YOUR_NAME\"'

  gcloud logging metrics update YOUR_LOGS_BASED_METRIC_NAME --log-filter='resource.labels.zone=\"YOUR_ZONE\" OR resource.labels.location=\"YOUR_ZONE\"'

或者,您也可以在 Cloud Console 中更新基于日志的指标。

日志导出

如果您导出任何日志,并且您的导出操作使用了前面的资源类型变化表中显示的旧版 Logging 和 Monitoring 资源类型,请将您的导出操作更改为使用相应的 Cloud Operations for GKE 资源类型。 Cloud Operations for GKE 会在日志名称中使用 stdoutstderr,而旧版 Logging 和 Monitoring 使用容器名称。

日志名称更改有两个重要注意事项:

  1. 对导出目标文件位置和表的更改 - Cloud Operations for GKE 中的日志名称值包括 stdoutstderr,而不是容器名称。容器名称仍可用作资源标签。您需要将 Cloud Storage 针对 BigQuery 表的导出或查询中的日志名称处理更改为使用 stdoutstderr 日志名称。
  2. logName 值 - 日志名称值用于确定 Cloud Storage 中的导出文件结构和 BigQuery 中的表结构。您应该调整 Cloud Storage 文件和 BigQuery 表的使用量,以将 Cloud Storage 中的文件夹结构和 BigQuery 中的表结构考虑在内。

您可以使用以下 gcloud 命令行工具命令查找受影响的 Logging 接收器:

  gcloud logging sinks list --filter='filter~resource.type=\"container\" OR filter~resource.type=container'

  gcloud logging sinks list --filter='filter~resource.labels.namespace_id'

  gcloud logging sinks list --filter='filter~resource.labels.pod_id'

  gcloud logging sinks list --filter='filter~resource.labels.zone'

您可以使用以下 gcloud 工具命令更新 Logging 接收器。

  gcloud logging sinks update YOUR_SINK_NAME --log-filter='resource.type=\"container\" OR resource.type=\"k8s_container\"'

  gcloud logging sinks update YOUR_SINK_NAME --log-filter='resource.labels.namespace_id=\"YOUR_NAMESPACE\" OR resource.labels.namespace_name=\"YOUR_NAMESPACE\"'

  gcloud logging sinks update YOUR_SINK_NAME --log-filter='resource.labels.pod_id=\"YOUR_POD_NAME\" OR resource.labels.pod_name=\"YOUR_NAME\"'

  gcloud logging sinks update YOUR_SINK_NAME --log-filter='resource.labels.zone=\"YOUR_ZONE\" OR resource.labels.location=\"YOUR_ZONE\"'

或者,您也可以在 Cloud Console 中更新基于日志的指标。

日志排除

如果您排除任何日志,并且您的排除过滤条件使用了前面的资源类型变化表中显示的旧版 Logging 和 Monitoring 资源类型,请将您的排除过滤条件更改为使用相应的 Cloud Operations for GKE 资源类型。

如需了解如何查看日志排除项,请参阅查看排除项过滤条件指南。

日志位置的变化

在 Cloud Logging 中,日志将按照生成它们的资源类型进行存储。由于这些类型在 Cloud Operations for GKE 中已更改,因此请务必在 Kubernetes Container 等新资源类型中查找您的日志,而不要在 GKE Container 等旧版 Logging 和 Monitoring 类型中查找。

更新集群的配置

迁移任何日志记录监控资源以使用 Cloud Operations for GKE 数据格式,最后一步是更新 GKE 集群以使用 Cloud Operations for GKE。

如需更新 GKE 集群的日志记录和监控配置,请按以下步骤操作:

CONSOLE

  1. 转到项目的 GKE 集群页面。点击以下按钮可转到该页面:

    转到 Kubernetes 集群

  2. 点击要更新的集群以使用 Cloud Operations for GKE。

  3. 在标有 Cloud Operations for GKE 的行中,点击修改图标。

  4. 在显示的对话框中,确认已选中启用 Cloud Operations for GKE

  5. 在该对话框内的下拉菜单中,选择要收集的日志和指标。Cloud Operations for GKE 的默认(推荐)设置是系统与工作负载日志记录和监控。在此下拉列表中选择除“旧版 Logging 和 Monitoring”以外的任何值会将集群更新为开始使用 Cloud Operations for GKE,而不是使用旧版 Logging 和 Monitoring。

  6. 点击保存更改

GCLOUD

  1. 运行此命令:

    gcloud container clusters update [CLUSTER_NAME] \
      --zone=[ZONE] \
      --project=[PROJECT_ID] \
      --enable-stackdriver-kubernetes
    

后续步骤