Resources(资源)
介绍
资源以资源属性的形式表示产生遥测数据的实体。例如, 进程 产生的遥测数据运行在 Kubernetes 的容器中,那么它会具有 进程 的名称、Pod 名称、命名空间,可能还有部署名称。这四个属性都可以包含在资源中。
在你的可观测性后端中,你可以使用资源信息来更好地调查异常行为。例如, 如果你的追踪或指标数据表明系统中存在延迟,你可以将问题定位到特定的容器、Pod 或 Kubernetes 部署上。
如果你使用 Jaeger 作为可观测性后端, 资源属性会被归类显示在 Process(进程) 标签页下:

资源在初始化时被添加到 TracerProvider
或 MetricProvider
中,
并且这一绑定在创建之后无法更改。一旦资源被设置,
通过该 Provider 创建的所有 Tracer
或 Meter
所生成的 span 与 metric 都会自动关联此资源信息。
带默认值的语义属性
OpenTelemetry SDK 提供了一些默认的资源属性。其中之一是 service.name
,
它表示服务的逻辑名称。默认情况下,SDK 会为该属性设置值为 unknown_service
,
因此建议你显式设置该值,可以通过代码设定,或设置环境变量 OTEL_SERVICE_NAME
来实现。
此外,SDK 还会自动提供以下属性用于标识自身:
telemetry.sdk.name
telemetry.sdk.language
telemetry.sdk.version
资源探测器(Resource Detectors)
大多数语言特定的 SDK 提供了一套资源探测器(Resource Detectors), 可用于从环境中自动检测资源信息。常见的资源探测器包括:
- 操作系统(Operating System)
- 主机(Host)
- 进程与运行时(Process and Process Runtime)
- 容器(Container)
- Kubernetes
- 云厂商特有属性(Cloud-Provider-Specific Attributes)
- 更多资源类型
自定义资源属性
你也可以自定义资源属性。可以通过代码提供,或者通过设置环境变量 OTEL_RESOURCE_ATTRIBUTES
来传入。
如果适用,建议参考资源属性的语义约定。
例如,你可以通过设置 deployment.environment.name
来指明部署环境的名称:
env OTEL_RESOURCE_ATTRIBUTES=deployment.environment.name=production yourApp
Feedback
Was this page helpful?
Thank you. Your feedback is appreciated!
Please let us know how we can improve this page. Your feedback is appreciated!