Container-Optimized OS 包含一个 Logging 代理,用于将某些系统和容器日志导出到 Cloud Logging。在 Container-Optimized OS 101 之前,基于 x86 的 Container-Optimized OS 映像使用基于 fluentd 的容器化日志记录代理。Container-Optimized OS 105 开始提供备选日志记录代理实现 fluent-bit。从 Container-Optimized OS 109 开始,fluent-bit 日志记录代理是默认的。旧版日志记录代理 fluentd 将在 Container-Optimized OS 113 中移除。
所有版本的基于 Arm 的 Container-Optimized OS 映像都附带 fluent-bit 日志记录代理。
启用日志记录代理
Logging 代理默认处于停用状态。您可以在创建新实例或更新现有实例时启用此功能。
访问权限要求
Cloud Logging 提供了可用于授予适当访问权限的 IAM 角色。如需在项目中查看日志,您必须拥有 roles/logging.viewer
角色,并且应用必须有权写入日志。您可以通过将 IAM 角色 roles/logging.logWriter
分配给应用的服务账号来授予此权限。
如需详细了解权限和角色,请参阅预定义角色。
创建启用了 Logging 代理的实例
控制台
如需在 Container-Optimized OS 上运行启用了 fluent-bit Logging 代理的 Compute Engine 实例,请执行以下操作:
在 Google Cloud 控制台中打开 Compute Engine 实例创建页面。
为您的实例指定名称。
在启动磁盘部分中,选择一个 Container-Optimized OS 映像。
点击管理、安全、磁盘、网络、单租户以展开其他选项。
在管理标签页下,滚动到元数据部分。添加新的元数据条目,其中键为
google-logging-enabled
,值为true
。(可选)为您的使用场景指定任何其他选项。如需了解详情,请参阅创建和配置实例。
单击创建以创建并启动实例。
gcloud
如需在 Container-Optimized OS 上运行启用了 Logging 代理的 Compute Engine 实例,请使用 gcloud compute instances create
命令,并在元数据中添加 google-logging-enabled=true
。例如:
gcloud compute instances create instance-name \ --image image-name \ --image-project cos-cloud \ --zone compute-zone \ --metadata google-logging-enabled=true
请替换以下内容:
- instance-name:虚拟机实例的名称。
- image-name:实例的 Container-Optimized OS 映像的名称。例如
--image=cos-113-18244-85-29
。 - compute-zone:您的实例的计算区域。
如需详细了解 gcloud
命令,请参阅 gcloud compute instances create 参考文档。如需详细了解如何创建 Container-Optimized OS 实例,请参阅创建和配置实例。
选择日志记录代理
基于 x86 的 Container-Optimized OS 105 和 109 映像提供两个日志记录代理实现:fluentd(旧版)和 fluent-bit。Container-Optimized OS 105 默认使用 fluentd,Container-Optimized OS 109 默认使用 fluent-bit。您可以使用 google-logging-use-fluentbit
元数据条目更改默认行为。
如需在 Container-Optimized OS 105 上使用 fluent-bit 日志记录代理,请将 google-logging-use-fluentbit
值设置为 true
。
如需在 Container-Optimized OS 109 上使用 fluentd 日志记录代理,请将 google-logging-use-fluentbit
值设置为 false
。
在项目元数据中启用日志记录代理
从里程碑 97 开始,您可以在项目元数据中启用日志记录:
gcloud compute project-info add-metadata \
--metadata google-logging-enabled=true
访问日志
控制台
转到“虚拟机实例”页面。
点击要访问其日志的 Container-Optimized OS 实例的名称。
在日志部分下,点击 Cloud Logging。
此操作会打开给定实例的日志浏览器。如需了解详情,请参阅使用日志浏览器。
gcloud
如需访问日志,请使用 gcloud logging read
命令。例如:
gcloud logging read \ "resource.type=gce_instance AND resource.labels.instance_id=instance-id" \ --limit 10 \ --format json \ --freshness 30d
请替换以下内容:
- instance-id:您的虚拟机实例的 ID。
此命令尝试使用 instance-id 从虚拟机实例读取最近 30 天的 JSON 格式日志,最多 10 条。
如需详细了解 gcloud
命令,请参阅 gcloud logging read 参考文档。
工作原理
Logging 代理默认配置为将日志从某些系统关键服务和用户应用容器发送到 Cloud Logging 后端。例如,来自 Docker 容器和所选 systemd 服务的日志、审核日志、日志错误等。如需了解完整的默认日志记录配置,请参阅 Container-Optimized OS 特定的配置来源(x86 映像和 Arm 映像)。
对于 Container-Optimized OS 105 及更低版本的 x86 映像,日志记录代理是 Google Cloud Observability 的容器化旧版 Logging 代理。启动 Logging 代理的 Docker 命令在 Container-Optimized OS stackdriver-logging systemd 服务的来源中定义。正在运行的容器化代理版本在 Container-Optimized OS 来源 app-admin/stackdriver 目录中定义。
对于所有版本的 Arm 映像和 Container-Optimized OS 109 及更高版本的 x86 映像,日志记录代理是一个名为 fluent-bit 的内置操作系统软件包。该代理内置在操作系统中,并会随操作系统映像一起更新。
已知限制
与 gcplogs
驱动程序的兼容性
从里程碑 89 开始,如果启用了 Container-Optimized OS 附带的 Logging 代理并且为一个或多个容器启用了 Docker gcplogs
日志记录驱动程序,附带的 Logging 代理可能会输出大量警告日志记录。这可能会导致日志噪声和/或增加 Cloud Logging 相关费用。
解决方法是不使用 gcplogs
作为 Docker 日志记录驱动程序,而是使用 Container-Optimized OS 配置的默认驱动程序。请注意,Container-Optimized OS 附带的 Logging 代理会将容器日志导出到 Cloud Logging,因此不需要同时使用这两种解决方案。
Logging 代理配置兼容性
日志记录代理是基于 x86 的 Container-Optimized OS 映像上的基于 fluentd 的容器,是基于 Arm 的 Container-Optimized OS 映像上的 fluent-bit 二进制文件。两个代理的配置不兼容。如果您仅依赖于操作系统映像中内置的默认日志记录配置,则这不是问题。不过,如果您使用的是自定义日志记录配置,则在将工作负载迁移到基于其他架构的映像或较新版本的 Container-Optimized OS 时,可能会遇到问题。
参考
- Google Cloud Observability 的旧版 Logging 代理文档。Container-Optimized OS 附带的容器化日志记录代理是旧版 Logging 代理的一部分,因此本文档可能会在 Container-Optimized OS 的范围之外更广泛地提供有关该代理的背景信息。
- Google Cloud Observability 文档。Google Cloud Observability 文档首页;可能对了解背景信息有用。