资源

介绍

A resource represents the entity producing telemetry as resource attributes. For example, a process producing telemetry that is running in a container on Kubernetes has a process name, a pod name, a namespace, and possibly a deployment name. All four of these attributes can be included in the resource.

In your observability backend, you can use resource information to better investigate interesting behavior. For example, if your trace or metrics data indicate latency in your system, you can narrow it down to a specific container, pod, or Kubernetes deployment.

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

Jaeger的屏幕截图显示与跟踪相关的资源属性示例输出

TraceProviderMetricProvider 在初始化期间创建时,将会添加一个资源。此关联无法稍后更改。添加资源后,TracerMeter 提供程序生成的所有 span 和指标都会与此资源相关联。

带有 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 来提供部署环境的名称:

env OTEL_RESOURCE_ATTRIBUTES=deployment.environment=production yourApp
最后修改 December 10, 2023: translate (a4350d6e)