资源
一个 资源 代表产生遥测数据的实体,并以资源属性的形式表示。例如,一个在 Kubernetes 容器中运行并产生遥测数据的进程,会拥有进程名、Pod 名、命名空间,以及可能的部署名。这四个属性都可以包含在资源中。
在您的可观测性后端,您可以使用资源信息更好地调查有趣的现象。例如,如果您的跟踪或指标数据表明系统中存在延迟,您可以将其缩小到特定的容器、Pod 或 Kubernetes 部署。
资源检测
PHP SDK 从多种来源检测资源,默认情况下将使用所有可用的资源探测器
- 环境变量 (
OTEL_RESOURCE_ATTRIBUTES,OTEL_SERVICE_NAME) - 主机信息
- 主机操作系统
- 当前进程
- 运行时
禁用资源检测
默认情况下,所有 SDK 资源探测器都将被使用,但您可以使用环境变量 OTEL_PHP_DETECTORS 来仅启用某些探测器,或完全禁用它们
envhostosprocessprocess_runtimesdksdk_providedall- 启用所有资源探测器none- 禁用资源检测
例如,仅启用 env、host 和 sdk 探测器
env OTEL_PHP_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
在代码中添加资源
自定义资源也可以在您的代码中进行配置。在此,默认资源(如上所述检测到的)与自定义资源合并。然后将资源传递给追踪器提供程序,它们将与所有生成的 Span 相关联。
$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_NAME => 'development',
])));
$tracerProvider = new TracerProvider(
new SimpleSpanProcessor(
(new ConsoleSpanExporterFactory())->create()
),
null,
$resource
);