资源

一个 资源 代表生成遥测数据的实体,作为资源属性。例如,一个在 Kubernetes 容器中运行的、生成遥测数据的 OTP Release,会有一个 OTP Release 名称、一个 pod 名称、一个命名空间,以及可能的部署名称。这四个属性都可以包含在资源中。

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

使用资源检测器

资源检测器从各种来源获取资源属性。默认的检测器使用 OS 环境变量 OTEL_RESOURCE_ATTRIBUTESopentelemetry OTP 应用程序环境变量 resource

要使用的检测器是模块名称的列表,可以在应用程序配置中进行配置。

%% sys.config
{opentelemetry, {resource_detectors, [otel_resource_env_var, otel_resource_app_env]}}
## runtime.exs
config :opentelemetry, resource_detectors: [:otel_resource_env_var, :otel_resource_app_env]

或者通过环境变量 OTEL_RESOURCE_DETECTORS 进行配置。

OTEL_RESOURCE_DETECTORS=otel_resource_env_var,otel_resource_app_env

所有资源检测器都受到超时保护(以毫秒为单位),超时后它们将返回一个空值。这使得资源检测器可以执行如网络请求等操作,而不会无限期地挂起整个程序。默认值为 5000 毫秒,可以通过环境变量 OTEL_RESOURCE_DETECTOR_TIMEOUT 或应用程序变量 otel_resource_detector_timeout 进行设置。

使用 OS 和 OTP 应用程序环境变量添加资源

在启用两个默认资源检测器的情况下,您可以使用 OS 环境变量 OTEL_RESOURCE_ATTRIBUTES 设置资源属性。

OTEL_RESOURCE_ATTRIBUTES="deployment.environment=development"

或者,在 sys.configruntime.exsopentelemetry 应用程序配置下的 resource OTP 应用程序环境变量中使用。

%% sys.config
{opentelemetry, {resource, #{deployment => #{environment => <<"development">>}}}}
## runtime.exs
config :opentelemetry, resource: %{deployment: %{environment: "development" }}

resource OTP 应用程序环境变量中的资源属性会被展平并用 . 连接,因此 #{deployment => #{environment => <<"development">> }}#{'deployment.environment' => <<"development">>} 相同。

自定义资源检测器

可以通过实现 otel_resource_detector 行为 来创建自定义资源检测器,其中包含一个名为 get_resource/1 的回调函数,该函数返回一个 otel_resource

请注意,对于 resource 已定义了 语义约定,在添加新资源属性时,如果适用,应遵循这些约定。


最后修改于 2024 年 7 月 10 日:[Erlang] Review propagation docs (#4801) (a7768c5c)