Google Kubernetes Engine (GKE) 中的监控和日志记录支持有两个选项。
旧版 Logging 和 Monitoring:如需查看文档,请参阅 旧版 Monitoring 和 旧版 Logging 页面。
Cloud Operations for GKE:如需查看文档,请参阅 Cloud Operations for 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 可为您提供包括以下好处在内的一些重要好处:
具有更多资源类型,以便更好地区分 Kubernetes 资源;具有更多元数据,可用于对指标进行过滤和分组。
通过 SLO Monitoring for GKE 提供面向服务的监控支持。
跨 Cloud Logging 和 Cloud Monitoring 的一致资源模型。
针对所有新 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.label
和labels
字段的名称。例如,字段resource.labels.namespace_id
已更改为resource.labels.namespace_name
,而值未更改。logName 变化:Cloud Operations for GKE 日志条目在其日志名称中使用
stdout
或stderr
,而旧版 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 ,包括具有以下名称的节点级日志:kubelet 、docker 、kube-proxy 、startupscript 和 node-problem-detector 。5 k8s_pod 和 k8s_cluster 节点可能包含旧版 Logging 和 Monitoring 支持中不存在的日志。 |
||||
仅限 Monitoring:
gke_container
(GKE 容器)标签:
container
(GKE 容器)
标签:
|
Monitoring 和 Logging:
k8s_container
(Kubernetes 容器)
标签:
|
|||
仅限 Logging:
gce_instance
(Compute Engine 虚拟机实例)4标签: cluster_name
instance_id
project_id
zone 2
|
Monitoring 和 Logging
k8s_node 4(Kubernetes 节点)标签: cluster_name node_name project_id location 2
|
|||
(无) |
Monitoring 和 Logging:
k8s_pod 5 (Kubernetes Pod)
标签:
|
|||
仅限 Logging
gke_cluster (GKE_cluster)
标签:
|
Monitoring 和 Logging:
k8s_cluster 5(Kubernetes 集群)
标签:
|
我需要做什么?
关于 Cloud Operations for GKE 中的资源模型更改以及这些更改对现有监控和日志记录配置的影响,本部分包含了更多具体信息。
您应该执行以下步骤,将集群迁移到 Cloud Operations for GKE:
确定 Logging 和 Monitoring 配置:确定任何可能使用旧版 Logging 和 Monitoring 与 Cloud Operations for GKE 之间已发生变化的值的 Logging 和 Monitoring 配置。
更新 Logging 和 Monitoring 配置:更新任何 Logging 和 Monitoring 配置,以反映 Cloud Operations for GKE 中的变化。
更新 GKE 集群配置:更新 GKE 集群以使用 Cloud Operations for GKE 设置。
由于旧版 Logging 和 Monitoring 与 Cloud Operations for GKE 之间的资源模型和 logName 已发生变化,因此引用资源模型变化内容的任何 Logging 或 Monitoring 配置也必须更新。迁移可能需要您更新 Logging 和 Monitoring 配置,这些配置包括但不限于:
- 自定义信息中心
- 图表
- 群组过滤器
- 提醒政策
- 日志接收器
- 日志排除项
- Cloud Logging 和 Cloud Monitoring 中基于日志的指标
识别使用旧版 Logging 和 Monitoring 的集群
使用 Cloud Monitoring 的 GKE 集群信息中心确定项目中的哪些集群仍在使用旧版 Logging 和 Monitoring:
- 点击 Cloud Monitoring GKE 集群信息中心。
- 确保所选“指标范围”包含您要查看运行旧版 Logging 和 Monitoring 的集群的 Google Cloud 项目。
查看信息中心内的集群列表。只有使用旧版 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 迁移状态信息中心:
在控制台中,转到 Monitoring:
在 Monitoring 导航窗格中,点击设置,然后选择 Kubernetes 迁移状态 (Kubernetes Migration Status) 标签页。
以下示例信息中心显示需要更新 1 个提醒政策:
更新 Cloud Monitoring 配置
如果集群使用 GKE 1.15 或更高版本并且使用旧版 Monitoring,则它会同时发布到两个数据模型。在这种情况下,有两个配置迁移选项。
克隆配置并更新克隆。使用此选项,您可以创建现有信息中心、提醒政策和组的副本,并将副本迁移到新的资源模型。这样,您就可以继续为同时使用旧数据模型和新数据模型的集群使用 Monitoring。例如,使用此选项,您将有两个信息中心:继续使用原始资源模型的原始信息中心以及使用新资源模型的原始信息中心的克隆。
就地升级受影响的配置。此方法会立即切换到 Cloud Monitoring 中的新数据模型。
对于决定要选择哪个方式,需要考虑的一个因素是您希望提供的监控历史记录量。目前,Cloud Monitoring 会提供 6 周的集群历史数据。在开始对数据模型进行双重写入的 GKE 集群升级后,旧数据模型仍包含集群的历史指标,而新数据模型仅包含在升级时开始的指标。
如果您不需要历史数据,则可以随时将配置就地升级到新数据模型。如果历史数据很重要,则您可以克隆配置并更新克隆,从而使用新的资源模型类型。
或者,您也可以在集群开始向两个数据模型进行双重写入后等待 6 周。6 周后,两个数据模型都具有相同的历史数据,因此您可以就地升级配置并切换到新数据模型。
更新信息中心
要查看信息中心,请完成以下步骤:
从控制台转到 Monitoring:
选择信息中心。
要克隆信息中心并更新克隆,请完成以下步骤:
找到您要克隆的信息中心。
点击复制信息中心 (
),并输入克隆的信息中心的名称。根据需要更新新信息中心的配置。
如需更新信息中心内的图表定义,请完成以下步骤:
点击要修改的图表的更多图表选项 (⋮)。
选择修改以打开修改图表面板。
更改资源类型和指标名称以转换为新数据模型。您还可以根据需要更新过滤条件和分组依据字段。
更新提醒政策
如需查看提醒政策,请完成以下步骤:
从控制台转到 Monitoring:
选择提醒。
如克隆并更新提醒政策,请完成以下步骤:
从政策表格中选择要克隆的政策。
点击复制以开始提醒政策副本的创建流程。
修改引用旧数据模型的任何条件以更新资源类型和指标名称。
该流程的最后一步可让您为克隆的政策输入名称。
如需就地修改提醒政策,请完成以下步骤:
从政策表格中选择要修改的政策。
点击修改以更新该政策。
更新所有引用旧数据模型的条件。
更新群组
您无法通过 Google Cloud Console 克隆群组,因此若要复制群组,必须使用相同的过滤条件创建新群组。
群组过滤条件可以通过多种方式引用旧数据模型。
资源类型 - 群组可以定义过滤条件
resource.type="gke_container"
。由于gke_container
类型可用于引用多种不同类型的 GKE 实体,您必须将过滤条件更新为您想要匹配的资源类型:k8s_container
、k8s_pod
或k8s_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_id
和container_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_name
是docker-daemon
、kubelets
或pods
之一)机器 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_name 是 docker-daemon 、kubelets 或 pods 之一。 这些过滤条件值与新数据模型字段 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_name 是 docker-daemon 、kubelets 或 pods 之一。这些过滤条件值与新数据模型字段 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 日志条目会在其日志名称中使用stdout
或stderr
,而旧版 Logging 和 Monitoring 使用了更多种类的名称,包括容器名称。容器名称仍可用作资源标签。 - 检查日志条目中的
labels
字段。此字段可能包含以前位于metadata
日志条目字段中的信息。 - 检查日志条目中的
resource.labels
字段。新资源类型具有额外的标签值。
(旧)旧版 Logging 和 Monitoring 日志条目 | (新)Cloud Operations for GKE 日志条目 | |||
---|---|---|---|---|
表格脚注: 1 资源标签标识了产生指标的特定资源,例如特定集群和节点。 2 labels 字段出现在作为 Cloud Operations for GKE 一部分的新日志条目中,并且偶尔会出现在一些旧版 Logging 和 Monitoring 日志条目中。在 Cloud Actions for GKE 中,它用于保存以前位于 metadata 日志条目字段中的一些信息。
|
||||
日志条目资源resource.labels (资源标签 1) |
日志条目资源resource.labels (资源标签 1) |
|||
日志条目元数据labels (日志条目标签2)标签(示例) compute.googleapis.com/resource_name:
container.googleapis.com/namespace_name:
container.googleapis.com/pod_name:
container.googleapis.com/stream:
|
日志条目元数据labels 标签(示例) k8s-pod/app:
k8s-pod/pod-template-hash:
|
日志示例:
容器资源类型变化:
红色粗体文本突出显示了旧版 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 中,使用 stdout
和 stderr
日志名称查询容器日志。
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 CLI 命令查找基于日志的指标:
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 CLI 命令更新基于日志的指标。
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\"'
或者,您也可以在 Google Cloud Console 中更新基于日志的指标。
日志导出
如果您导出任何日志,并且您的导出操作使用了前面的资源类型变化表中显示的旧版 Logging 和 Monitoring 资源类型,请将您的导出操作更改为使用相应的 Cloud Operations for GKE 资源类型。 Cloud Operations for GKE 会在日志名称中使用 stdout
或 stderr
,而旧版 Logging 和 Monitoring 使用容器名称。
日志名称更改有两个重要注意事项:
- 对导出目标文件位置和表的更改 - Cloud Operations for GKE 中的日志名称值包括
stdout
或stderr
,而不是容器名称。容器名称仍可用作资源标签。您需要将 Cloud Storage 针对 BigQuery 表的导出或查询中的日志名称处理更改为使用stdout
和stderr
日志名称。 - logName 值 - 日志名称值用于确定 Cloud Storage 中的导出文件结构和 BigQuery 中的表结构。您应该调整 Cloud Storage 文件和 BigQuery 表的使用量,以将 Cloud Storage 中的文件夹结构和 BigQuery 中的表结构考虑在内。
您可以使用以下 Google Cloud CLI 命令查找受影响的 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 CLI 命令更新 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\"'
或者,您也可以在 Google 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
转到项目的 GKE 集群页面。点击以下按钮可转到该页面:
点击要更新的集群以使用 Cloud Operations for GKE。
在标有 Cloud Operations for GKE 的行中,点击修改图标。
在显示的对话框中,确认已选中启用 Cloud Operations for GKE。
在该对话框内的下拉菜单中,选择要收集的日志和指标。Cloud Operations for GKE 的默认(推荐)设置是系统与工作负载日志记录和监控。在此下拉列表中选择除“旧版 Logging 和 Monitoring”以外的任何值会将集群更新为开始使用 Cloud Operations for GKE,而不是使用旧版 Logging 和 Monitoring。
点击保存更改
GCLOUD
运行此命令:
gcloud container clusters update [CLUSTER_NAME] \ --zone=[ZONE] \ --project=[PROJECT_ID] \ --logging=SYSTEM,WORKLOAD \ --monitoring=SYSTEM