Stackdriver Logging

本页面介绍如何使用 Stackdriver Logging 收集和查询 Google Kubernetes Engine (GKE) 集群的日志。

概览

在集群中启用 Logging 后,您的日志将存储在专用的永久性数据存储区中。您的 GCP 项目拥有多个与 GKE 集群相关的日志,包括管理员活动日志、数据访问日志和事件日志。

日志是日志条目的集合,每个日志条目适用于某种类型的资源。以下是与 GKE 集群最相关的资源类型:

资源类型 显示名
k8s_cluster Kubernetes 集群
gke_cluster GKE 集群操作
gke_container GKE 容器
gke_nodepool GKE 节点池操作

如需详细了解适用于 Kubernetes 集群和 GKE 集群操作资源类型的日志条目,请参阅审核日志

虽然 GKE 本身可以存储日志,但这些日志不会永久存储。例如,系统会在以下几种情况下移除 GKE 容器日志:当其主机 Pod 被移除时;存储日志的磁盘空间不足时;或原有日志被更新的日志替换时。系统会定期移除系统日志,释放空间以供存储新日志。集群事件则会在一小时后删除。

对于容器和系统日志,GKE 部署针对每个节点的日志记录代理,该代理读取容器日志,添加有用的元数据,然后存储这些信息。日志记录代理检查以下来源中的容器日志:

  • 容器化进程的标准输出和标准错误日志
  • kubelet 和容器运行时日志
  • 系统组件日志,例如虚拟机启动脚本

对于事件,GKE 使用 kube-system 命名空间中的 Deployment,它会自动收集事件并将其发送到 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 标志。

Console

  1. 访问 GCP Console 中的 Kubernetes Engine 菜单。

    访问 Kubernetes Engine 菜单

  2. 点击创建集群

  3. 根据需要配置集群。

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

  5. 点击创建

为现有集群启用 Logging

gcloud

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

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

Console

  1. 访问 GCP Console 中的 Kubernetes Engine 菜单。

    访问 Kubernetes Engine 菜单

  2. 点击集群的“修改”按钮(铅笔图案)。

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

  4. 点击保存

查看日志

您可以在 Google Cloud Platform 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

使用文本负载在特定容器 my-container 的特定 Pod my-pod 中查询日志:

resource.type="container"
resource.labels.container_name="my_container"
resource.labels.pod_id="my_pod"
textPayload:"abracadabra"

限制

系统可能无法正确处理多行条目(带换行符的条目)。要避免此问题,请将日志封装在单行 JSON 字符串中。

最佳做法

  • 结构化日志记录:写入标准输出或标准错误的单行 JSON 字符串将作为结构化日志条目读入 Stackdriver。如需了解详情,请参阅结构化日志记录。您可以使用高级日志过滤条件根据日志的字段过滤日志。
  • 严重性:默认情况下,写入标准输出的日志属于 INFO 级别,写入标准错误的日志属于 ERROR 级别。结构化日志可以包含 severity 字段,该字段定义日志的严重性。
  • 导出到 BigQuery:您可以将日志导出到外部服务(例如 BigQuery 或 Cloud Pub/Sub),以进行其他分析。导出到 BigQuery 的日志会保留其格式和结构。如需了解详情,请参阅日志导出概览
  • 提醒:当 Logging 记录意外行为时,您可以使用基于日志的指标来设置提醒政策。如需查看示例,请参阅创建关于计数器指标的简单提醒政策。如需详细了解基于日志的指标,请参阅基于日志的指标概览
  • 错误报告:您可以使用 Stackdriver Error Reporting 收集集群中产生的错误。

停用日志记录功能

gcloud

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

gcloud container clusters update [CLUSTER_NAME] --logging-service none

如果您在集群中运行 Stackdriver Kubernetes Engine Monitoring,则必须停用监控和日志记录,方法是使用 gcloud beta 在集群中设置以下标志:

gcloud beta container clusters update [CLUSTER_NAME] --logging-service none --monitoring-service none

Console

  1. 访问 GCP Console 中的 Kubernetes Engine 菜单。

    访问 Kubernetes Engine 菜单

  2. 点击要更改的集群对应的修改按钮(铅笔图案)。

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

  4. 点击保存

后续步骤

此页内容是否有用?请给出您的反馈和评价:

发送以下问题的反馈:

此网页
Stackdriver Monitoring
需要帮助?请访问我们的支持页面