Skip to content
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions src/SDK/Resource/Detectors/Composer.php
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,9 @@
use OpenTelemetry\SDK\Resource\ResourceInfoFactory;
use OpenTelemetry\SemConv\ResourceAttributes;

/**
* Detect service name and version of root package. Not included in `all` detectors.
*/
final class Composer implements ResourceDetectorInterface
{
public function getResource(): ResourceInfo
Expand Down
2 changes: 1 addition & 1 deletion src/SDK/Resource/Detectors/Composite.php
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ public function __construct(private readonly iterable $resourceDetectors)

public function getResource(): ResourceInfo
{
$resource = ResourceInfoFactory::emptyResource();
$resource = ResourceInfoFactory::mandatoryResource();
foreach ($this->resourceDetectors as $resourceDetector) {
$resource = $resource->merge($resourceDetector->getResource());
}
Expand Down
8 changes: 0 additions & 8 deletions src/SDK/Resource/Detectors/Environment.php
Original file line number Diff line number Diff line change
Expand Up @@ -22,14 +22,6 @@ public function getResource(): ResourceInfo
? self::decode(Configuration::getMap(Variables::OTEL_RESOURCE_ATTRIBUTES, []))
: [];

//@see https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/configuration/sdk-environment-variables.md#general-sdk-configuration
$serviceName = Configuration::has(Variables::OTEL_SERVICE_NAME)
? Configuration::getString(Variables::OTEL_SERVICE_NAME)
: null;
if ($serviceName) {
$attributes[ResourceAttributes::SERVICE_NAME] = $serviceName;
}

return ResourceInfo::create(Attributes::create($attributes), ResourceAttributes::SCHEMA_URL);
}

Expand Down
8 changes: 8 additions & 0 deletions src/SDK/Resource/Detectors/Host.php
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,14 @@
use OpenTelemetry\SDK\Resource\ResourceDetectorInterface;
use OpenTelemetry\SDK\Resource\ResourceInfo;
use OpenTelemetry\SemConv\ResourceAttributes;
use const PHP_OS;
use const PHP_OS_FAMILY;
use function php_uname;
use function strtolower;

/**
* @see https://github.com/open-telemetry/opentelemetry-specification/blob/v1.8.0/specification/resource/semantic_conventions/host.md#host
* @see https://github.com/open-telemetry/opentelemetry-specification/blob/v1.8.0/specification/resource/semantic_conventions/os.md
*/
final class Host implements ResourceDetectorInterface
{
Expand All @@ -31,6 +35,10 @@ public function getResource(): ResourceInfo
ResourceAttributes::HOST_NAME => php_uname('n'),
ResourceAttributes::HOST_ARCH => php_uname('m'),
ResourceAttributes::HOST_ID => $this->getMachineId(),
ResourceAttributes::OS_TYPE => strtolower(PHP_OS_FAMILY),
ResourceAttributes::OS_DESCRIPTION => php_uname('r'),
ResourceAttributes::OS_NAME => PHP_OS,
ResourceAttributes::OS_VERSION => php_uname('v'),
];

return ResourceInfo::create(Attributes::create($attributes), ResourceAttributes::SCHEMA_URL);
Expand Down
17 changes: 2 additions & 15 deletions src/SDK/Resource/Detectors/OperatingSystem.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,29 +4,16 @@

namespace OpenTelemetry\SDK\Resource\Detectors;

use OpenTelemetry\SDK\Common\Attribute\Attributes;
use OpenTelemetry\SDK\Resource\ResourceDetectorInterface;
use OpenTelemetry\SDK\Resource\ResourceInfo;
use OpenTelemetry\SemConv\ResourceAttributes;
use const PHP_OS;
use const PHP_OS_FAMILY;
use function php_uname;
use function strtolower;

/**
* @see https://github.com/open-telemetry/opentelemetry-specification/blob/v1.8.0/specification/resource/semantic_conventions/os.md
* @deprecated Use Host detector instead.
*/
final class OperatingSystem implements ResourceDetectorInterface
{
public function getResource(): ResourceInfo
{
$attributes = [
ResourceAttributes::OS_TYPE => strtolower(PHP_OS_FAMILY),
ResourceAttributes::OS_DESCRIPTION => php_uname('r'),
ResourceAttributes::OS_NAME => PHP_OS,
ResourceAttributes::OS_VERSION => php_uname('v'),
];

return ResourceInfo::create(Attributes::create($attributes), ResourceAttributes::SCHEMA_URL);
return ResourceInfo::emptyResource();
}
}
13 changes: 10 additions & 3 deletions src/SDK/Resource/Detectors/Process.php
Original file line number Diff line number Diff line change
Expand Up @@ -11,9 +11,12 @@
use OpenTelemetry\SDK\Resource\ResourceInfo;
use OpenTelemetry\SemConv\ResourceAttributes;
use const PHP_BINARY;
use function php_sapi_name;
use const PHP_VERSION;

/**
* @see https://github.com/open-telemetry/opentelemetry-specification/blob/v1.8.0/specification/resource/semantic_conventions/process.md#process
* @see https://github.com/open-telemetry/opentelemetry-specification/blob/v1.8.0/specification/resource/semantic_conventions/process.md#process-runtimes
*/
final class Process implements ResourceDetectorInterface
{
Expand All @@ -22,9 +25,13 @@ final class Process implements ResourceDetectorInterface
*/
public function getResource(): ResourceInfo
{
$attributes = [];
$attributes[ResourceAttributes::PROCESS_PID] = getmypid();
$attributes[ResourceAttributes::PROCESS_EXECUTABLE_PATH] = PHP_BINARY;
$attributes = [
ResourceAttributes::PROCESS_RUNTIME_NAME => php_sapi_name(),
ResourceAttributes::PROCESS_RUNTIME_VERSION => PHP_VERSION,
ResourceAttributes::PROCESS_PID => getmypid(),
ResourceAttributes::PROCESS_EXECUTABLE_PATH => PHP_BINARY,
];

/**
* @psalm-suppress PossiblyUndefinedArrayOffset
*/
Expand Down
13 changes: 2 additions & 11 deletions src/SDK/Resource/Detectors/ProcessRuntime.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,25 +4,16 @@

namespace OpenTelemetry\SDK\Resource\Detectors;

use OpenTelemetry\SDK\Common\Attribute\Attributes;
use OpenTelemetry\SDK\Resource\ResourceDetectorInterface;
use OpenTelemetry\SDK\Resource\ResourceInfo;
use OpenTelemetry\SemConv\ResourceAttributes;
use function php_sapi_name;
use const PHP_VERSION;

/**
* @see https://github.com/open-telemetry/opentelemetry-specification/blob/v1.8.0/specification/resource/semantic_conventions/process.md#process-runtimes
* @deprecated Use Process detector instead.
*/
final class ProcessRuntime implements ResourceDetectorInterface
{
public function getResource(): ResourceInfo
{
$attributes = [
ResourceAttributes::PROCESS_RUNTIME_NAME => php_sapi_name(),
ResourceAttributes::PROCESS_RUNTIME_VERSION => PHP_VERSION,
];

return ResourceInfo::create(Attributes::create($attributes), ResourceAttributes::SCHEMA_URL);
return ResourceInfo::emptyResource();
}
}
3 changes: 2 additions & 1 deletion src/SDK/Resource/Detectors/Sdk.php
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,8 @@
use OpenTelemetry\SemConv\ResourceAttributes;

/**
* @see https://github.com/open-telemetry/opentelemetry-specification/blob/v1.8.0/specification/resource/semantic_conventions/README.md#telemetry-sdk
* The SDK MUST provide access to a Resource with at least the attributes listed
* at {@see https://github.com/open-telemetry/semantic-conventions/blob/v1.32.0/docs/resource/README.md#semantic-attributes-with-sdk-provided-default-value}
*/
final class Sdk implements ResourceDetectorInterface
{
Expand Down
10 changes: 2 additions & 8 deletions src/SDK/Resource/Detectors/SdkProvided.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,22 +4,16 @@

namespace OpenTelemetry\SDK\Resource\Detectors;

use OpenTelemetry\SDK\Common\Attribute\Attributes;
use OpenTelemetry\SDK\Resource\ResourceDetectorInterface;
use OpenTelemetry\SDK\Resource\ResourceInfo;
use OpenTelemetry\SemConv\ResourceAttributes;

/**
* @see https://github.com/open-telemetry/semantic-conventions/blob/main/docs/resource/README.md#semantic-attributes-with-sdk-provided-default-value
* @deprecated Use Service detector instead.
*/
final class SdkProvided implements ResourceDetectorInterface
{
public function getResource(): ResourceInfo
{
$attributes = [
ResourceAttributes::SERVICE_NAME => 'unknown_service:php',
];

return ResourceInfo::create(Attributes::create($attributes), ResourceAttributes::SCHEMA_URL);
return ResourceInfo::emptyResource();
}
}
8 changes: 8 additions & 0 deletions src/SDK/Resource/Detectors/Service.php
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@
namespace OpenTelemetry\SDK\Resource\Detectors;

use OpenTelemetry\SDK\Common\Attribute\Attributes;
use OpenTelemetry\SDK\Common\Configuration\Configuration;
use OpenTelemetry\SDK\Common\Configuration\Variables;
use OpenTelemetry\SDK\Resource\ResourceDetectorInterface;
use OpenTelemetry\SDK\Resource\ResourceInfo;
use OpenTelemetry\SemConv\ResourceAttributes;
Expand All @@ -19,10 +21,16 @@ public function getResource(): ResourceInfo
{
static $serviceInstanceId;
$serviceInstanceId ??= Uuid::uuid4()->toString();
$serviceName = Configuration::has(Variables::OTEL_SERVICE_NAME)
? Configuration::getString(Variables::OTEL_SERVICE_NAME)
: null;

$attributes = [
ResourceAttributes::SERVICE_INSTANCE_ID => $serviceInstanceId,
];
if ($serviceName !== null) {
$attributes[ResourceAttributes::SERVICE_NAME] = $serviceName;
}

return ResourceInfo::create(Attributes::create($attributes), ResourceAttributes::SCHEMA_URL);
}
Expand Down
41 changes: 16 additions & 25 deletions src/SDK/Resource/ResourceInfoFactory.php
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
use OpenTelemetry\SDK\Common\Configuration\KnownValues as Values;
use OpenTelemetry\SDK\Common\Configuration\Variables as Env;
use OpenTelemetry\SDK\Registry;
use OpenTelemetry\SemConv\ResourceAttributes;
use RuntimeException;

class ResourceInfoFactory
Expand All @@ -27,58 +28,38 @@ public static function defaultResource(): ResourceInfo
// ascending priority: keys from later detectors will overwrite earlier
return (new Detectors\Composite([
new Detectors\Host(),
new Detectors\OperatingSystem(),
new Detectors\Process(),
new Detectors\ProcessRuntime(),
new Detectors\Sdk(),
new Detectors\SdkProvided(),
new Detectors\Composer(),
...Registry::resourceDetectors(),
new Detectors\Environment(),
new Detectors\Sdk(),
new Detectors\Service(),
]))->getResource();
}

$resourceDetectors = [];

foreach ($detectors as $detector) {
switch ($detector) {
case Values::VALUE_DETECTORS_SERVICE:
$resourceDetectors[] = new Detectors\Service();

break;
case Values::VALUE_DETECTORS_ENVIRONMENT:
$resourceDetectors[] = new Detectors\Environment();

break;
case Values::VALUE_DETECTORS_HOST:
$resourceDetectors[] = new Detectors\Host();

break;
case Values::VALUE_DETECTORS_OS:
$resourceDetectors[] = new Detectors\OperatingSystem();

break;
case Values::VALUE_DETECTORS_PROCESS:
$resourceDetectors[] = new Detectors\Process();

break;
case Values::VALUE_DETECTORS_PROCESS_RUNTIME:
$resourceDetectors[] = new Detectors\ProcessRuntime();

break;
case Values::VALUE_DETECTORS_SDK:
$resourceDetectors[] = new Detectors\Sdk();

break;
case Values::VALUE_DETECTORS_SDK_PROVIDED:
$resourceDetectors[] = new Detectors\SdkProvided();

break;

case Values::VALUE_DETECTORS_COMPOSER:
$resourceDetectors[] = new Detectors\Composer();

break;
case Values::VALUE_DETECTORS_SDK_PROVIDED: //deprecated
case Values::VALUE_DETECTORS_OS: //deprecated
case Values::VALUE_DETECTORS_PROCESS_RUNTIME: //deprecated
case Values::VALUE_NONE:

break;
Expand All @@ -90,6 +71,8 @@ public static function defaultResource(): ResourceInfo
}
}
}
$resourceDetectors [] = new Detectors\Sdk();
$resourceDetectors [] = new Detectors\Service();

return (new Detectors\Composite($resourceDetectors))->getResource();
}
Expand All @@ -102,4 +85,12 @@ public static function emptyResource(): ResourceInfo

return self::$emptyResource;
}

public static function mandatoryResource(): ResourceInfo
{
return ResourceInfo::create(Attributes::create(
[
ResourceAttributes::SERVICE_NAME => 'unknown_service:php'],
));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -695,7 +695,7 @@ resource:
- process.command_args
# Configure resource schema URL.
# If omitted or null, no schema URL is used.
schema_url: https://opentelemetry.io/schemas/1.16.0
schema_url: https://opentelemetry.io/schemas/1.30.0
# Configure instrumentation.
instrumentation:
# Configure general SemConv options that may apply to multiple languages and instrumentations.
Expand Down
Loading
Loading