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

使用集合让一切井井有条 根据您的偏好保存内容并对其进行分类。

Container-Optimized OS 包含一个 Logging 代理,该代理可将某些系统和容器日志导出到 Cloud Logging。对于基于 x86 的 Container-Optimized OS 映像,该代理是 Google Cloud 的运维套件的容器化旧版 Logging 代理。对于基于 ARM 的 Container-Optimized OS 映像,该代理是一个名为 lubit-bit 的原生操作系统软件包。本文档重点介绍如何在 Container-Optimized OS 上使用 Logging 代理以及如何访问日志。

启用日志记录代理

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

创建启用了 Logging 代理的实例

控制台

要在 Container-Optimized OS 上运行启用了 Logging 代理的 Compute Engine 实例,请执行以下操作:

  1. 在 Google Cloud Console 上打开 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-family cos-stable \
    --image-project cos-cloud \
    --zone compute-zone \
    --metadata google-logging-enabled=true

请替换以下内容:

  • instance-name:虚拟机实例的名称。
  • compute-zone:您的实例的计算可用区

如需详细了解 gcloud 命令,请参阅 gcloud compute instances create 参考文档。如需详细了解如何创建 Container-Optimized OS 实例,请参阅创建和配置实例

更新现有实例以启用或停用日志记录代理

控制台

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

    转到“虚拟机实例”页面

  2. 点击要更新的 Container-Optimized OS 实例的名称。

  3. 点击虚拟机实例详情顶栏中的“修改”。

  4. 自定义元数据部分下,添加新的元数据条目,其中google-logging-enabledtrue(启用)或 false(停用)。

  5. 点击保存

gcloud

如需在现有实例上启用或停用 Logging 代理,请使用 gcloud compute instances add-metadata 命令:

gcloud compute instances add-metadata instance-name \
    --zone compute-zone \
    --metadata google-logging-enabled=enabled-value

请替换以下内容:

  • enabled-valuetrue(启用)、false(停用)。
  • instance-name:虚拟机实例的名称。
  • compute-zone:您的实例的计算可用区

在项目元数据中启用 Logging 代理

里程碑 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 服务、审核日志、日志日志错误等的日志。如需查看完整的默认日志记录配置,请参阅 Container-Optimized OS 专用配置源(x86 映像Arm 映像)。

对于 x86 映像,日志记录代理是 Google Cloud 的运维套件的容器化旧版 Logging 代理。用于启动日志记录代理的 Docker 命令在 Container-Optimized OS 的 stackdriver-logging systemd 服务源代码中定义。正在运行的容器化代理的版本在 Container-Optimized OS 源 app-admin/stackdriver 目录中定义。

对于 Arm 映像,日志记录代理是一个称为 自适应位的原生操作系统软件包。此代理内置在操作系统中,会随操作系统映像一起更新。

已知限制

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 的 Container-Optimized OS 映像上的流利容器,也是基于 ARM 的 Container-Optimized OS 映像的流畅位二进制文件。这两个代理的配置不兼容。如果您只依赖于操作系统映像中内置的默认日志记录配置,那么这不会成为问题。但是,如果您有自定义日志记录配置,则在将工作负载迁移到基于其他架构的映像时,您可能会遇到中断。

引用

  • Google Cloud 的运维套件的旧版 Logging 代理文档。Container-Optimized OS 附带的容器化日志记录代理是旧版 Logging 代理的子集,因此本文档可能会从总体上提供关于代理的上下文信息,不涵盖 Container-Optimized OS 的范围。
  • Google Cloud 的运维套件文档。Google Cloud 的运维套件文档的首页;对于上下文来说可能很有用。