资源

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.

资源检测

PHP SDK可以从多种来源检测资源,默认情况下会使用所有可用的资源检测器:

  • 环境变量 (OTEL_RESOURCE_ATTRIBUTES, OTEL_SERVICE_NAME)
  • 主机信息
  • 主机操作系统
  • 当前进程
  • 运行时

禁用资源检测

默认情况下,所有SDK资源检测器都会被使用,但您可以使用环境变量 OTEL_PHP_RESOURCE_DETECTORS 来只启用某些检测器,或完全禁用它们:

  • env
  • host
  • os
  • process
  • process_runtime
  • sdk
  • sdk_provided
  • all - 启用所有资源检测器
  • none - 禁用资源检测

例如,要仅启用 envhostsdk 检测器:

env OTEL_PHP_RESOURCE_DETECTORS=env,host,sdk \
php example.php

自定义资源检测器

可以将适用于通用平台或供应商特定环境的资源检测器安装为composer包。

例如,要安装并启用 container 资源检测器:

composer require open-telemetry/detector-container
env OTEL_PHP_RESOURCE_DETECTORS=container \
php example.php

请注意,安装的检测器会自动包含在默认的 all 资源检测器列表中。

使用环境变量添加资源

如果您需要的资源没有SDK检测器,您可以通过 OTEL_RESOURCE_ATTRIBUTES 环境变量添加任意资源,该变量会被 env 检测器解释。该变量使用逗号分隔的键值对列表,例如:

env OTEL_RESOURCE_ATTRIBUTES="service.name=my_service,service.namespace=demo,service.version=1.0,deployment.environment=development" \
php example.php

在代码中添加资源

还可以在代码中配置自定义资源。在此示例中,将默认资源(如上所述检测)与自定义资源合并。然后,将资源传递给追踪器提供程序,资源将与所有生成的跨度相关联。

$resource = ResourceInfoFactory::defaultResource()->merge(ResourceInfo::create(Attributes::create([
    ResourceAttributes::SERVICE_NAMESPACE => 'foo',
    ResourceAttributes::SERVICE_NAME => 'bar',
    ResourceAttributes::SERVICE_INSTANCE_ID => 1,
    ResourceAttributes::SERVICE_VERSION => '0.1',
    ResourceAttributes::DEPLOYMENT_ENVIRONMENT => 'development',
])));

$tracerProvider =  new TracerProvider(
    new SimpleSpanProcessor(
        (new ConsoleSpanExporterFactory())->create()
    ),
    null,
    $resource
);
最后修改 December 10, 2023: translate (a4350d6e)