管理 GKE 日志

本页面简要介绍 Google Kubernetes Engine (GKE) 中提供的日志记录选项。

概览

为集群启用 Cloud Operations for GKE 与Cloud LoggingCloud Monitoring 的集成后,您的日志将存储在专用的永久性数据存储区中。虽然 GKE 本身可以存储日志,但这些日志不会永久存储。例如,系统会在以下几种情况下移除 GKE 容器日志:当其主机 pod 被移除时;存储日志的磁盘空间不足时;或原有日志被更新的日志替换时。系统会定期移除系统日志,释放空间以供存储新日志。集群事件则会在一小时后删除。

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

  • 容器化进程的标准输出和标准错误日志

  • kubelet 和容器运行时日志

  • 系统组件日志,例如虚拟机启动脚本

对于事件,GKE 使用 kube-system 命名空间中的 Deployment,它会自动收集事件并将其发送到 Logging。

收集哪些日志

默认情况下,GKE 会收集部署到集群的系统和应用工作负载的日志。

  • 系统日志 - 这些日志包括集群的审核日志,包括管理员活动日志、数据访问日志和事件日志。如需详细了解 GKE 审核日志,请参阅 GKE 审核日志文档。某些系统日志以容器形式运行,例如用于 kube-system 的容器,控制应用日志的收集中对这些日志进行了介绍。

  • 应用日志 - Kubernetes 容器收集工作负载的日志,并将其写入 STDOUTSTDERR

收集日志

创建新的 GKE 集群时,默认情况下会启用与 Cloud Logging 和 Cloud Monitoring 集成的 Cloud Operations for GKE。

对于旧版 Cloud Logging,您可以按照相关文档来启用或停用 Logging 集成。

Logging 默认值

启用后,系统会自动部署和管理一个专用代理。它在 GKE 节点上运行,以收集日志,添加有关容器、pod 和集群的有用元数据,然后将日志发送到 Cloud Logging。然后,系统日志和工作负载的应用日志都会传送到 Cloud Logging 中的日志路由器。

从此处,日志被提取到 Cloud Logging 中或被排除日志路由器还提供了一个可选步骤,用于将日志导出到 BigQuery,Pub/Sub 或 Cloud Storage。

仅针对系统日志自定义日志收集

从 GKE 版本 1.15.7 开始,您可以将 Cloud Operations for GKE 配置为仅捕获系统日志,而不收集应用日志。

使用自定义 fluentd 收集日志

GKE 的默认日志记录代理提供了一个代管式解决方案,可用于部署和管理将集群日志发送到 Cloud Logging 的代理。如果您希望更改 fluentd 代理的默认行为,则可以运行自定义 fluentd 代理

常见用例包括:

  • 从日志中移除敏感数据

  • 收集未写入 STDOUT 或 STDERR 的其他日志

收集 GKE 节点的 Linux auditd 日志

您可以在运行 Container-Optimized OS 的 Google Kubernetes Engine 节点上启用详细的操作系统审核日志。节点上的操作系统日志提供有关集群和工作负载的状态的重要信息,例如错误消息、登录尝试和二进制文件执行情况。您可以使用这些信息来调试问题或调查安全突发事件。

如需了解详情,请转到在 GKE 节点上启用 Linux 审核日志

GKE 审核日志

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

Logging 访问权限控制

日志记录访问权限控制涉及两个方面:应用访问权限和用户访问权限。Cloud Logging 提供了可用于授予适当访问权限的 IAM 角色

应用访问权限

应用需要写入日志的权限,该权限通过将 IAM 角色 roles/logging.logWriter 分配给应用的服务帐号来授予。创建 GKE 集群时,默认启用 roles/logging.logWriter 角色。

用户查看权限

您需要具有 roles/logging.viewer 角色才能查看项目中的日志。如果您需要访问数据访问日志,则需要具有 logging.privateLogViewer IAM 权限。

如需详细了解权限和角色,请参阅访问权限控制指南。您还可以查看 Cloud Audit Logs 最佳做法文档,一般情况下,该文档也适用于 Cloud Logging。

用户管理员权限

IAM 角色 roles/logging.configWriterroles/logging.admin 提供管理功能。需要 roles/logging.configWriter IAM 角色才能创建日志记录接收器,日志记录接收器通常用于将日志定向到一个特定或集中的项目。例如,您可能希望结合使用日志记录接收器和日志记录过滤器,将某个命名空间的所有日志定向到一个集中式日志记录存储分区。

如需了解详情,请参阅 Cloud Logging 的访问权限控制指南。

最佳做法

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