Cloud Logging

本文档介绍 GKE on AWS 如何与 Cloud Logging 集成,以及如何访问日志。

概览

GKE on AWS 支持将 Cloud Logging 用于工作负载以及在控制平面和节点池节点上运行的系统组件。

GKE on AWS 包含一个基于 Fluentbit 的日志记录代理。在控制层面节点上,日志记录代理作为系统组件运行:在节点池节点上,它作为 Daemonset 运行。 正如 Cloud Logging 文档所述,您可以像处理任何其他指标和日志数据一样,管理和删除日志记录代理收集的数据。

收集哪些数据

GKE on AWS 会记录以下信息:

  • 每个控制层面副本上系统组件的日志。
  • 每个节点池节点上系统服务的日志。
  • (可选)工作负载的日志

启用工作负载日志记录

如需启用工作负载日志记录,您必须创建新的 Kubernetes 集群(1.22 版或更高版本)。

在您创建集群时,GKE on AWS 默认会启用系统日志记录。如需启用工作负载日志记录,您必须使用 --logging 标志创建集群。您可以选择为系统组件和/或工作负载启用日志记录。

例如,如需在新集群上同时启用系统日志记录和工作负载日志记录,请按照说明创建集群,但需要在 gcloud 命令中添加 --logging 标志:

gcloud container aws clusters create CLUSTER_NAME
...
--logging=SYSTEM,WORKLOAD

更新现有集群

gcloud container aws clusters update CLUSTER_NAME
...
--logging=SYSTEM,WORKLOAD

访问日志

您可以通过多种方式在 Cloud Logging 中访问 GKE on AWS 日志:

  • 日志浏览器 - 您可以使用日志过滤条件选择 Kubernetes 资源(例如集群),直接从日志浏览器中查看日志节点、命名空间、pod 或容器日志。

  • Google Cloud CLI - 使用 gcloud logging read 命令,选择适当的集群、节点、pod 和容器日志。

了解日志

Cloud Logging 中的日志是日志条目的集合,每个日志条目适用于特定类型的日志记录资源

资源类型

以下是 GKE on AWS 特有的资源类型:

资源类型 显示名
k8s_control_plane_component 控制层面组件日志
k8s_node 节点池日志
k8s_container 工作负载容器日志

当 GKE on AWS 写入集群的日志时,每个日志条目都包含资源类型。通过了解日志的显示位置,您可以在需要时更轻松地查找日志。

控制层面日志

控制层面日志使用 k8s_control_plane_component 资源类型。其中包括在控制层面副本上运行的系统组件(例如 kube-apiserver)的日志。

节点日志

节点日志属于 k8s_node 资源类型。其中包括来自在工作器节点上运行的关键系统组件(例如 kubeletcontainerd)的日志。

系统应用日志

系统应用日志属于 k8s_container 资源类型。这些日志包括来自 GKE on AWS 安装在工作器节点上的 pod 的日志。具体而言,包括在以下命名空间中运行的容器:

  • kube-system
  • gke-connect
  • gke-system
  • gmp-system
  • asm-user-auth
  • cnrm-system
  • config-management-system
  • gatekeeper-system
  • gmp-public
  • istio-system
  • knative-serving

在 Cloud Logging 界面中查找日志

您可以使用 Cloud Logging 界面中的日志浏览器查看日志。

日志浏览器

使用查询构建器,您可以手动添加查询参数来构建查询。例如,如果要浏览系统工作负载的日志,可以先选择或搜索 k8s_container 资源类型,然后选择位置和集群名称。然后,您可以通过过滤容器或 Pod 名称来优化搜索。

日志浏览器提供了另一种使用日志字段浏览器构建搜索查询的方法。它会显示给定日志字段的日志条目数量(按递减顺序排序)。使用日志字段浏览器对 GKE on AWS 日志特别有用,因为它提供了一种为资源选择 Kubernetes 值的简单方法。例如,您可以选择特定集群、命名空间、Pod 名称和容器名称的日志。

如需了解详情,请参阅使用日志浏览器

查询示例

本部分包含您可以在日志浏览器中执行的示例查询。

示例 1:获取 AWS 集群 CLUSTER_NAME 的控制平面节点上 kube-apiserver 的日志:

resource.type="k8s_control_plane_component"
resource.labels.cluster_name="awsClusters/CLUSTER_NAME"
resource.labels.component_name="apiserver"

示例 2:获取 AWS 集群 CLUSTER_NAME 的工作器节点上 kubelet 的日志:

resource.type="k8s_node"
resource.labels.cluster_name="awsClusters/CLUSTER_NAME"
log_name="projects/PROJECT_ID/logs/kubelet"

示例 3:获取 AWS 集群 CLUSTER_NAMEcilium-agent 容器的日志:

resource.type="k8s_container"
resource.labels.cluster_name="awsClusters/CLUSTER_NAME"
resource.labels.container_name="cilium-agent"

后续步骤