插桩和可观测性

插桩是指生成或收集有关应用运行时行为的数据的特定代码。在应用内部,插桩(例如 OpenTelemetry 提供的插桩)可以收集有关语言运行时、框架或应用逻辑的领域特定信息,然后将该数据发送到 Google Cloud 项目或其他目标位置。这些数据(也称为遥测数据)包括指标日志跟踪记录

系统级指标(如 CPU 使用率、内存用量和磁盘使用率)对于检测应用的问题非常有用,但它们无法提供关于应用级问题的详细分析洞见。插桩可帮助您的应用生成诊断问题的根本原因所需的数据,因为生成的遥测数据会显示应用中发生的情况。例如,日志通常包含程序的上下文(例如具体的错误消息或堆栈轨迹)以及源代码中的位置。同样,分布式跟踪记录可帮助您了解多项服务在处理请求时的交互方式。利用指标,您可以在应用无法正常运行时接收通知。

对应用进行插桩处理涉及生成遥测数据,并将其发送到可以存储和查询数据的位置。例如,您的插桩可能会将遥测发送到 Google Cloud 项目。Google Cloud Observability 中的服务可帮助您收集、分析和关联遥测数据。它们还提供了内置默认设置,可帮助您更快地开始使用,例如默认信息中心和提醒政策。 如需详细了解 Google Cloud Observability,请参阅 Google Cloud 中的可观测性

下图说明了应用如何使用插桩生成遥测数据并将其发送到存储系统:

说明进行中插桩架构的示意图。

如上图所示,插桩代码存在于应用进程中,并与应用交互以生成遥测数据。然后,插桩框架会将遥测数据导出到配置的存储系统。在该图中,存储系统是您的 Google Cloud 项目。

与供应商无关的插桩框架简介

即使您打算仅将遥测数据发送到 Google Cloud,我们也建议您使用与供应商无关的开源插桩框架来对应用进行插桩处理。这些类型的框架具有一些主要优势:

不存在供应商锁定
与供应商无关的框架不依赖于任何特定的供应商,它们为生成的遥测提供自己的数据模型。因此,您可以将数据发送给多个供应商,并且通常无需修改代码即可更改您使用的供应商。
收集遥测数据的标准化程序
精心设计的框架(例如 OpenTelemetry)提供了一种从应用收集遥测数据的标准化方法。您可以对使用受支持语言编写的应用使用相同的框架。由于框架是标准化的,因此您可以收集和比较所有服务的遥测数据。
互操作库
插桩框架包含一个丰富的库生态系统,用于收集遥测信号,并且这些库具有互操作性。例如,OpenTelemetry 提供了用于收集跟踪记录数据和收集指标数据的库。您可以使用其中一个库,也可以同时使用两个库。

一般建议

本部分包含有关如何对应用进行插桩处理的一般建议。如需获取特定于 Google Cloud 的指导,请参阅选择插桩方法

如需收集指标,我们建议您使用 OpenTelemetryPrometheus

  • OpenTelemetry 是一个开源项目,用于为应用插桩提供统一框架。它还为常用库提供了插桩库。 OpenTelemetry 提供了一个独立代理,即 OpenTelemetry 收集器,它可以接收、转换和导出遥测数据。OpenTelemetry 收集器配置文件决定了 OpenTelemetry 收集器的行为。如需将遥测数据发送到代理或直接发送到存储系统,请使用 OpenTelemetry 协议 (OTLP)

  • Prometheus 是一种常用的开源监控系统。您可以使用 Prometheus 客户端库从应用生成指标,并且有一个第三方生态系统,其中包含适用于常用框架的插桩库。Prometheus 客户端将其指标公开为可由代理爬取的 HTTP 端点。

如需收集跟踪记录,我们建议您使用 OpenTelemetry

如需收集日志,我们建议您使用可以配置为输出 Cloud Logging 的 JSON 结构化日志的框架。对于写入日志数据,我们给出以下建议:

Google Cloud 解决方案

Google Cloud Observability 为收集遥测数据提供了灵活的选项:

后续步骤

如需详细了解 Google Cloud Observability,请参阅 Google Cloud 中的可观测性