资源

简介

一个 资源 代表生成遥测数据的实体及其资源属性。例如,一个正在 Kubernetes 容器中运行并生成遥测数据的进程具有进程名、Pod 名、命名空间以及可能的部署名。所有这四个属性都可以包含在资源中。

在您的可观测性后端,您可以使用资源信息更好地调查有趣的现象。例如,如果您的跟踪或指标数据表明系统中存在延迟,您可以将其缩小到特定的容器、Pod 或 Kubernetes 部署。

如果您将 Jaeger 用作您的可观测性后端,资源属性会分组在 Process 选项卡下。

A screenshot from Jaeger showing an example output of resource attributes associated to a trace

在创建 TracerProviderMetricProvider 时,资源会与之关联,此后无法更改。一旦关联了资源,由该提供程序产生的 TracerMeter 所产生的的所有 span 和 metric 都将与其关联的资源一起产生。

具有 SDK 提供默认值的语义属性

OpenTelemetry SDK 提供了一些属性,其中 service.name 用于表示服务的逻辑名称。默认情况下,SDK 会为此值分配 unknown_service,因此建议显式设置它,可以在代码中设置,也可以通过设置环境变量 OTEL_SERVICE_NAME 来设置。

此外,SDK 还提供以下资源属性来标识自身:telemetry.sdk.nametelemetry.sdk.languagetelemetry.sdk.version

资源探测器

大多数特定语言的 SDK 都提供了一组资源探测器,可用于从环境中自动检测资源信息。常见的资源探测器包括:

自定义资源

您还可以提供自己的资源属性。您可以在代码中提供它们,也可以通过填充环境变量 OTEL_RESOURCE_ATTRIBUTES 来提供。如果适用,请使用 资源属性的语义约定。例如,您可以使用 deployment.environment.name 来提供您的 部署环境 的名称。

env OTEL_RESOURCE_ATTRIBUTES=deployment.environment.name=production yourApp