本页面介绍如何使用 Cloud Logging 从 Google Kubernetes Engine (GKE) 集群收集和查询日志。
概览
在集群中启用 Logging 后,您的日志将存储在专用的永久性数据存储区中。您的 Google Cloud 项目有多个与 GKE 集群相关的日志。包括管理员活动日志、数据访问日志和事件日志。
日志是日志条目的集合,每个日志条目适用于某种类型的资源。以下是与 GKE 集群最相关的资源类型:
资源类型 | 显示名 |
---|---|
k8s_cluster | Kubernetes 集群 |
gke_cluster | GKE 集群操作 |
gke_container | GKE 容器 |
gke_nodepool | GKE 节点池操作 |
如需详细了解适用于 Kubernetes 集群和 GKE 集群操作资源类型的日志条目,请参阅审核日志记录。
虽然 GKE 本身可以存储日志,但这些日志不会永久存储。例如,系统会在以下几种情况下移除 GKE 容器日志:当其主机 Pod 被移除时;存储日志的磁盘空间不足时;或原有日志被更新的日志替换时。系统会定期移除系统日志,释放空间以供存储新日志。集群事件则会在一小时后删除。
对于容器和系统日志,GKE 部署针对每个节点的日志记录代理,该代理读取容器日志,添加有用的元数据,然后存储这些信息。 日志记录代理检查以下来源中的容器日志:
- 容器化进程的标准输出和标准错误日志
kubelet
和容器运行时日志- 系统组件日志,例如虚拟机启动脚本
对于事件,GKE 使用 kube-system
命名空间中的部署,该部署会自动收集事件并将其发送到 Logging。
Logging 与 JSON 格式兼容。日志最多可存储 30 天。
准备工作
请执行以下步骤为此任务做好准备:
- 确保您已启用 Google Kubernetes Engine API。 启用 Google Kubernetes Engine API
- 确保您已安装 Cloud SDK。
- 设置默认项目 ID:
gcloud config set project [PROJECT_ID]
- 如果您使用的是地区级集群,请设置默认计算地区:
gcloud config set compute/zone [COMPUTE_ZONE]
- 如果您使用的是区域级集群,请设置默认计算区域:
gcloud config set compute/region [COMPUTE_REGION]
- 将
gcloud
更新到最新版本:gcloud components update
- 按照 Cloud Logging 快速入门进行操作。
启用 Logging
您可以创建启用了 Logging 的集群,也可以在现有集群中启用 Logging。
创建启用了 Logging 的集群
gcloud
创建集群时,系统会自动设置 --enable-cloud-logging
标志,从而在集群中启用 Logging。
要停用此默认行为,请设置 --no-enable-cloud-logging
标志。
控制台
在 Google Cloud 控制台中,转到 Kubernetes Engine > Kubernetes 集群页面:
点击创建集群。
根据需要配置集群。
点击高级选项。在其他功能部分中,启用启用 Stackdriver Logging 服务。
点击创建。
为现有集群启用 Logging
gcloud
要为现有集群启用 Logging,请运行以下命令,其中 [CLUSTER_NAME] 是集群的名称。
gcloud container clusters update [CLUSTER_NAME] --logging-service logging.googleapis.com
控制台
在 Google Cloud 控制台中,转到 Kubernetes Engine > Kubernetes 集群页面:
点击修改edit。
将 Stackdriver Logging 下拉值设置为已启用。
点击保存。
查看日志
您可以在 Google Cloud 控制台的日志浏览器中查看日志。
要了解如何查看日志,包括如何构建基本查询和高级查询,请参阅 Logging 文档中的查看日志。
示例查询
来自标记为
nginx-deployment
的 Pod 的查询日志:resource.type="container" resource.labels.pod_id:"nginx-deployment-"
prod
命名空间中严重性为WARNING
或更高的查询日志:resource.type="container" resource.labels.namespace_id="prod" severity>WARNING
如需详细了解严重性级别,请参阅
Log Severity
。来自含文本载荷的特定 Pod
my-pod
中的特定容器my-container
的查询日志:resource.type="container" resource.labels.container_name="my_container" resource.labels.pod_id="my_pod" textPayload:"abracadabra"
限制
系统可能无法正确处理多行条目(带换行符的条目)。要避免此问题,请将日志封装在单行 JSON 字符串中。
停用日志记录功能
gcloud
要为现有集群停用旧版 Logging 和 Monitoring,请运行以下命令,其中 [CLUSTER_NAME]
是集群的名称。
gcloud beta container clusters update [CLUSTER_NAME] --logging-service none
如果您在集群中运行 Cloud Operations for GKE,则必须停用监控和日志记录,方法是使用 gcloud beta
在集群中设置以下标志:
gcloud beta container clusters update [CLUSTER_NAME] --logging-service none --monitoring-service none
控制台
在 Google Cloud 控制台中,转到 Kubernetes Engine > Kubernetes 集群页面:
点击您要更改的集群对应的修改edit。
将 Stackdriver Logging 下拉值设置为已停用。
点击保存。
后续步骤
- 要详细了解 Google Cloud 的运维套件的费用,请参阅价格。
- 如需了解 Cloud Logging,请参阅 Cloud Logging 文档。
- 要了解 Google Cloud 的运维套件的资源和服务,请参阅受监控的资源和服务。