迁移到 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.18 版不支持旧版 Logging 和 Monitoring。

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

GKE 版本 旧版 Logging 和 Monitoring Cloud Operations for GKE
1.10 - 1.12.5 默认 可用(Beta 版)
1.12.7 默认 可用
1.13 默认 可用
1.14 可用 默认
1.15 可用 默认
1.16 已计划(即将推出) 默认
1.17 已计划(即将推出) 默认
1.18 不可用 默认

如需了解弃用旧版 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. 更新 Logging 和 Monitoring 配置:更新任何 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 中基于日志的指标

迁移监控资源

使用迁移状态信息中心

如需了解在迁移到 Cloud Operations for GKE 的过程中需要对 Logging 配置进行的更改,请参阅 Logging 配置更新

如需确定在迁移到 Cloud Operations for GKE 的过程中必须更新的 Cloud Monitoring 配置,请执行以下操作:

  1. 在 Cloud Console 中,转到 Monitoring

    转至 Monitoring

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

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

显示迁移信息中心。

指标名称变化

下表展示了一些不同指标名称的示例。每次使用指标时,您必须使用名称以 kubernetes.io/ 开头的新指标来替换名称以 container.googleapis.com/ 开头的指标。

除了有不同的新前缀,新指标名称还可能在其他方面有所不同。请参阅 kubernetes.io 中所列出的新指标。

指标名称变化
(旧)旧版 Logging 和 Monitoring 指标 (新)Cloud Operations for GKE 指标
旧版 GKE 指标
container.googleapis.com/

示例
  .../container/cpu/utilization
  .../container/uptime
  .../container/memory/bytes_total
Kubernetes Engine Monitoring 指标
kubernetes.io/

示例
  .../container/cpu/request_utilization
  .../container/uptime
  .../node/memory/total_bytes
  .../node/cpu/total_cores

资源组变化

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

自定义图表和信息中心变化

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

对于自定义图表和信息中心,您可以查看 GKE 迁移状态信息中心获得帮助:

  1. 在 Cloud Console 中,选择包含 GKE 集群的 Google Cloud 项目,以更新到 Cloud Operations for GKE:

    转到 Cloud Console

  2. 选择 Monitoring

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

提醒政策变化

如果您定义了提醒政策,并使用了前面的资源类型变化表中显示的任何旧版 Logging 和 Monitoring 资源类型或者前面的指标名称变化表中显示的任何旧版 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"

  k8s-pod/istio_io/rev:
    "default"

  k8s-pod/service_istio_io/canonical-name:
    "currencyservice"

日志示例:

容器资源类型变化:

红色粗体文本突出显示了旧版 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/service_istio_io/canonical-revision": "latest",
    "k8s-pod/security_istio_io/tlsMode": "istio",
    "k8s-pod/app": "currencyservice",
    "k8s-pod/pod-template-hash": "5b69f47d",
    "k8s-pod/istio_io/rev": "default",
    "k8s-pod/service_istio_io/canonical-name": "currencyservice"
  },
  "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 配置进行的更改。

Logging 查询

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

基于日志的指标

如果您定义了自己的基于日志的指标,并使用了前面的指标名称变化资源类型变化表中显示的旧版 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'
日志导出

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

您可以使用以下 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'
日志排除

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

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

日志位置的变化

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

后续步骤