Cloud Logging

本页面介绍如何使用 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

启用 Logging

您可以创建启用了 Logging 的集群,也可以在现有集群中启用 Logging。

创建启用了 Logging 的集群

gcloud

创建集群时,系统会自动设置 --enable-cloud-logging 标志,从而在集群中启用 Logging。

要停用此默认行为,请设置 --no-enable-cloud-logging 标志。

控制台

  1. 在 Cloud Console 中,转到 Kubernetes Engine > Kubernetes 集群页面:

    转到“Kubernetes 集群”

  2. 点击创建集群

  3. 根据需要配置集群。

  4. 点击高级选项。在其他功能部分中,启用启用 Stackdriver Logging 服务

  5. 点击创建

为现有集群启用 Logging

gcloud

要为现有集群启用 Logging,请运行以下命令,其中 [CLUSTER_NAME] 是集群的名称。

gcloud container clusters update [CLUSTER_NAME] --logging-service logging.googleapis.com

控制台

  1. 在 Cloud Console 中,转到 Kubernetes Engine > Kubernetes 集群页面:

    转到“Kubernetes 集群”

  2. 点击修改

  3. Stackdriver Logging 下拉值设置为已启用

  4. 点击保存

查看日志

您可以在 Google Cloud Console 的 Stackdriver 日志查看器中查看日志。

要了解如何查看日志,包括如何构建基本查询和高级查询,请参阅 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

控制台

  1. 在 Cloud Console 中,转到 Kubernetes Engine > Kubernetes 集群页面:

    转到“Kubernetes 集群”

  2. 点击您要更改的集群对应的修改

  3. Stackdriver Logging 下拉值设置为已停用

  4. 点击保存

后续步骤