适用于 GKE 的托管式 OpenTelemetry

本文档介绍了适用于 Google Kubernetes Engine (GKE) 的 Managed OpenTelemetry,借助该功能,您可以将 OpenTelemetry 协议 (OTLP) 跟踪记录、指标和日志从 GKE 上运行的应用发送到 Google Cloud Observability。Managed OpenTelemetry 是 Google Cloud 提供的唯一用于在 GKE 上收集跟踪记录数据的托管式解决方案。

如需使用适用于 Google Kubernetes Engine (GKE) 的受管 OpenTelemetry,应用需要已进行插桩,以便使用 OpenTelemetry 协议生成信号。如需了解详情,请参阅支持的工作负载

GKE 的受管 OpenTelemetry 有两个组件:

  • 受管理的收集:受管理的收集器提供集群内 OpenTelemetry 协议端点,作为工作负载以 OTLP 格式发送跟踪记录、指标和日志的目标,而无需管理收集器。
  • 自动配置:借助名为 Instrumentation自定义资源,您可以为 GKE 工作负载启用自动配置,以生成和注入相关联的 OpenTelemetry 跟踪记录、指标和日志。此方法支持智能体开发套件 (ADK)

    对于使用 OpenTelemetry SDK 且配置了标准 OpenTelemetry 环境变量的工作负载,您可以使用 Instrumentation 自定义资源。此 Instrumentation 自定义资源 instrumentations.telemetry.googleapis.com 与 OpenTelemetry 操作器的 Instrumentation 资源不同。

如需了解使用 GKE 托管的 OpenTelemetry 的步骤,请参阅部署 GKE 托管的 OpenTelemetry

借助适用于 GKE 的 Managed OpenTelemetry,您可以收集 OTLP 遥测数据,而无需管理和运行 OpenTelemetry 收集器。运行自己的收集器可能会产生开销,包括身份验证、配置、升级和监控。不过,如果您需要收集器级过滤和控制,可以使用 Google 构建的 OpenTelemetry 收集器,而不是此代管式服务。

OpenTelemetry 提供了 API、库和 SDK,用于生成分布式跟踪记录、指标和日志,以便进行应用监控。如需详细了解 OpenTelemetry,请参阅有关 OpenTelemetryOpenTelemetry 协议 (OTLP) 的文档。 如需详细了解如何生成和收集应用的运行时行为数据,请参阅插桩和可观测性

GKE 托管式 OpenTelemetry 的工作原理

GKE 的受管 OpenTelemetry 包含两个组件:受管收集和自动配置。

代管式合集

通过将受管理的 OpenTelemetry 收集器部署到集群,受管理的收集功能可提供集群内 OTLP 端点。此集群内 OTLP 端点会接收 OTLP 格式的轨迹、指标和日志。如需接收工作负载中的数据,必须将工作负载配置为向收集器发送数据。

受管理的收集器的端点为:http://opentelemetry-collector.gke-managed-otel.svc.cluster.local:4318

受管理的收集会将收集的数据发送到 Google Cloud Observability。然后,您可以在以下服务中使用这些数据:

您可以使用控制台或 gcloud CLI 为 GKE 集群启用受管收集器。如需查看相关说明,请参阅在集群中为 GKE 启用托管式 OpenTelemetry

自动配置

自动配置功能可让 GKE 配置在 GKE 上运行的工作负载,以将信号发送到受管收集器的端点。

您可以使用不同的方法来配置工作负载。 自动配置使用注入到工作负载容器中的环境变量,让工作负载向受管的收集器发送信号。如果您是手动配置工作负载,则可以使用其他方法。如需了解详情,请参阅手动配置

使用自动配置时,您可以使用 Instrumentation 自定义资源来定义配置。然后,GKE 会将环境变量(例如 OTLP 指标导出器端点)注入到工作负载的容器中。当工作负载的容器具有这些环境变量时,工作负载在运行时会将 OpenTelemetry 数据发送到受管收集器。

对于原生支持 OpenTelemetry 的工作负载,系统会自动进行配置,这意味着这些工作负载使用 OpenTelemetry SDK,并使用标准 OpenTelemetry 环境变量进行配置。如需了解详情,请参阅支持的工作负载

如需了解如何使用自动配置来配置应用,请参阅配置应用以使用受管理的 OpenTelemetry 收集器

Instrumentation 自定义资源

您可以使用 Instrumentation 自定义资源执行以下操作:

  • 指定是将环境变量注入所选 Pod 的容器中,还是注入命名空间中所有 Pod 的容器中。
  • 控制收集的数据类型(日志、指标和跟踪记录)。
  • 控制将指标数据发送到受管收集器的频率。
  • 控制轨迹数据的抽样率。

如需详细了解如何使用 Instrumentation 自定义资源,请参阅修改配置

自动注入环境变量

如需将 OpenTelemetry 环境变量自动注入到 GKE 工作负载中,您需要在集群中配置 Instrumentation 对象。然后,当您在集群中使用 Instrumentation 对象部署应用时,GKE 会注入这些变量。

