您应该使用哪个:Logging 代理还是客户端库?

本文档提供的信息可帮助您确定 使用命令行以编程方式将应用日志发送到 Cloud Logging 客户端库或使用 Logging 代理。Logging 代理会发送写入文件的数据,如 stdout 或文件,作为日志保存到 Cloud Logging。此类服务包括 Google Kubernetes Engine、App Engine 柔性环境和 Cloud Functions 包含 Logging 代理。对于 Compute Engine,您可以安装 Ops Agent 或旧版 Cloud Logging 代理。 这些代理会从已知的文件位置或日志记录收集日志 服务,例如 Windows Event Logjournaldsyslogd

当您无法使用客户端库或 Logging 代理时,或者 只需要实验,可以使用 gcloud logging write 命令或向 Cloud Logging API 端点发送 HTTP 命令 entries.write. Cloud Logging API 同时支持 HTTP 和 gRPC 调用。Ops Agent 和大多数 Logging 客户端 会调用 gRPC Logging API。旧版 Logging 代理和某些语言的客户端库会调用 REST Logging API。

选择代理或客户端库

在代理或客户端库之间做出决定时,请考虑以下问题:

您的应用是否在 Google Cloud 之外运行?

如果您的应用未在 Google Cloud 上运行,您需要 以某种方式将日志发送到 Logging API。将日志从 从本地系统复制到 Logging,我们建议您使用 BindPlane by observIQ 列。 如需详细了解 BindPlane,请参阅 observIQ 和 BindPlane 简介

或者,您也可以直接从命令行将日志路由到 Logging, 使用客户端库对应用进行相应操作对于临时环境 因此您必须使用客户端库 对 Logging API 的调用。

运行应用的 Google Cloud 服务是否支持
stdoutstderr 内容写入您的项目?

有些 Google Cloud 服务是全代管式服务,因此您不需要 使用代理将日志发送到您的 Google Cloud 项目。您可以使用任意 Google Cloud 中 您选择的语言(如 Go、Node.js 和 Python)来将日志发送到 登录支持 stdoutstderr 的产品 默认情况。依赖 stdoutstderr 的优势 而不是使用客户端库,那就是应用崩溃不会造成 向您的项目发送日志。有关如何发送 结构化日志(通过 stdoutstderr,请参阅您的应用是否可以灵活地 要更改日志格式吗?

您可以使用 Logging 客户端库,但请注意,这可能会在 Logging 中引入用于本地测试的依赖项(您不一定需要它时)。使用客户端库可能还需要使用更复杂的编码来明确处理缓冲和重试。此外,每次使用 Logging 客户端库都会创建指向 API 的新连接流。这些新连接会增加复杂性,使用其他端口,并且仅使用应用中的日志发送单独的请求,如果没有太多日志,这可能会造成浪费。

是否需要能够在本地环境中访问应用日志?

如果您需要在本地环境中访问应用日志, 那么您可以使用一些日志记录模块 输出到 stdoutstderr。Logging 客户端 某些语言的库支持将日志路由到 stdoutstderr

在不支持的 Google Cloud 服务中运行应用时 自动将写入 stdoutstderr 的日志发送到您的 您可以收集 stdoutstderr 日志会记录在磁盘文件中,并将代理配置为 抓取它们并发送到 Logging。如需更多信息 请参阅 Ops Agent 的配置指南 或旧版 Logging 代理

代理安装过程是手动还是自动的?

某些服务会自动安装代理,或允许您自行安装代理 。如果您使用的服务不允许您安装代理, 那么您必须使用客户端库才能使用 Logging。

您是否已在系统中运行 Fluentd?

旧版 Logging 代理基于 Fluentd。

如果您已在系统中运行 Fluentd,并希望 使用该守护程序将日志发送到 Logging,然后使用 适用于 Google Cloud Logging 的 fluentd

您是否还收集 Cloud Monitoring 的应用指标?

在 Compute Engine 虚拟机中,Ops Agent 可以收集日志和大多数指标。请参阅 Ops Agent 特性

如果 Ops Agent 无法解决您的用例,您可以使用 旧版 Monitoring 代理监控客户端库 来收集指标

您的应用是否能够灵活地更改日志格式?

这个问题有助于您确定自己的应用能否生成 结构化日志。 如果您将结构化日志发送到 采用结构化日志记录格式的 Logging API。 客户端库提供了处理此格式的方法。

写入结构化日志的方法有两种:一种方法是LogEntry 信封中设置特定自动字段,另一种方法是LogEntry 信封中设置 jsonPayload 字段。前者的架构由 Cloud Logging 决定,而后者的架构由用户决定。

您必须配置代理才能识别结构化日志。 默认情况下,代理配置为检测 JSON 格式的日志,并 以结构化日志的形式处理它们。如果您的应用有自己的日志格式 您无法更改,但希望系统将日志识别为 那么必须以结构化日志记录格式(通常是 JSON 转换为 stdoutstderr,以便代理可以将它们识别为 结构化日志否则,您必须配置代理才能理解您的 自己的格式

各个选项的摘要

日志记录模式图

  • Cloud Logging 客户端库

    • 优势

      • 您可以将日志直接路由到 Cloud Logging API。
      • 某些语言可以使用stdoutstderr 库。
    • 缺点

      • 应用崩溃会中断向 Google Cloud 项目发送日志的过程。
  • Ops Agent

    • 优点
      • Ops Agent 可以使用 稳定的开源技术:Fluent Bit(用于日志收集)和 用于收集指标的 OpenTelemetry 收集器。
      • 您可以从许多常见来源中收集日志和指标 应用;请参阅监控和收集第三方日志 应用
      • 您可以在本地环境中保留日志。
      • 您或许可以从应用崩溃中恢复日志。
      • Ops Agent 正在积极开发中。
  • 旧版 Logging 代理

    • 优点
      • 该代理使用 Fluentd 收集日志。
      • 您可以在本地环境中保留日志。
      • 您或许可以从应用崩溃中恢复日志。
    • 缺点
      • 代理目前受支持,但未处于积极开发阶段。
  • 自动将 stdoutstderr 日志发送到您的 Google Cloud 项目

    • 优点
      • 此过程是将日志发送到本地环境的常用方法。
      • 您可以使用任意日志记录库。
      • 您或许可以从应用崩溃中恢复日志。
    • 缺点
      • 并非所有环境都会自动将日志路由到 Logging。