将 Cloud Logging 与 Container-Optimized OS 搭配使用

Container-Optimized OS 包含一个日志记录代理,该代理可将一些 系统日志和容器日志上传到 Cloud Logging直到 Container-Optimized OS 101,使用基于 x86 的 Container-Optimized OS 映像 一个基于 fluentd 的容器化日志记录代理。Container-Optimized OS 105 开始交付替代 Logging 代理实现 fluent-bit。 从 Container-Optimized OS 109 开始,fluent-bit Logging 代理是默认的代理。 旧版日志记录代理 fluentd 将在 Container-Optimized OS 113 中移除。

所有基于 ARM 的 Container-Optimized OS 映像都搭载了 fluent-bit Logging 代理。

启用 Logging 代理

Logging 代理默认处于停用状态。您可以在创建新实例或更新现有实例时启用此功能。

访问权限要求

Cloud Logging 提供了 IAM 角色 您可以用它来授予适当的访问权限。要查看某个项目中的日志, 您必须拥有 roles/logging.viewer 角色,且应用必须拥有相关权限 写入日志。要授予此权限,您可以将 该服务账号的 IAM 角色 roles/logging.logWriter 应用。

如需详细了解权限和角色,请参阅 预定义角色

创建启用了日志记录代理的实例

控制台

在启用了 fluent-bit 日志记录功能的 Container-Optimized OS 上运行 Compute Engine 实例 则执行以下操作:

  1. 在 Google Cloud 控制台上打开 Compute Engine 实例创建页面。

    创建新的 Compute Engine 实例

  2. 为您的实例指定名称

  3. 启动磁盘部分中,选择一个 Container-Optimized OS 映像。

  4. 点击管理、安全、磁盘、网络、单租户以展开其他选项。

  5. 管理标签页下,滚动到元数据部分。添加新的元数据条目,其中google-logging-enabledtrue

  6. (可选)为您的使用场景指定任何其他选项。如需了解详情,请参阅创建和配置实例

  7. 单击创建以创建并启动实例。

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 Logging 代理 将“google-logging-use-fluentbit”值设为“false”。

在项目元数据中启用日志记录代理

里程碑 97 开始, 可以在项目元数据中启用日志记录:

  gcloud compute project-info add-metadata \
    --metadata google-logging-enabled=true

访问日志

控制台

  1. 转到“虚拟机实例”页面。

    转到“虚拟机实例”页面

  2. 点击要访问其日志的 Container-Optimized OS 实例的名称。

  3. 日志部分下,点击 Cloud Logging。

  4. 此操作会打开给定实例的日志浏览器。如需了解详情,请参阅使用日志浏览器

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 服务的日志, 审核日志、日志日志错误等。请参阅 配置来源(x86 映像Arm 映像) 以获取完整的默认日志记录配置。

对于 Container-Optimized OS 105 及更早版本的 x86 映像,Logging 代理为 Google Cloud Observability 的容器化旧版 Logging 代理。用于构建容器的 docker 命令 启动在 Container-Optimized OS 中定义 Logging 代理 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 代理配置兼容性

Logging 代理是一个基于 x86 的基于 fluentd 的容器 Container-Optimized OS 映像和基于 ARM 的 fluent-bit 二进制文件 Container-Optimized OS 映像。这两个代理的配置 兼容。如果您仅依赖于操作系统映像中内置的默认日志记录配置,则不会出现此问题。但是,如果您有 自定义日志记录配置,则在迁移时可能会遇到中断问题 基于其他架构的映像,或基于 较新版本的 Container-Optimized OS。

参考

  • Google Cloud Observability 的旧版 Logging 代理 文档。容器化日志记录代理 Container-Optimized OS 是旧版 Logging 代理的一部分, 因此,本文档可以更笼统地提供有关该代理的背景信息, 不在 Container-Optimized OS 的范围内。
  • Google Cloud Observability 文档。Google Cloud Observability 首页 documentation;可能有助于获取上下文。