在部署应用和创建 Pod 时,Instrumentation 对象需要位于集群中。如果您在创建 Instrumentation 对象之前部署了应用,则需要重启应用的 pod,以触发环境变量的自动注入。

环境变量

当工作负载部署到启用了自动配置的命名空间时,GKE 会将环境变量注入到工作负载的容器中。这些环境变量是 OpenTelemetry SDK 配置中的 OpenTelemetry 变量。

以下列表包含可由 GKE 的受管 OpenTelemetry 注入的所有环境变量。注入到容器中的具体环境变量取决于 Instrumentation 自定义资源中的配置。

可自动注入到容器中的环境变量如下:

  • OpenTelemetry 导出器端点。
    • OTEL_EXPORTER_OTLP_ENDPOINT:任何信号类型的基本端点网址。此端点始终指向集群内受管理的 OpenTelemetry 收集器 HTTP 端点,用于收集日志、指标和轨迹。 端点为:http://opentelemetry-collector.gke-managed-otel.svc.cluster.local:4318
  • 轨迹采样率配置。
    • OTEL_TRACES_SAMPLER:将 SDK 用于对轨迹进行抽样的采样器设置为以下其中一项:
      • parentbased_traceidratio(当在自定义资源中配置了轨迹抽样时)。
      • parentbased_always_on 是此环境变量的默认值。如果未配置此环境变量或此环境变量在自定义资源中为 null,则使用此值。
    • OTEL_TRACES_SAMPLER_ARG:指定轨迹采样率(介于 0.0 和 1.0 之间)。如果未在自定义资源中配置,则使用 1.0。
  • 两次连续指标导出开始之间的延迟时间间隔。
    • OTEL_METRIC_EXPORT_INTERVAL:两次导出尝试之间的间隔时间(以毫秒为单位)(最小值:5000,最大值:300000,默认值:60000)。
  • 按信号类型停用 OTLP 遥测数据导出。当 Instrumentation 文件中的 tracer_providermeter_providerlogger_provider 设置为 null 时,信号导出器会被停用。
    • OTEL_TRACES_EXPORTER:设置为 none 时,停用轨迹导出。默认值:otlp
    • OTEL_METRICS_EXPORTER:设置为 none 时,停用指标导出功能。默认值:otlp
    • OTEL_LOGS_EXPORTER:设置为 none 时,系统会停用日志导出功能。默认值:otlp
  • 通过 OpenTelemetry 收集器的 Kubernetes 属性处理器识别 hostNetwork Pod 以关联元数据。
    • K8S_POD_UID:hostNetwork Pod 的 Pod UID,用于填充 OTEL_RESOURCE_ATTRIBUTES 环境变量中的 k8s.pod.uid 设置。
    • OTEL_RESOURCE_ATTRIBUTES:该值包含 k8s.pod.uid=$(K8S_POD_UID),以允许 Kubernetes Attributes Processor 将元数据(例如 k8s.namespace.namek8s.deployment.namek8s.node.name)与 hostNetwork Pod 相关联。 通过将元数据与 hostNetwork Pod 相关联,可以将提取的元数据作为资源属性添加到 span、指标和日志中。

手动配置

您可以使用不同的方法来配置工作负载,以将信号发送到受管理的收集器的端点。如果您是手动配置工作负载,则可以手动添加和修改环境变量,也可以使用其他方法,例如命令行标志。

我们不建议对同一工作负载同时使用手动配置和自动配置,因为自动配置可能会覆盖手动更改。这种组合可能会使跟踪配置更改变得更加困难。

如需详细了解自动配置,请参阅自动配置

支持的工作负载

受支持的工作负载是指使用 OpenTelemetry 收集应用运行时行为相关数据的工作负载。如果工作负载使用 OpenTelemetry SDK 并通过标准 OpenTelemetry 环境变量进行配置,则它们会原生支持 OpenTelemetry。例如,智能体开发套件 (ADK) 原生支持 OpenTelemetry。

如需详细了解如何生成和收集应用运行时行为数据,请参阅插桩和可观测性

如果工作负载支持某些类型的 OTLP 数据,但不支持其他类型的 OTLP 数据,则 Managed OpenTelemetry for GKE 会收集 OTLP 数据。例如,如果工作负载使用 OpenTelemetry SDK 来实现跟踪记录,但不使用它来记录日志或收集指标,则 Managed OpenTelemetry for GKE 不会收集日志和指标数据。如需详细了解如何控制要收集的数据类型,请参阅选择要收集的信号类型

不支持为 GKE Autopilot 合作伙伴提供的特权工作负载注入 OpenTelemetry 配置。

结算

向 Google Cloud发送遥测数据时,您需要按提取量付费。指标按 Google Cloud Managed Service for Prometheus 价格计费,日志按 Cloud Logging 价格计费,跟踪记录按 Cloud Trace 价格计费。

如需了解与跟踪记录、日志和 Google Cloud Managed Service for Prometheus 指标提取关联的费用,请参阅 Google Cloud Observability 价格

配额

使用适用于 GKE 的 Managed OpenTelemetry 时,Google Cloud Observability 服务的配额适用。有关详情,请参阅:

后续步骤