本文档介绍 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
资源类型。其中包括来自在工作器节点上运行的关键系统组件(例如 kubelet
和 containerd
)的日志。
系统应用日志
系统应用日志属于 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_NAME 的 cilium-agent
容器的日志:
resource.type="k8s_container"
resource.labels.cluster_name="awsClusters/CLUSTER_NAME"
resource.labels.container_name="cilium-agent"